1591 words
8 minutes
程序员必修课:五分钟看懂常见开源协议 (MIT, GPL, Apache)

在开源世界里,很多人有一个误区:开源就是“免费”且“可以随便用”。其实不然,开源代码受法律保护,而**开源协议(Open Source License)**就是作者规定使用者“如何使用、修改和分发”代码的法律合同。

对于开发者来说,不了解协议可能会导致严重的法律纠纷(例如被起诉、被迫开源私有商业代码等)。今天我们就来快速理清最主流的几种开源协议,帮你选对、用对。


一、 核心概念:宽松式 vs. 著佐权#

在深入具体协议之前,我们需要理解开源协议光谱上的两个极端:

  1. 宽松式许可 (Permissive):最大限度地允许用户使用,几乎没有限制。你可以随便改,甚至闭源商用。
  • 代表:MIT, Apache, BSD
  1. 著佐权许可 (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 服务、数据库等云端软件,防止云厂商“白嫖”后不回馈。

三、 极简选择指南#

如果你正在纠结给自己的项目选什么协议,请参考这个简单的决策树:

  1. 我希望代码被尽可能多的人使用,我不介意他们闭源赚钱:
  • 简单短小 → MIT
  • 涉及专利或大公司合作 → Apache 2.0
  1. 我很介意别人用我的代码做成闭源软件赚钱,我要强制他们开源:
  • 普通软件 → GPL v3
  • Web 服务/云端软件 → AGPL
  1. 我只想把代码扔出来,完全不保留版权:
  • Unlicense / CC0 (放弃版权,进入公有领域)

总结#

  • 做商业产品:优先引入 MIT / Apache 协议的库,慎用 GPL 类库(除非你能接受自己的产品也开源)。
  • 发布开源项目:根据你想构建的生态决定。想要最大化采用率选 MIT;想要保护社区、防止分裂选 GPL。

记住,协议是法律文件,选择时需谨慎。如果不确定,MIT 通常是最安全、最友好的默认选择。

附录:主流开源协议特性对比表#

为了方便快速查阅,以下是五种主流协议的核心差异对比:

协议名称闭源商用传染性 (Copyleft)专利授权核心义务与限制适用场景推荐
MIT✅ 允许❌ 无❌ 未明确仅需保留原版权声明简单小巧的工具、插件
Apache 2.0✅ 允许❌ 无✅ 明确包含保留版权/修改声明;专利保护与反制大型企业级开源项目
BSD (3-Clause)✅ 允许❌ 无❌ 未明确保留版权声明;禁止利用作者名义推广介意被“借名”的项目
GPL v3🚫 禁止⚠️ 强 (分发即触发)✅ 明确包含衍生作品必须开源;分发时须提供源码强力维护社区回馈,Linux 软件
AGPL🚫 禁止⚠️ 超强 (网络即触发)✅ 明确包含网络服务(SaaS)也须开源Web 服务、数据库,防云厂商白嫖

图例说明:

  • 允许/有:对使用者友好的条款。
  • 🚫 禁止:明确限制的行为(通常指不能作为私有闭源软件分发)。
  • ⚠️ 注意:具有“病毒式”扩散特性,使用时需评估法律风险。
程序员必修课:五分钟看懂常见开源协议 (MIT, GPL, Apache)
https://mj3622.github.io/posts/经验分享/常见开源协议/
Author
Minjer
Published at
2026-01-26