跳过导航,直达内容

第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:为你的项目选择合适的协议

任务:

  1. 访问 https://choosealicense.com/
  2. 回答几个问题
  3. 确定你的项目应该用什么协议

练习2:添加 LICENSE 到现有项目

任务:

  1. 检查你的一个 GitHub 项目是否有 LICENSE
  2. 如果没有,使用 lice 工具生成
  3. 提交到仓库

📚 延伸阅读


📝 本章小结

你现在了解了:

💡 核心要点

MIT 协议适合 90% 的个人项目。

如果你不确定,用 MIT 就对了。


← 返回目录  |  ← 上一章  |  下一章 →