AGPL-3.0(GNU Affero General Public License v3.0)是自由软件基金会(FSF)推出的一款开源许可证,属于GPL(通用公共许可证)家族的重要成员。它在GPLv3的基础上增加了针对“网络服务场景”的特殊条款,核心目标是确保即使软件通过网络服务(如SaaS、云服务)提供给用户,其源代码也能被用户获取和自由修改,避免“仅通过网络运行软件而不公开源码”的闭源行为。
核心条款解析
1. 源代码公开义务(核心差异点)
AGPL-3.0的最大特点是将“网络交互”纳入源码公开的触发条件,这是它与GPLv3的核心区别:
- 若你基于AGPL-3.0许可的软件开发了衍生作品(或修改了原软件),并通过网络向用户提供服务(即用户通过网络与该软件交互,如使用一个基于AGPL代码的在线工具),则必须向所有使用该服务的用户提供完整的源代码(包括你的修改和衍生部分),并告知获取方式(如提供下载链接)。
而GPLv3仅要求“当你分发软件副本时”公开源码,若仅将软件作为网络服务运行而不分发副本,GPLv3不强制公开源码。
{/timeline-item}
{timeline-item color="#19be6b"}2. 衍生作品的“传染性”(Copyleft)
和其他GPL家族许可证一样,AGPL-3.0具有强“传染性”:
- 若你修改了AGPL许可的软件,或基于其代码开发了衍生作品(包括通过链接、集成等方式与AGPL代码形成“整体作品”的情况),则该衍生作品必须以AGPL-3.0许可证开源,不能闭源或改用其他非兼容许可证(如商业闭源许可)。
这里的“衍生作品”范围较广,包括但不限于:对原代码的修改、新增功能模块、与其他代码结合形成的可运行程序等(具体需结合技术实现判断,通常“不可分割的整体功能”会被认定为衍生作品)。
{/timeline-item}
{timeline-item color="#19be6b"}3. 专利授权条款
AGPL-3.0包含专利保护机制:
- 软件贡献者(包括原作者和后续修改者)需默认授予所有用户“使用其专利”的许可,确保用户不会因使用或修改软件而被贡献者起诉专利侵权。
但如果用户主动起诉他人(包括贡献者)侵犯与该软件相关的专利,则用户会自动失去AGPL-3.0的许可权(即无权再使用、修改或分发该软件)。
{/timeline-item}
{timeline-item color="#19be6b"}4. 保留版权声明与许可证文本
使用AGPL-3.0许可的软件时,必须:
- 保留原软件中的所有版权声明、许可证文本及免责声明,不得删除或修改。
若修改了软件,需在修改部分明确标注修改记录(如修改时间、修改人),并说明该部分受AGPL-3.0约束。
{/timeline-item}
{timeline-item color="#19be6b"}5. 无担保与责任限制
AGPL-3.0明确规定:软件以“现状”提供,原作者和贡献者不提供任何担保(包括但不限于功能可用性、无缺陷、适合特定用途等)。用户因使用软件导致的任何损失(如数据丢失、业务中断),原作者和贡献者不承担责任。
{/timeline-item}
与GPLv3的核心区别
| 场景 | GPLv3要求 | AGPL-3.0要求 |
|---|---|---|
| 分发软件副本 | 需公开源码(与AGPL一致) | 需公开源码(与GPL一致) |
| 仅通过网络提供服务 | 不强制公开源码(无分发行为) | 必须公开源码(因用户通过网络交互使用) |
适用场景与注意事项
- 适用场景:适合服务器端软件、网络服务工具(如API服务、在线平台、云原生应用),确保用户即使通过网络使用,也能获取源码并自由修改。
- 风险提示:若企业将AGPL-3.0许可的代码用于商业服务(如SaaS产品),需严格遵守源码公开义务,否则可能构成侵权(面临停止使用、赔偿等风险)。若希望避免“传染性”,需避免直接使用AGPL代码,或通过技术手段(如独立服务接口、明确分离模块)证明与AGPL代码不构成“衍生作品”(需法律专业判断)。
AGPL-3.0的核心是通过强化“网络服务场景的源码公开义务”,延续GPL的“copyleft”精神,确保软件的自由使用、修改和分享权不被网络服务模式削弱。
AGPL-3.0其实可以简单理解成:一款专门管“网上用的软件”的开源规矩,核心就是不让人“偷偷用开源代码搞网络服务赚钱,却藏着代码不给别人看”。
举个例子你就懂了:
假设有人写了个“在线画图工具”,代码用AGPL-3.0开源(所有人都能免费拿来看、改)。
- 如果你拿这个工具改了改,加了个“自动上色”功能,然后放到自己的网站上,让大家在线用(比如做成一个SaaS服务收费)——这时候,按照AGPL规矩,你必须把“带自动上色功能的完整代码”公开,谁用你的在线工具,你都得告诉人家在哪能下载到代码。
- 但如果这个工具用的是普通GPL许可证(比如GPLv3),你只把它放网上让大家用,却不分发软件安装包,那可以不用公开代码。
再提炼几个关键点:
- “沾了就得开源”:只要你改了用AGPL的软件,或者把它和你自己的代码揉在一起做成新软件,那你这新软件也必须用AGPL开源,不能偷偷闭源卖钱。
- 专门盯“网络服务”:不管你是做网站、APP后台、云服务,只要用户是通过网络用这个软件(不是下载到自己电脑用),你就得公开代码——这是它和普通GPL最大的区别。
- 用了出问题自己担着:原作者不保证这软件好用、没bug,你用它搞出麻烦(比如数据丢了),人家可不负责。
简单说,AGPL就是为了防止有人“捡现成的开源代码,做成在线服务赚大钱,却把改后的代码藏起来不让别人学”。如果你想拿AGPL的代码做网络服务,就得做好“公开自己所有修改”的准备,不然可能违法哦。