企业合规必修课:ZITADEL多许可证架构与AGPL-3.0实践指南
还在为开源许可证合规头疼?当企业使用开源身份管理平台时,如何避免法律风险、正确处理修改代码的开源义务、理解不同模块的许可差异?本文将以ZITADEL为例,深度解析其采用的GNU Affero General Public License v3.0(AGPL-3.0)核心条款与多许可证架构,提供一份即学即用的合规操作指南。读完本文,你将清晰掌握AGPL-3.0的网络传播义务、ZITADEL特殊模块的许可例外,以及企业商用时的合规路径。
ZITADEL许可证架构概览
ZITADEL采用多许可证分层架构,核心服务与特定模块使用不同开源许可证,这种设计既保障了项目的开源属性,又为企业商用提供了灵活性。根据LICENSING.md文件定义,项目许可证分布如下:
核心许可证矩阵
| 模块路径 | 许可证类型 | 适用范围 | 商业使用限制 |
|---|---|---|---|
| 项目根目录(除例外) | AGPL-3.0-only | 核心API服务、后端逻辑 | 修改需开源,网络服务需提供源代码 |
| proto/ | Apache License 2.0 | API协议定义 | 可商用,需保留版权声明 |
| apps/login/ | MIT License | 登录界面 | 完全自由,可闭源商用 |
| packages/zitadel-client/ | MIT License | 客户端SDK | 完全自由,可闭源商用 |
| packages/zitadel-proto/ | MIT License | 协议缓冲区生成代码 | 完全自由,可闭源商用 |
⚠️ 关键提示:AGPL-3.0与MIT/Apache 2.0的混合使用需特别注意模块边界。例如,基于proto/目录(Apache 2.0)开发的客户端可闭源,但修改AGPL-3.0覆盖的API服务代码则必须开源。
许可证文件位置
ZITADEL在代码库中通过以下文件明确许可条款:
- LICENSE:完整的AGPL-3.0协议文本
- LICENSING.md:项目特定的许可证说明与例外声明
- 各子目录README:如apps/login/README.md会注明MIT许可
AGPL-3.0核心条款深度解析
AGPL-3.0作为GPL系列许可证的网络强化版本,在传统GPL条款基础上增加了网络传播义务,这对提供SaaS服务的企业尤为重要。以下是与ZITADEL使用相关的核心条款:
1. 网络服务源代码提供义务(§13)
当你将修改后的ZITADEL部署为网络服务(如作为身份管理SaaS提供),必须向所有用户提供修改后的源代码。这是AGPL与普通GPL的关键区别,也是企业最容易踩坑的点。
条款原文:"如果修改版本在网络服务器上运行,并向公众提供服务,那么修改后的源代码必须对公众开放。"
合规实践:
- 若仅使用未修改的ZITADEL官方版本,无需开源企业自身代码
- 若定制化修改了AGPL-3.0覆盖的模块(如internal/目录下的API逻辑),必须通过公开渠道提供修改源码
- 推荐做法:建立公开代码仓库,清晰标记修改记录,并在服务首页提供源码访问链接
2. 衍生作品许可(§5)
对AGPL-3.0覆盖的代码进行修改或衍生开发,必须以相同许可证发布。这意味着:
- 不能将AGPL-3.0代码与闭源代码静态链接
- 不能通过技术手段规避开源义务(如将AGPL代码作为独立服务调用不构成规避)
- 修改记录必须保留,且需在衍生作品中标注原始版权声明
ZITADEL实践案例:cmd/setup/目录下的数据库初始化脚本作为核心服务的一部分,修改后需遵循AGPL-3.0开源;而基于packages/zitadel-client/(MIT许可)开发的企业内部客户端则可完全闭源。
3. 专利许可(§11)
AGPL-3.0包含专利防御条款,贡献者自动授予用户使用其专利的许可,但如果用户发起专利诉讼,相关许可将自动终止。这一条款有效防止了"专利劫持"行为。
ZITADEL合规操作指南
基于ZITADEL的许可证架构,企业在不同使用场景下需采取不同合规策略:
场景1:直接使用官方版本部署内部服务
操作步骤:
- 从官方仓库克隆代码:
git clone https://gitcode.com/GitHub_Trending/zi/zitadel - 按照CONTRIBUTING.md的说明进行构建部署
- 保留所有原始版权声明文件(LICENSE、NOTICE等)
- 记录部署版本号,便于后续审计
合规要点:无需修改源代码时,无开源义务,但需保留许可证文件。
场景2:修改登录界面(MIT许可模块)
apps/login/目录采用MIT许可,企业可完全自由定制:
# 克隆代码后,直接修改登录界面
cd apps/login/src/components
# 修改登录表单样式或逻辑
vim LoginForm.tsx
# 构建部署,无需开源修改内容
pnpm nx run @zitadel/login:build
合规检查清单:
- 保留原始版权声明(文件顶部注释)
- 不删除LICENSE文件
- 可自由添加企业商标或定制化内容
场景3:定制API服务(AGPL-3.0模块)
若需修改internal/目录下的API逻辑(如添加自定义认证流程),则需遵守AGPL-3.0的开源义务:
- 创建公开仓库:在代码托管平台建立修改版本的公开仓库
- 明确标注修改:在README中说明与官方版本的差异点
- 提供源码访问:若通过网络提供服务,需在服务页面添加"获取源代码"链接
- 保留许可证:确保所有修改文件顶部包含AGPL-3.0声明
示例代码头部声明:
// Copyright (C) 2025 ZITADEL and contributors
// This file is part of ZITADEL.
//
// ZITADEL is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ZITADEL is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with ZITADEL. If not, see <https://www.gnu.org/licenses/>.
场景4:企业商用与商业许可
当AGPL-3.0的开源义务与企业商业利益冲突时(如不愿公开核心业务逻辑),可选择ZITADEL的商业许可:
- 联系ZITADEL团队:通过官方联系方式申请商业授权
- 明确许可范围:确定需要商用的模块与使用场景
- 获取商业协议:签署商业许可协议,获得AGPL-3.0义务豁免
- 接收商业支持:获得官方技术支持与长期维护保障
注意:未获得商业许可前,不得擅自将AGPL-3.0覆盖的修改代码用于闭源商用,否则可能面临法律风险。
常见合规问题解答
Q1:使用ZITADEL作为内部身份服务,是否需要开源企业自己的应用代码?
A:不需要。AGPL-3.0仅要求开源修改的ZITADEL代码,企业自身应用代码不受影响。但需确保ZITADEL服务未被修改,或修改已开源。
Q2:如何确认项目中某文件的许可证类型?
A:通过以下优先级判断:
- 查看文件头部的版权声明注释
- 查看所在目录的LICENSE文件
- 参考LICENSING.md的例外列表
- 默认遵循根目录AGPL-3.0许可
Q3:基于proto/目录(Apache 2.0)开发的API客户端,能否闭源商用?
A:可以。Apache 2.0允许商用,只需保留原始版权声明,无需开源衍生作品。ZITADEL的packages/zitadel-client/就是基于proto生成的MIT许可客户端库。
Q4:修改了AGPL-3.0覆盖的代码,但仅在企业内部网络使用,是否需要开源?
A:需要。AGPL-3.0的开源义务不区分网络范围(公网/内网),只要修改并运行了程序,就必须提供修改后的源代码给所有访问者(即使是内部员工)。
商用合规路径与风险规避
对于需要将ZITADEL用于商业产品的企业,建议采取以下策略:
1. 明确模块边界,隔离修改
ZITADEL模块依赖图
图:ZITADEL各模块许可证边界示意图,蓝色为AGPL-3.0,绿色为MIT/Apache 2.0
- 安全区(可闭源修改):apps/login/、packages/*
- 风险区(修改需开源):internal/、backend/、cmd/
- 安全交互:通过API调用AGPL模块,而非修改其代码
2. 商业许可申请
若需修改AGPL-3.0模块且不愿开源,可联系ZITADEL官方获取商业许可:
- 访问官方网站提交许可申请
- 提供使用场景说明(如部署规模、修改范围)
- 签署商业许可协议
- 获取闭源使用授权
3. 合规审计 checklist
定期执行以下检查,确保合规:
- 所有修改的AGPL-3.0代码已公开托管
- 服务首页提供源代码访问链接
- 各模块许可证标识正确
- 衍生作品保留原始版权声明
- 商业许可协议在有效期内
总结:平衡开源与商业利益
ZITADEL的多许可证架构为企业提供了灵活的合规路径:AGPL-3.0保障核心代码的开源自由,MIT/Apache 2.0允许客户端与API定义的商业利用。企业用户需清晰识别不同模块的许可边界,合理规划修改范围,必要时通过商业许可消除合规风险。
遵循本文指南,你将能够在享受开源身份管理平台便利的同时,有效规避法律风险,实现合规商用。记住:开源许可证不是商业障碍,而是规范合作的基础——正确理解并遵守,才能让开源生态持续健康发展。
官方合规资源:
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



