四大GNU协议深度解析:GPL、LGPL、AGPL与GFDL的核心区别
在开源世界中,GNU系列许可证是保障软件自由的基石。但GPL、LGPL、AGPL、GFDL这四种协议常被混淆,本文用一张表+关键场景帮你快速厘清差异。
一、核心定位对比
| 协议 | 全称 | 适用对象 | 著佐权强度 | 核心特点 |
|---|---|---|---|---|
| GPL | GNU General Public License | 通用软件 | ⭐⭐⭐ 强 | 衍生作品必须开源 |
| LGPL | GNU Lesser General Public License | 库/框架 | ⭐⭐ 中 | 允许专有软件动态链接 |
| AGPL | GNU Affero General Public License | 网络服务软件 | ⭐⭐⭐⭐ 极强 | 网络使用也触发开源义务 |
| GFDL | GNU Free Documentation License | 文档/手册 | ⭐⭐⭐ 强 | 专为文字内容设计 |
关键区别:前三者用于软件,GFDL专用于文档(如维基百科早期采用)
二、场景化解读
场景1:我想用开源库开发商业软件
- 选LGPL:动态链接LGPL库时,你的专有代码无需开源(但需允许用户替换该库)
- 避GPL:静态/动态链接GPL库 → 整个软件必须按GPL开源
场景2:我提供SaaS服务(如在线工具)
- GPL陷阱:仅用GPL软件提供网络服务 → 无需开源修改版(GPL漏洞)
- AGPL补丁:用AGPL软件 → 必须公开修改后的源码,堵住SaaS规避路径
场景3:编写技术文档
- 用GFDL:要求衍生文档保留"不变章节"(如作者声明),但允许商业再分发
- 注意:GFDL与软件许可证不兼容,不能用于代码
三、关键条款对比
GPL v3
├─ 衍生作品必须开源(包括静态/动态链接)
├─ 专利授权自动授予用户
└─ 禁止附加限制性条款
LGPL v3
├─ 允许专有软件通过"动态链接"使用库
├─ 修改库本身仍需开源
└─ 本质是"GPL + 链接例外"
AGPL v3
├─ 继承GPL所有条款
├─ 新增:通过网络交互即视为"分发" → 触发开源义务
└─ 专治"云服务不开源"问题
GFDL 1.3
├─ 要求保留"透明副本"(可编辑格式)
├─ 允许设置"不变章节"保护作者声明
└─ 与CC-BY-SA 3.0双向兼容(2009年后)
四、避坑指南
| 误区 | 正解 |
|---|---|
| "LGPL比GPL宽松=可以闭源" | 仅链接时宽松,修改LGPL库本身仍需开源 |
| "AGPL是LGPL的网络版" | AGPL基于GPL,无链接例外,比GPL更严格 |
| "GFDL可用于软件" | 专为文档设计,代码应选GPL/LGPL/AGPL |
| "GPL软件不能商用" | 允许商业使用,但衍生品必须开源 |
五、选型建议
- 开发通用工具 → GPL(保障生态开源)
- 开发基础库 → LGPL(促进广泛采用)
- 开发云服务 → 谨慎使用AGPL(避免强制开源核心逻辑)
- 编写手册/教材 → GFDL或CC-BY-SA(现代更推荐后者)
2026年趋势:AGPL在AI/云服务领域争议加剧(如MongoDB、Elasticsearch改用SSPL),企业需提前评估合规风险
许可证是开源项目的"宪法"。选错协议可能导致法律风险或生态分裂——在LICENSE文件落笔前,务必明确你的分发场景与商业目标。