开源协议是约束开源代码使用、修改、分发、商用的法律许可文件,核心分为宽松型、强 Copyleft(传染型)、弱 Copyleft、专有免费四大类。
一、宽松协议(Permissive,无传染,推荐商用)
特点:可商用、可闭源、修改后无需开源,仅保留版权声明。
1. MIT(最常用)
- 规则:随便用、改、卖,只需要保留原版权声明,无其他义务。
- 代表:React、Vue、Node.js、Rust、jQuery
- 适合:企业内部项目、闭源商业产品集成。
2. Apache 2.0
- 比 MIT 多两点:
- 明确授予专利授权(原作者不能拿专利告使用者)
- 修改文件必须标注变更记录
- 代表:Android、Spring、TensorFlow、Apache 全系列
- 优势:专利保护,大厂首选。
3. BSD(2 条款 / 3 条款)
- 2 条款 BSD:极简,类似 MIT;
- 3 条款 BSD:禁止用作者名义做商业宣传;
- 代表:FreeBSD、Nginx、Python 早期版本。
二、强 Copyleft(GPL 传染型,限制最严)
核心规则:只要程序对外分发 / 发布(线上服务不算),整体代码必须全部开源。
1. GPLv3 / GPLv2
- 传染逻辑:你的软件只要链接 / 嵌入 GPL 代码并对外发布,整个项目强制开源,商用产品必须公开源码。
- v3 新增:反 Tivo 化、专利防御条款;v2 无专利条款。
- 代表:Linux 内核(GPLv2)、GCC、MySQL 社区版。
- 禁忌:商用闭源软件直接集成 GPL 代码,极易侵权。
2. AGPLv3(网络 GPL)
GPL 升级版,补上漏洞:哪怕只作为线上网站 / 云服务对外提供,也必须公开全部源码。
代表:MongoDB、Nextcloud、Gitea
适合:不想别人拿开源代码做 SaaS 闭源盈利的项目。
三、弱 Copyleft(LGPL,库专用,折中方案)
仅修改库本身需要开源;你的主程序可以闭源商用。
LGPLv3 / LGPLv2.1
两种使用场景:
- 动态链接(dll/so):主程序完全闭源,无需开源;
- 静态链接 / 修改库源码:库的修改部分必须开源。
代表:FFmpeg、Qt 库、GNU 标准库
适合:想做闭源软件,但依赖开源第三方库的场景。
四、特殊开源协议
1. MPL 2.0(Mozilla)
文件级 Copyleft:仅修改过的文件开源,未改动文件可闭源。
代表:Firefox、Rust 早期
折中:比 LGPL 宽松,比 MIT 严格。
2. CC0(公共领域)
放弃所有版权,等同于无版权,可任意使用、修改、商用,无需标注。
多用于图片、字体、小型工具代码。
五、商业限制类(非纯开源,慎用)
- SSPL(MongoDB 旧协议):衍生商用数据库必须开源全部业务代码,被 OSI 拒收,不属于标准开源;
- Business Source License(BSL):短期开源,到期转为 GPL,中间商用付费;
- 禁止军事 / 禁止云商用协议:自定义限制,不符合 OSI 开源标准。
六、快速选型对照表
| 协议 | 可商用闭源 | 修改后需开源 | 线上 SaaS 是否强制开源 | 专利保护 |
|---|---|---|---|---|
| MIT | ✅ 完全 | ❌ | ❌ | ❌ |
| Apache2.0 | ✅ 完全 | ❌ | ❌ | ✅ |
| BSD | ✅ 完全 | ❌ | ❌ | ❌ |
| LGPL | ✅ 动态链接 | 仅库文件 | ❌ | ✅(v3) |
| GPLv3 | ❌ 分发即开源 | 整个项目 | ❌ | ✅ |
| AGPLv3 | ❌ | 整个项目 | ✅ | ✅ |
| MPL2.0 | ✅ 未改文件 | 仅修改文件 | ❌ | ✅ |
七、常见避坑要点
- 内核 Linux 是 GPLv2,静态编译进闭源程序分发会违规;
- AGPL 项目做云服务必须开源,内网自用不对外则没事;
- Apache2.0 代码可迁移到 MIT,但 MIT 不能加专利条款;
- 混合协议项目:以最严格协议约束整体(比如 MIT+GPL 合并分发,整体遵循 GPL)。
