一、先搞懂 4 个核心概念
|
概念 |
通俗解释(直接对应实际场景) |
关键用途 |
|
Contributors |
给开源项目写代码、改代码的人 / 团队(包括最初作者和后续贡献者) |
明确版权归属,避免后续纠纷 |
|
Recipients |
下载、使用该开源项目的人 / 企业(后续贡献者也属于这类) |
界定协议约束的对象 |
|
Source Code |
能看懂、能修改的原始代码(如 Java/.py 文件) |
协议是否允许二次开发的基础 |
|
Object Code |
编译后不能直接修改的二进制文件(如 DLL、控件) |
分发时是否需要附带源码 |
|
Derivative Module |
基于原开源代码修改、增强后的模块(依赖原代码) |
决定是否受原协议 “传染” |
|
Separate Module |
参考原代码思路,但完全独立开发、不依赖原代码的模块 |
可自主选择协议,不受约束 |
二、6 大主流开源协议
(一) BSD 协议(商业友善型首选)
- 核心权限:随意用、随意改、随意二次分发(可闭源商业化)
- 必须遵守的 3 条规则(少一条都可能侵权):
- 若分发的是源码,必须附带原 BSD 协议文本;
- 若分发的是二进制文件(如 APP、插件),需在文档 / 版权声明里提原协议;
- 不能用原作者 / 项目名做商业推广(列如 “基于 XX 开源项目官方授权”)。
- 适用场景:企业想拿开源代码做商业产品、二次开发后闭源销售(如用 BSD 协议的代码做付费工具)。
- 举例:你用 BSD 协议的代码 A 开发出产品 B,B 可闭源卖钱,但必须在 B 的版权页写 “本产品使用了 XX 项目(基于 BSD 协议)”,并附上原协议。
(二)Apache License 2.0
- 核心权限:和 BSD 几乎一致(可商用、可修改、可分发)
- 额外要求(比 BSD 多 2 点,更注重合规):
- 修改过的文件要标注 “修改记录”(列如 “2025 年 X 月修改了 XX 功能”);
- 若产品里有 “Notice 文件”,必须包含 Apache 协议原文,且不能修改原协议条款。
- 核心优势:明确专利授权 —— 原作者不会起诉使用者侵犯专利(BSD 无此明确约定)。
- 适用场景:企业级产品、需要专利保护的商业项目(如阿里云部分组件、Apache 旗下项目)。
3. GPL 协议(开源 “传染性” 最强,闭源慎用)
- 核心特点:“病毒式传染”—— 只要你的产品里用了 GPL 协议的代码(哪怕只引用一个类库),整个产品必须开源,且必须用 GPL 协议分发(不能闭源)。
- 核心权限:可免费使用、修改、分发,但所有衍生产品必须开源。
- 禁止行为:用 GPL 代码开发闭源商业产品(列如拿 Linux 内核改个系统,想闭源卖钱,绝对不行)。
- 适用场景:纯开源项目、非商业产品(如 Linux 系统、各类开源工具)。
- 避坑提示:如果你的项目想闭源,哪怕只用到 GPL 的一个小模块,也会被 “传染”—— 整个项目都得开源,谨慎选择!
4. LGPL 协议(GPL 的 “商业友善版”)
- 核心改善:解决 GPL 的 “强传染” 问题 —— 仅引用 LGPL 类库(不修改类库本身),你的商业产品可以闭源!
- 必须遵守的规则:
若只是引用 LGPL 类库(不修改类库代码),产品可闭源商用;
若修改了 LGPL 类库的代码,修改后的类库部分必须用 LGPL 协议开源。
- 适用场景:商业软件想引用开源类库(如用 LGPL 的数据库驱动、工具类),又不想开源自己的核心代码。
5. CPL 协议(IBM 主导,适合混合开发)
- 核心权限:可商用、可修改、可闭源二次发布(和 BSD 类似)
- 关键规则(重点关注 2 点):若你把原 CPL 代码再次开源,必须继续用 CPL 协议(不能换其他协议);若将 CPL 代码和私有代码混合成一个产品,需明确标注哪部分是 CPL 代码(且这部分仍受 CPL 约束)。
- 适用场景:用 Eclipse、Open Laszlo 等 IBM 相关开源项目做二次开发(如基于 Eclipse 做定制化开发工具)。
6. MIT 协议(最宽松,几乎无约束)
- 核心权限:想干啥干啥 —— 商用、闭源、修改、分发,都没限制!
- 唯一要求:无论分发的是源码还是二进制文件,必须附带原 MIT 协议声明(一句话即可)。
- 适用场景:个人开源项目、想让更多人自由使用的工具(如许多前端框架、小插件)。
- 优势:门槛最低,合规成本几乎为 0;缺点:对原作者的保护最少(别人可直接拿你的代码改个名字就商用)。
三、3 步快速选对开源协议
第一步:明确你的核心需求
- 想闭源商业化 → 优先选 BSD/Apache/LGPL/MIT/CPL(排除 GPL);
- 想让产品完全开源 → 选 GPL;
- 引用开源类库但不想开源自己的代码 → 选 LGPL;
- 担心专利问题 → 选 Apache License 2.0。
第二步:确认使用方式
|
使用方式 |
可选择的协议 |
绝对不能选的协议 |
|
直接用、不分发(内部使用) |
所有协议都可以 |
无 |
|
二次开发后闭源商用 |
BSD/Apache/LGPL/MIT/CPL |
GPL |
|
二次开发后继续开源 |
所有协议 |
无 |
|
仅引用类库,不修改类库代码 |
所有协议(GPL 也可以,但产品需开源) |
无 |
|
修改开源代码后,想闭源分发 |
BSD/Apache/MIT/CPL |
GPL/LGPL(修改后需开源) |
第三步:合规检查清单
无论选哪种协议,分发产品前必做 3 件事:
- 检查是否附带了原协议文本(源码 / 二进制分发都需要);
- 标注原项目的作者、来源(如 “基于 XX 项目开发,协议:MIT”);
- 美女若修改过原代码,按协议要求标注修改记录(Apache/LGPL/CPL 需遵守)。
四、常见避坑案例
踩坑点1:用 GPL 协议的代码开发闭源 APP,上架后被原作者起诉;
解决方案:要么换协议(如 LGPL),要么将产品开源,要么放弃使用该 GPL 代码。
踩坑点2:用 BSD 协议的代码做商业产品,宣传时说 “官方授权 XX 开源项目”;
解决方案:去掉 “官方授权” 等关联推广话术,仅在版权声明里标注原项目和协议。
踩坑点3:修改 LGPL 类库后,将修改后的类库闭源分发;
解决方案:修改后的 LGPL 类库必须开源,或放弃修改,仅引用原类库。




