第16章:开源协议选择 📜
没有 LICENSE 的项目 = 默认版权保护 = 别人不能使用和修改!本章详解各种开源协议。
📋 目录
为什么需要开源协议?
❌ 没有 LICENSE 会怎样?
默认版权法(Berne Convention):
│
├── 你创建了代码 → 自动拥有版权
├── 别人不能复制
├── 别人不能修改
├── 别人不能分发
└── 别人不能商用
→ 这和"闭源软件"有什么区别?!
✅ 有了 LICENSE 后…
MIT License 赋予别人:
│
├── ✅ 可以复制
├── ✅ 可以修改
├── ✅ 可以分发
├── ✅ 可以商用
└── 条件:保留原作者声明
常见开源协议对比
协议图谱(宽松程度)
最宽松 ←──────────────────────→ 最严格
MIT → Apache 2.0 → LGPL → GPL v3 → AGPL
各协议详解
1️⃣ MIT License ⭐ 最推荐!
特点:
| 特性 | 说明 |
|---|---|
| 允许商用 | ✅ 可以 |
| 允许修改 | ✅ 可以 |
| 需要署名 | ✅ 需要(保留 LICENSE 文件) |
| 要求开源修改 | ❌ 不需要 |
| 专利授权 | ❌ 不含(但有争议) |
适合:几乎所有个人项目。
全文:
MIT License
Copyright (c) [年份] [作者]
Permission is hereby granted...
(详见项目中的 LICENSE 文件)
2️⃣ Apache License 2.0 ⭐ 推荐!
特点:
| 特性 | 说明 |
|---|---|
| 允许商用 | ✅ 可以 |
| 允许修改 | ✅ 可以 |
| 需要署名 | ✅ 需要 |
| 要求开源修改 | ❌ 不需要 |
| 专利授权 | ✅ 包含(明确授予专利使用权) |
比 MIT 多了什么?
MIT:不保证专利授权 → 作者可以起诉你专利侵权
Apache 2.0:明确授予专利授权 → 作者不能再起诉你
适合:企业项目、涉及专利的技术。
3️⃣ GPL v3(GNU General Public License)⚠️ 强 copyleft
特点:
| 特性 | 说明 |
|---|---|
| 允许商用 | ✅ 可以 |
| 允许修改 | ✅ 可以 |
| 需要署名 | ✅ 需要 |
| 要求开源修改 | ✅ 必须!(强) |
什么是”强 copyleft”?
场景:你用了 GPL 协议的库
│
├── 如果你的项目是开源的 → ✅ 没问题
└── 如果你的项目是闭源的 → ❌ 违法!
适合:希望所有衍生项目都开源的开发者。
⚠️ 注意:GPL 有”传染性”,很多公司禁止在项目中使用 GPL 代码。
4️⃣ AGPL v3(Affero GPL)⚠️⚠️ 最强 copyleft
比 GPL 多了什么?
GPL:只有分发软件时才需要开源
AGPL:即使用 SaaS 服务(不分发),也需要开源!
示例:
你写了一个类似 GitHub 的网站,使用了 AGPL 协议的库:
│
├── 如果是 GPL:你不需要开源(因为没有分发软件)
└── 如果是 AGPL:你必须开源!(因为用户通过浏览器访问了)
适合:不希望别人用你的代码做 SaaS 赚钱。
如何选择协议?
决策树 ✅
你的项目是...?
│
├─ 想让更多人使用,不在乎别人是否开源?
│ └─ 选择 MIT 或 Apache 2.0 ✅
│
├─ 希望别人修改后也必须开源?
│ └─ 选择 GPL v3 ✅
│
├─ 不希望别人用你的代码做 SaaS?
│ └─ 选择 AGPL v3 ✅
│
└─ 不想让别人用?
└─ 不需要开源,不用放 LICENSE
快速推荐
| 你的身份 | 推荐协议 |
|---|---|
| 个人开发者 | MIT ✅ |
| 企业项目 | Apache 2.0 ✅ |
| 开源激进主义者 | GPL v3 |
| 不想被 SaaS 白嫖 | AGPL v3 |
如何添加协议?
方法1:创建仓库时自动添加 ✅
创建仓库页面 → Choose a license → 选择协议
│
GitHub 会自动创建 LICENSE 文件。
方法2:手动创建 LICENSE 文件
步骤:
# 1. 在项目根目录创建 LICENSE 文件
touch LICENSE
# 2. 复制协议全文进去
# (从 https://choosealicense.com/licenses/ 复制)
# 3. 提交
git add LICENSE
git commit -m "Add: MIT License"
git push
方法3:使用 lice 工具(推荐!)✅
# 安装 lice
npm install -g lice
# 生成 MIT 协议的 LICENSE
lice mit > LICENSE
# 生成 Apache 2.0
lice apache > LICENSE
常见问题
Q1: 可以改协议吗?
A: ✅ 可以,但有条件。
| 情况 | 能否改? |
|---|---|
| 你是最初作者,没有接受外部贡献 | ✅ 可以随时改 |
| 你接受了别人的 PR | ⚠️ 需要所有贡献者同意 |
| 项目使用 GPL | ⚠️ 不能改成更严格的协议 |
建议:一开始就选好协议,不要随便改。
Q2: 别人的项目没有 LICENSE,我可以用吗?
A: ❌ 不可以!
没有 LICENSE = 默认版权保护
→ 你必须联系作者,获得许可。
Q3: MIT 和 BSD 有什么区别?
| 特性 | MIT | BSD 2-Clause | BSD 3-Clause |
|---|---|---|---|
| 简洁 | ✅ 很短 | ✅ 很短 | ✅ 很短 |
| 免责声明 | ✅ 有 | ✅ 有 | ✅ 有 |
| 禁止背书 | ❌ 不含 | ❌ 不含 | ✅ 含有(不能用作者名为宣传) |
推荐:MIT ✅(最简单)。
📝 实战练习
练习1:为你的项目选择合适的协议
任务:
- 访问 https://choosealicense.com/
- 回答几个问题
- 确定你的项目应该用什么协议
练习2:添加 LICENSE 到现有项目
任务:
- 检查你的一个 GitHub 项目是否有 LICENSE
- 如果没有,使用
lice工具生成 - 提交到仓库
📚 延伸阅读
- 附录A:项目结构 - 了解一个完整项目需要哪些文件
- 第13章:Star 的意义 - 如何获得更多 Star
- 第15章:README 编写艺术 - 如何写出吸引人的 README
📝 本章小结
你现在了解了:
- ✅ 为什么需要开源协议
- ✅ 常见协议的区别(MIT、Apache、GPL、AGPL)
- ✅ 如何选择合适的协议
- ✅ 如何添加 LICENSE 文件
💡 核心要点
MIT 协议适合 90% 的个人项目。
如果你不确定,用 MIT 就对了。