BSD与MPL协议详解
# BSD 与 MPL 协议详解
# 一、BSD 协议:比 MIT 多一句话
BSD(Berkeley Software Distribution)是加州大学伯克利分校在 1980 年代发布的。它和 MIT 出自同一时代,目标一致:尽可能宽松,让代码被更多人使用。
# 1.1 三个版本的差异
BSD 2-Clause(简化版):
1. 保留版权声明
2. 保留免责声明
→ 和 MIT 几乎一模一样
BSD 3-Clause(修订版):
1. 保留版权声明
2. 保留免责声明
3. 禁止用作者/机构名义做背书
→ = MIT + "禁止拿我名字做推广"
BSD 4-Clause(原始版,已废弃):
1. 保留版权声明
2. 保留免责声明
3. 禁止用作者/机构名义做背书
4. 所有广告材料必须致谢原作者 ← 这条让很多商业公司不爽,已不再使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1.2 BSD 3-Clause 禁止背书条款
Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
1
2
3
2
3
翻译:未经许可,你不能说"本产品由 XX 大学/机构支持"。
# 1.3 MIT vs BSD 实际区别
| MIT | BSD 3-Clause | |
|---|---|---|
| 自由度 | 极高 | 极高 |
| 署名要求 | ✅ | ✅ |
| 禁止背书 | ❌ | ✅ |
| 文本长度 | 2 段 | 3 段 |
| 实际使用差别 | 几乎没有 | 几乎没有 |
绝大多数场景下 MIT 和 BSD 3-Clause 可以互换。 Go 语言用 BSD 3-Clause,Node.js 用 MIT——只是为了遵循各自的历史惯例。
# 1.4 代表项目
| 项目 | 协议 |
|---|---|
| Go | BSD 3-Clause |
| FreeBSD | BSD 2-Clause |
| Nginx | BSD 2-Clause |
| Flutter | BSD 3-Clause |
| React Native (部分) | BSD |
# 二、MPL 2.0:文件级传染
# 2.1 MPL 解决了什么问题
Mozilla Public License 由 Mozilla 基金会设计,目标是在 MIT 和 GPL 之间找到一个中间点。
MIT: 完全不传染,改了可以闭源
GPL: 强传染,整个项目必须开源
MPL 2.0:文件级传染,改了哪个文件,哪个文件必须开源
1
2
3
2
3
# 2.2 文件级传染的实际效果
my-project/
├── src/
│ ├── my-code.js ← 闭源,OK
│ ├── mpl-library.js ← MPL 库,你改了一行
│ │ → 这个文件必须开源(MPL)
│ └── another-file.js ← 闭源,OK(没用 MPL 代码)
1
2
3
4
5
6
2
3
4
5
6
关键规则:
- 你添加的文件 → 可以用任何协议(包括闭源)
- 你修改了 MPL 文件 → 该文件必须用 MPL 开源
- 你的项目里混合了 MPL 和闭源代码 → 合法 ✅
# 2.3 MPL 2.0 的其他特点
| 特点 | 说明 |
|---|---|
| 专利授权 | ✅ 显式授予(类似 Apache 2.0) |
| 兼容 GPL | ✅ 与 GPL v2/v3 兼容 |
| 兼容 Apache | ✅ |
| 商标保护 | ✅ 类似 Apache 2.0 |
| 通知义务 | 修改过的文件需要标注 |
# 2.4 代表项目
| 项目 | 说明 |
|---|---|
| Firefox | Mozilla 自己的浏览器 |
| Thunderbird | Mozilla 邮件客户端 |
| Rust 标准库 | 部分用 MPL 2.0 |
| LibreOffice | MPL v2.0(双重授权) |
# 三、BSD vs MPL vs GPL vs Apache 一图对比
传染性从无到强:
Unlicense ─── 放弃一切权利
MIT ─── 只需保留版权(第2章)
BSD 2/3 ─── MIT + 可选禁止背书(本章)
Apache 2.0 ─── MIT + 专利 + NOTICE(第3章)
MPL 2.0 ─── 改了谁,谁开源(本章) ← 文件级传染
LGPL ─── 动态链接不传染(第4章) ← 温和传染
GPL v3 ─── 整个项目必须开源(第4章) ← 强传染
AGPL ─── GPL v3 + SaaS 也传染(第4章) ← 极强传染
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 四、如何选择 BSD / MPL
你的需求是什么?
│
├── 和 MIT 一样宽松,但不想别人拿你名字推广
│ → BSD 3-Clause
│
├── 和 MIT 一样宽松,不介意任何推广
│ → BSD 2-Clause 或 MIT
│
├── 想在商业产品中混合开源和闭源代码
│ → MPL 2.0
│
├── 希望修改你代码的人必须回馈修改
│ 但不想传染整个项目
│ → MPL 2.0
│
└── Go 语言项目 → 继续用 BSD 3-Clause(惯例)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 五、总结
| 协议 | 核心特点 | 适合场景 |
|---|---|---|
| BSD 2-Clause | 与 MIT 等价 | 个人项目,无所谓 |
| BSD 3-Clause | MIT + 禁止背书 | 学术机构、重视名誉 |
| MPL 2.0 | 文件级传染 + 专利授权 | 商业/开源混合项目 |
上次更新: 2026/06/07, 21:36:05