开源协议完全指南
# 开源协议完全指南
选择正确的开源协议是每个开发者的必修课——一份协议决定了你的代码将如何被他人使用。
# 协议速查表
| 协议 | 商用 | 修改 | 分发 | 闭源 | 专利 | 传染性 |
|---|---|---|---|---|---|---|
| MIT | ✅ | ✅ | ✅ | ✅ | ❌ | 无 |
| Apache 2.0 | ✅ | ✅ | ✅ | ✅ | ✅ | 无 |
| BSD | ✅ | ✅ | ✅ | ✅ | ❌ | 无 |
| GPL | ✅ | ✅ | ✅ | ❌ | ❌ | 强 |
| LGPL | ✅ | ✅ | ✅ | ✅ | ❌ | 弱 |
| MPL | ✅ | ✅ | ✅ | ✅ | ❌ | 文件级 |
| AGPL | ✅ | ✅ | ✅ | ❌ | ❌ | 网络强 |
# 学习路线
01.MIT → 02.Apache → 03.GPL/LGPL → 04.BSD/MPL → 05.企业实战
1
| 编号 | 文章 | 核心内容 |
|---|---|---|
| 01 | MIT开源协议详解 | 最宽松协议/Vue/React/jQuery 都在用 |
| 02 | Apache开源协议详解 | 含专利保护/Kubernetes/Android 的选择 |
| 03 | GPL与LGPL协议详解 | 传染性强弱对比/Linux/FFmpeg 的使用 |
| 04 | BSD与MPL协议详解 | 中间地带/文件级 copyleft |
| 05 | 企业开源实战与误区 | GitHub添加/package.json声明/依赖扫描/常见误区 |
# 一句话选协议
| 你的需求 | 推荐 |
|---|---|
| "随便用,不需要署名" | MIT / 公共领域 |
| "随便用,但保留专利权利" | Apache 2.0 |
| "用了我的代码,你的代码也要开源" | GPL |
| "除了我家的库,其他代码可以闭源" | LGPL |
| "改了我家的文件就开源,其他随意" | MPL |
# 常见误区
- "开源就是免费" - 开源 ≠ 免费,GPL 要求衍生作品也必须开源
- "没写协议就安全" - 没写协议默认保留所有权利,别人不能用
- "GitHub 上的代码随便用" - 没有 License 就默认 All Rights Reserved
- "MIT 不需要署名" - MIT 要求保留版权声明
- "商用项目不能用 GPL 代码" - 可以用,但整个项目必须 GPL 开源
# 选择决策树
你的目标是什么?
│
├── 个人小工具,无所谓别人怎么用
│ → MIT(02.MIT详解)
│
├── 公司项目,需要专利保护
│ → Apache 2.0(03.Apache详解)
│
├── 核心产品,不想被竞品闭源复制
│ → GPL v3(04.GPL/LGPL详解)
│
├── 基础库,既想保护又想商业可用
│ → LGPL 或 MPL 2.0(04-05章)
│
├── 完全放弃所有权利
│ → Unlicense
│
└── 不确定 → 默认选 MIT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
核心原则:选协议前先想清楚——你希望别人怎么用你的代码?你愿意承受怎样的限制?
上次更新: 2026/06/07, 21:36:05