开源=源代码公开可看,但「免费拿」≠「随便用」——许可协议才是合同:GPL(传染式:用了就得开源)与 MIT/Apache(宽松:留个版权声明即可),商用前看一眼,能避免大事故。
上游:6-2 的库(你引用的每个库都有许可证)、6-16 的 GitHub(开源的大本营)。本课一路用过的 Python/SQLite/Bootstrap 全是开源——本篇讲清「可以白拿的条件」。
一、开源是什么、不是什么
开源(Open Source)=源代码公开,且许可证授予使用、研究、修改、再分发的权利。两个常见错觉: - 「开源=免费」——大多免费,但可以收费(服务、企业版、双许可);「自由软件」的 Free 是 freedom 不是 free beer。 - 「公开源码=随便用」——没写许可协议的代码默认保留所有权利(你看到了也不能合法复用);协议才是法律边界。
二、两大流派
Copyleft(传染式)——GPL 家族 - 条款:用了 GPL 代码的衍生作品,必须同样以 GPL 开源; - 「传染」:链接了 GPL 库的产品也得 GPL——商业闭源软件避之不及; - 代表:Linux 内核(GPLv2)、GCC。理念:自由要代代相传。
宽松派(Permissive)——MIT / BSD / Apache - 条款:几乎随便用(含商用闭源),只需保留版权与许可声明; - Apache 2.0 额外给专利授权与专利报复条款,企业友好; - 代表:MIT(jQuery、Bootstrap)、Apache 2.0(Kubernetes、Android 用的 Linux 内核修改版走 GPL 但 Google 用 Harmony 兜底——细节复杂,总之协议选型是商业决策)。
| 协议 | 商用闭源 | 修改后须开源 | 保留声明 | 专利授权 |
|---|---|---|---|---|
| GPL | ✗(衍生品须 GPL) | ✓ | ✓ | ✗ |
| MIT | ✓ | ✗ | ✓ | 无 |
| Apache 2.0 | ✓ | ✗ | ✓ | ✓ |
三、工程实践三条
- 引用即审查:
pip install任何库先看许可证字段——MIT/Apache 放心用,GPL 问法务(尤其产品要闭源卖时)。 - 声明要留痕:宽松协议的唯一义务是保留声明——丢掉 LICENSE 文件就已经违约。
- 警惕「套壳违规」:拿 GPL 代码改个名当自家产品卖=违约可诉(历史判例不少);供应链攻击(6-19)也常从依赖这座桥进来。
动手 Demo:给自己的开源项目挑协议
# 决策小助手:回答三个问题,得到协议建议
def pick_license(closed_commercial, want_copyleft, want_patent_grant):
if want_copyleft:
return "GPL-3.0(传染式:衍生作品必须开源)"
if closed_commercial:
return "Apache-2.0(宽松+专利授权,企业友好)" if want_patent_grant \
else "MIT(最简宽松)"
return "MIT 或 CC0(近乎放弃权利,随便用)"
for case in (
("个人小工具想让大家随便用", False, False, False),
("公司库,产品要闭源,怕专利坑", False, False, True),
("坚持所有改进都要回馈社区", False, True, False),
):
name, a, b, c = case
print(f"{name} → {pick_license(a, b, c)}")
看到什么算成功:
个人小工具想让大家随便用 → MIT 或 CC0(近乎放弃权利,随便用)
公司库,产品要闭源,怕专利坑 → Apache-2.0(宽松+专利授权,企业友好)
坚持所有改进都要回馈社区 → GPL-3.0(传染式:衍生作品必须开源)
读结果:协议选择是意图声明——想约束别人就 GPL,想被广泛采用就 MIT/Apache;没有默认答案。
30 秒实验
随便打开一个你装过的 Python 包目录(或 pip show 包名)找 License 字段——多半是 MIT。再打开 GitHub 任一热门仓库,README 旁边就有许可证徽章——从今天起,装库前多看一眼这两个位置,习惯即成。
常见误区
- 「开源软件没有版权」——版权永远在作者;开源只是作者主动授权你若干权利,未授权的部分(如某些商标)照样不能碰。
- 「MIT 协议代码商用要付费」——不用付费,义务只有保留声明;付费的是商业软件+服务,不是协议。
- 「我的闭源产品链了 GPL 库但没人发现」——GPL 传染基于著作权法,违约即侵权;合规扫描(5-8 静态分析的兄弟工种)已是大厂标配,被发现的代价远大于换库。
自测三问(点击展开)
1. **Copyleft 的「传染」指什么?** 答:用 GPL 代码的衍生作品必须继续以 GPL 开源——自由条款随代码传播。 2. **MIT 协议下商用闭源的义务?** 答:仅保留版权与许可声明;无强制开源、无付费。 3. **没写许可协议的公开代码能不能用?** 答:默认保留所有权利——不能合法复用;想用得先联系作者或换有协议的。- ☑ 6-17 完成 —— 自由的边界:开源与许可协议
- ☐ 下一节 6-18 逆向工程、反汇编器、反编译器
相关笔记
- GitHub —— 开源协作的平台
- 库 —— 每个库都带着一张协议
- ⌨️ 编程原理 · 索引 —— 全课路线图