你一定在 GitHub 上看到过各种各样的 LICENSE 文件。很多人觉得那是“法律废话”,直接跳过。但实际上,开源协议是开源项目的“宪法” 。
如果你选错了协议,可能某天你会发现别人用你的代码赚了大钱却没分你一分钱,或者你无意中把公司的核心专利给捐了。
今天我们就用最直观、最“程序猿”的方式,拆解这几大家族。
一、 开源协议的“光谱”:自由 vs. 约束
开源协议的核心博弈点在于:作者的权利与使用者的自由。我们可以将其分为三个大类:
- 极度宽松派(Permissive): “你拿去随便用,别告我就行。”
- 弱传染派(Weak Copyleft): “你可以把我的库集成到你的软件里,但我的那部分你得开源。”
- 强传染派(Strong Copyleft): “用了我的代码,你的项目也得全家桶式地开源。”
二、 五大核心协议深度拆解
1. MIT 协议:最极简的自由
代表作: Vue.js, React, Node.js
- 逻辑: 我对这代码不负任何责任。你必须在你的副本里保留我的版权声明。
- 商业友好度: 极高。你可以闭源销售,甚至不用提我的名字(除了 LICENSE 文件)。
- 一句话总结: “给,拿走,别烦我。”
2. Apache 2.0:大厂的“专利护城河”
代表作: Kubernetes, Spring, TensorFlow
- 逻辑: 在 MIT 的基础上,增加了一个极其重要的专利授权条款。
- 核心痛点: 预防“专利流氓”。如果 A 使用了 B 的开源项目,B 不能反手告 A 专利侵权。
- 一句话总结: “不仅代码给你,专利也授权给你用,咱们和气生财。”
3. BSD:MIT 的低调兄弟
代表作: Go, Nginx, Redis (以前)
- 逻辑: 与 MIT 非常相似。唯一的细微差别是:有些版本规定你不能用我的名义为你的衍生产品做背书。
- 一句话总结: “代码拿走,但别打着我的旗号卖货。”
4. GPL (General Public License):开源界的“理想主义”
代表作: Linux Kernel, Git, WordPress
- 传染性: 只要你的项目引用、修改或链接了 GPL 代码,你的整个项目也必须以 GPL 协议开源。
- 商业限制: 你可以卖 GPL 软件,但你必须给买家提供源代码。
- 一句话总结: “人人为我,我为人人。用了我的,你也就是大家的了。”
5. LGPL (Lesser GPL):给商用留一条缝
代表作: FFmpeg, 许多底层的 C/C++ 库
- 逻辑: 如果你只是动态链接(类似于调用 API)这个库,你的主程序不需要开源。但如果你改了这个库本身,那这个库的改动必须开源。
- 一句话总结: “库是大家的,但你的主程序可以是自己的。”
三、 选型指南:开发者该怎么选?
为了方便记忆,我们可以参考世界著名的“乌克兰程序员乌拉尔”总结的流程图:
| 你的诉求 | 推荐协议 |
|---|---|
| 我想要简单、省事、被广泛使用 | MIT |
| 我担心代码涉及专利纠纷,或我是大厂在做基建 | Apache 2.0 |
| 我希望我的改进能惠及社区,且不介意强迫别人开源 | GPL |
| 我在写一个库,希望别人能商业集成,但要保留库的开源性 | LGPL |
四、 8 年老兵的“排雷”贴士
- LICENSE 文件不能空: 没有 LICENSE 的项目默认受版权保护,意味着别人法律上不能随意 fork 或使用。
- GitHub 也有“潜规则”: 现在很多云厂商(如 AWS)会“白嫖”开源项目做云服务。如果你不想被巨头无偿商用,可以关注 SSPL 或 BSL,但这会让你的项目不再符合严格的“开源”定义。
- 不要自己写协议: 除非你是顶级律师,否则千万别自创协议(如“用了我的代码必须请我喝咖啡”)。这种协议在法律实践中充满漏洞。
💡 结语
协议的选择决定了项目的社区调性。MIT 孕育了繁荣的 npm 生态,而 GPL 支撑了伟大的 Linux 帝国。