GNU Affero General Public License v3 是 Free Software Foundation 在 2007 年 11 月 19 日发布的一份自由软件许可证,通常缩写为 AGPL-3.0。它诞生的初衷很直接,GPL 有一个盲区,一旦你把软件部署在自己服务器上以网络服务的方式提供给用户,GPL 的 copyleft 义务就不会被触发,因为你没有"分发"任何一份程序。AGPL 就是补这个漏洞的。

它长什么样

AGPL-3.0 一共 15 条。前 14 条基本沿用了 GPL-3.0 的结构,Section 2 讲版权许可,Section 5 讲修改版本的整体发布,Section 6 讲分发目标代码时同时提供源代码,Section 14 讲后续版本的可选性。真正让 AGPL 和 GPL 拉开差距的是 Section 13,也就是所谓"Remote Network Interaction"。

换句话说,AGPL 的骨架和 GPL 一样,只是多了一颗钉子把"通过网络提供服务"这一场景钉死。

Section 13 是核心

Section 13 的条款不长,但分量极重。原文大意是,如果你修改了程序,并且通过远程网络让用户与之交互,你必须免费、按标准或惯例方式,向你所有远程网络用户开放修改版本的源代码。

GPL 的 copyleft 只在"分发"发生时触发。分发包括拷贝二进制、打包安装包、上传到下载站。AGPL 把这些行为之外再加了一种,也就是通过网络把服务提供给第三方。这个"加一种"就是它和 GPL 的根本区别。

它带来的直接后果是,只要一家公司把 AGPL 授权的软件部署到自家服务器对外提供服务,公司就得把自身所做的修改以源代码形式向所有访问者开放。哪怕访问者只看到一个前端页面,哪怕代码根本跑在服务器上,只要访问者通过网络与这份修改后的程序交互,就必须能拿到源代码。

具体到编程里的几个动作

第一层动作是识别。你引入的一个依赖,如果它的 LICENSE 文件里写着 AGPL-3.0,你就必须把它当作合规义务的一部分来管理,而不是当作普通依赖随意使用。第二层是判断是否"修改"。仅仅是调用库、把程序原样部署到云上,不算修改,不触发 Section 13;如果你 fork 了仓库、加了功能、改了 bug、打了补丁,那就是修改,触发义务。第三层是交付。触发之后,你必须以一种所有远程用户都能访问到的形式提供源代码,通常的做法是在项目主页挂一个源代码链接,或者在服务器上跑一个公开的源码仓库。

两个绕不开的案例

MongoDB 是最经典的例子。3.6 版本之前 MongoDB 用 AGPL-3.0 授权,2018 年之后切换到 SSPL。切换的原因公开写在官方博客里,创始人担心像 Amazon、Google 这样的云服务商会用未修改的 MongoDB 直接跑托管数据库服务,然后坐收商业利润却不需要回馈任何贡献。SSPL 比 AGPL 更严,它要求你把整个服务基础设施的代码都开源。但 SSPL 严格意义上不被 OSI 和 FSF 承认是"开源",这也说明连一个原本就吃 AGPL 苦的项目都觉得 AGPL 还不够硬。

Microsoft Roslyn 早期用 AGPL,引发过 .NET 社区的公开争论。争议的核心不在于 Roslyn 本身写得怎么样,而在于很多人担心 Microsoft 的开源动机并不纯正,怀疑他们只是用一份开源许可证给商业产品包装一层合规外衣。这类争议反复出现,说明 AGPL 一旦出现在大公司手里,几乎必然伴随商业动机的猜测。

FSF 有一个专门的 AGPL 执法团队,会主动追踪违反 AGPL 的案例并推动维权。这也解释了为什么 AGPL 被称"最严的开源许可证",它不是纸面条款,是有执法动作的。Elastic 在 2021 年把 Elasticsearch 切换到 SSPL 之后,FSF 公开施压,也是同一逻辑的延伸。

常见的几种误解

一种是以为"我们只是通过网络提供服务,没有分发二进制,所以不算违规"。这个判断错在漏看了 Section 13。AGPL 把网络交互定义为触发条件。

另一种是以为"我们内部使用,不对外提供,所以没事"。只要不对外,那确实不触发 AGPL,但如果有一天你把这套内部系统开放给外部用户,之前做的所有修改都要追溯。

还有一种比较隐蔽,以为"我把源代码放到某个私密仓库就够合规了"。Section 13 要求的是所有远程网络用户都能获得源代码,不是"你能找到就行"。私密仓库对远程用户不可访问,等于没交付。

最后一种是以为"只要我 fork 了别人的 AGPL 项目,就必须把我的项目整个改成 AGPL"。这条判断要看你的代码是否构成"基于该程序的修改版本"。如果你的项目是独立产品,只是链接或调用 AGPL 库,风险要具体判断,不是所有集成方式都必然传染。但一旦你的二进制与 AGPL 库深度耦合,构成衍生作品,传染几乎不可避免。

关联词

  • AGPL-3.0,GNU Affero General Public License v3,FSF 2007 年发布,GPL 家族中把网络服务纳入 copyleft 的版本。
  • Section 13,Remote Network Interaction,AGPL 独有的一条,把"通过远程网络向用户提供服务"定义为开源合规的触发条件。
  • Copyleft,GPL 系列的核心机制,任何基于原作的衍生作品必须整体以同一开源协议发布。
  • SSPL,Server Side Public License,Elastic 和 MongoDB 推出的更严版本,比 AGPL 多要求服务基础设施也开源。
  • 衍生作品,判断一个修改是否构成 AGPL 传染的关键,深度耦合的二进制集成通常被判为衍生。
  • FSF 执法团队,Free Software Foundation 里负责追踪 AGPL 违规并推动维权的部门。

小结

AGPL-3.0 在 GPL 家族里位置很靠硬的那一端,对做 SaaS、网络服务、云托管、推理平台的项目几乎无法回避。它最容易被忽视的地方在于 Section 13 的触发条件,只要你的服务对外,只要你做了修改,源代码就必须向所有访问者开放,这条没有例外。合规成本可以预估,也可以设计规避,但假装这条不存在是最容易付出法律代价的选择。

参考资料