在开源世界里,很多人有一个误区:开源就是“免费”且“可以随便用”。其实不然,开源代码受法律保护,而**开源协议(Open Source License)**就是作者规定使用者“如何使用、修改和分发”代码的法律合同。
对于开发者来说,不了解协议可能会导致严重的法律纠纷(例如被起诉、被迫开源私有商业代码等)。今天我们就来快速理清最主流的几种开源协议,帮你选对、用对。
一、 核心概念:宽松式 vs. 著佐权
在深入具体协议之前,我们需要理解开源协议光谱上的两个极端:
- 宽松式许可 (Permissive):最大限度地允许用户使用,几乎没有限制。你可以随便改,甚至闭源商用。
- 代表:MIT, Apache, BSD
- 著佐权许可 (Copyleft):强调“互惠”。如果你使用了我的开源代码,你的修改版或衍生作品也必须开源。具有很强的“传染性”。
- 代表:GPL, AGPL
二、 主流协议详解
1. MIT 协议:最简单、最自由
口号:“别因我的代码起诉我,其他的随你便。”
MIT 是目前最受欢迎的协议(如 React, Vue, Node.js)。
- 权利:你可以任意使用、复制、修改、合并、出版发行、散布、再授权及贩售软件。可以闭源商用。
- 义务:在软件副本中包含原作者的版权声明和许可声明。
- 适用场景:你希望代码被最广泛地使用,不在乎使用者是否回馈社区,也不介意别人用你的代码赚钱。
2. Apache 2.0 协议:大厂最爱,专利保护
口号:“随便用,但我给你永久专利授权,你也别因专利告我。”
Apache 协议在宽松程度上与 MIT 类似,但它更严谨,法律条款更详细(如 TensorFlow, Kubernetes)。
权利:与 MIT 类似,可以闭源商用。
关键区别:
明确的专利授权:贡献者自动授予使用者专利许可。
专利反制条款:如果你因专利问题起诉该项目,你的专利授权会自动终止。
适用场景:大型商业开源项目,或者涉及专利技术的项目。
3. BSD 协议 (通常指 BSD 2-Clause 或 3-Clause)
口号:“随便用,但别用我的名字做广告。”
- BSD 2-Clause:基本等同于 MIT。
- BSD 3-Clause:多了一条限制——不得利用贡献者的名字进行广告或推广。
- 适用场景:类似于 MIT,但你想避免别人打着你的旗号去忽悠用户(如 Go 语言, Nginx)。
4. GPL (v2/v3) 协议:具有传染性的“自由”
口号:“你可以用,但如果你分发了修改版,你也必须开源。”
GPL 是最著名的 Copyleft 协议(如 Linux 内核, WordPress)。
权利:可以自由使用、修改。
义务(核心):
强传染性:如果你的软件使用了 GPL 代码(静态/动态链接都算),且你分发了你的软件(比如卖给客户或发布),那么你的整个软件也必须在 GPL 下开源。
不能闭源商用(指不能作为私有软件分发,但你可以卖服务或卖开源软件拷贝)。
适用场景:你痛恨“白嫖”,希望任何基于你代码的改进都能回馈给社区。
5. AGPL 协议:云时代的补丁
口号:“即使你只是在服务器上跑,没分发客户端,也得开源。”
GPL 有一个“漏洞”:如果我把 Google 的搜索代码拿来修改后放在服务器上跑,通过网络提供服务(SaaS),但我并没有把软件“分发”给用户,我就不需要开源。AGPL 就是为了堵这个漏洞(如 MongoDB 早期版本)。
- 特点:只要通过网络与用户交互,就视为“分发”,必须开源。
- 适用场景:Web 服务、数据库等云端软件,防止云厂商“白嫖”后不回馈。
三、 极简选择指南
如果你正在纠结给自己的项目选什么协议,请参考这个简单的决策树:
- 我希望代码被尽可能多的人使用,我不介意他们闭源赚钱:
- 简单短小 → MIT
- 涉及专利或大公司合作 → Apache 2.0
- 我很介意别人用我的代码做成闭源软件赚钱,我要强制他们开源:
- 普通软件 → GPL v3
- Web 服务/云端软件 → AGPL
- 我只想把代码扔出来,完全不保留版权:
- Unlicense / CC0 (放弃版权,进入公有领域)
总结
- 做商业产品:优先引入 MIT / Apache 协议的库,慎用 GPL 类库(除非你能接受自己的产品也开源)。
- 发布开源项目:根据你想构建的生态决定。想要最大化采用率选 MIT;想要保护社区、防止分裂选 GPL。
记住,协议是法律文件,选择时需谨慎。如果不确定,MIT 通常是最安全、最友好的默认选择。
附录:主流开源协议特性对比表
为了方便快速查阅,以下是五种主流协议的核心差异对比:
| 协议名称 | 闭源商用 | 传染性 (Copyleft) | 专利授权 | 核心义务与限制 | 适用场景推荐 |
|---|---|---|---|---|---|
| MIT | ✅ 允许 | ❌ 无 | ❌ 未明确 | 仅需保留原版权声明 | 简单小巧的工具、插件 |
| Apache 2.0 | ✅ 允许 | ❌ 无 | ✅ 明确包含 | 保留版权/修改声明;专利保护与反制 | 大型企业级开源项目 |
| BSD (3-Clause) | ✅ 允许 | ❌ 无 | ❌ 未明确 | 保留版权声明;禁止利用作者名义推广 | 介意被“借名”的项目 |
| GPL v3 | 🚫 禁止 | ⚠️ 强 (分发即触发) | ✅ 明确包含 | 衍生作品必须开源;分发时须提供源码 | 强力维护社区回馈,Linux 软件 |
| AGPL | 🚫 禁止 | ⚠️ 超强 (网络即触发) | ✅ 明确包含 | 网络服务(SaaS)也须开源 | Web 服务、数据库,防云厂商白嫖 |
图例说明:
- ✅ 允许/有:对使用者友好的条款。
- 🚫 禁止:明确限制的行为(通常指不能作为私有闭源软件分发)。
- ⚠️ 注意:具有“病毒式”扩散特性,使用时需评估法律风险。

