软件许可证协议详解
· 阅读需 5 分钟
软件许可证协议(Software License Agreements)是规定软件使用、修改和分发权利的法律文件。对于开发者而言,了解不同协议的区别至关重要,以免陷入法律纠纷。
本文将常见的软件许可证分为三大类:宽松型、弱 Copyleft 型和强 Copyleft 型,并按限制从少到多的顺序进行介绍。
一、宽松型许可证 (Permissive Licenses)
这类许可证限制最少,通常只要求保留版权声明。它们鼓励代码的广泛采用,允许闭源商业化。
1. MIT License
特点:
- 最简单、最宽松。
- 允许任意使用、修改、分发、私有化(闭源)。
- 唯一义务:在软件副本中包含原作者的版权声明和许可声明。
适用场景:
- 希望代码被最大限度地使用,不在意衍生品是否闭源。
- 如:jQuery, Node.js, React。
2. BSD License
与 MIT 非常相似,主要分为两个版本:
- BSD 2-Clause:基本等同于 MIT。
- BSD 3-Clause:多了一条禁止使用原作者名义进行推广的条款。
适用场景:
- 学术界或希望保护声誉的项目。
- 如:Nginx, Go 语言。
3. Apache License 2.0
特点:
-
在宽松的基础上,增加了专利授权和商标保护条款。
-
明确的专利授权:贡献者自动授予用户专利使用权;若用户发起专利诉讼,授权自动终止。
示例:若贡献者(如公司 A)向项目贡献了包含专利的代码,则自动授予用户(如公司 B)专利使用权,用户(公司 B)无需担心被起诉侵权。
-
修改标注:修改后的文件需明确标注。
适用场景:
- 大型企业级开源项目,关注专利风险。
- 如:Android, Kubernetes, TensorFlow。
二、弱 Copyleft 许可证 (Weak Copyleft Licenses)
这类许可证介于宽松和严格之间,通常要求修改过的文件必须开源,但允许与其他闭源模块链接(Link)。
1. MPL 2.0 (Mozilla Public License)
特点:
- 文件级 Copyleft:如果你修改了现有的源代码文件,该文件必须开源。
- 混合开发友好:新增的文件或链接的模块可以是闭源的。
适用场景:
- 混合型项目,希望核心代码开源,但允许扩展闭源。
- 如:Firefox, LibreOffice。
2. LGPL (Lesser GPL)
特点:
- GPL 的妥协版本。
- 动态链接豁免:如果你的程序只是动态链接(Dynamic Link)到 LGPL 库,你的主程序可以闭源。
- 若修改了库本身,则修改部分必须开源。
适用场景:
- 通用类库,希望被商业软件使用,但又要改进回馈给库本身。
- 如:FFmpeg, GLib。
三、强 Copyleft 许可证 (Strong Copyleft Licenses)
这类许可证具有很强的“传染性”,要求衍生作品必须在相同协议下开源。
1. GPL (v2 / v3)
特点:
- 传染性:如果你的软件使用了 GPL 代码(包括复制或静态链接),整个软件必须开源。
- GPLv2 vs GPLv3:v3 增加了以下条款:
- 反 Tivoization:只要厂商用了自由软件(如 GPLv3),用户就必须能在设备上安装并运行自己改过的版本,不能被硬件限制
- 专利报复:若用户发起专利诉讼,其获得的专利授权自动终止。
适用场景:
- 坚定的自由软件支持者,防止代码被私有化。
- 如:Linux Kernel (v2), Git, WordPress。
2. AGPL (Affero GPL)
特点:
- 堵上了“SaaS 漏洞”。
- 网络分发视为分发:如果通过网络提供服务(如网站),也必须向用户公开源代码。
适用场景:
- 云服务、Web 应用,防止云厂商“白嫖”而不回馈。
- 如:MongoDB (旧版), Grafana (旧版)。
四、其他特殊类型
1. Unlicense / CC0
- 特点:放弃所有权利,将代码置于公共领域 (Public Domain)。
- 义务:无任何义务。
2. 专有软件 (Proprietary)
- 特点:保留所有权利。
- 形式:EULA(最终用户许可协议),禁止反编译、限制安装设备数等。
3. 商业开源 (Commercial Open Source)
- 双重许可 (Dual Licensing):同时提供 GPL(免费开源)和商业许可(付费闭源)。如 Qt, MySQL。
- SSPL:MongoDB 发明的协议,要求云厂商若提供托管服务需开源整个管理栈(不被 OSI 认可为开源协议)。
五、总结与选择指南
| 序号 | 协议 | 简述 | 商业闭源 | 专利授权 | 传染性 |
|---|---|---|---|---|---|
| 1 | MIT | 随便用,保留署名 | ✅ | ❌ | 无 |
| 2 | Apache 2.0 | 随便用,有专利保护 | ✅ | ✅ | 无 |
| 3 | BSD | 随便用,禁借名推广 | ✅ | ❌ | 无 |
| 4 | MPL | 修改文件需开源 | ⚠️ (部分) | ❌ | 文件级 |
| 5 | LGPL | 链接库可闭源 | ⚠️ (链接) | ❌ | 库级 |
| 6 | GPL | 必须全部开源 | ❌ | v3✅ | 强 |
| 7 | AGPL | 服务端也得开源 | ❌ | ✅ | 最强 |
快速选择建议:
- 简单、无脑、想被广泛使用 👉 MIT
- 大公司、防专利流氓 👉 Apache 2.0
- 写库、允许别人闭源链接 👉 LGPL
- 强迫症、不仅要代码开源还要你也开源 👉 GPL
- 做云服务、防云厂商白嫖 👉 AGPL