本文目录导读:

选择 Python 项目的开源许可证,本质上是在 “保护自己” 和 “促进他人使用” 之间做权衡,没有绝对“最好”的许可证,只有最适合你当前需求的。
下面是一个简洁的决策路径和主流许可证的对比,帮你快速找到答案。
第一步:核心问题自查(30秒快速定位)
请回答以下三个问题:
- 是否允许商用? 几乎所有主流开源许可证都允许商用,如果你的目标是完全禁止商用(例如只允许个人学习),开源社区不推荐这种做法(通常用“仅限非商业用途”的协议,但这不属于标准的开源许可证)。如果你有这种需求,建议使用标准的GPL或AGPL,或者干脆不要开源。
- 是否要求“传染性”(Copyleft)? 如果有人用了你的代码,是否需要把他整个项目也开源?
- 是:选 GPL 家族。
- 否:选 MIT, Apache, BSD 等宽松许可证。
- 你的项目是库(Library)还是应用(Application)?
- 库(如某个pip包):强传染性(GPL)会“感染”所有依赖你的商业项目,导致别人不敢用,通常建议用 MIT 或 Apache 2.0。
- 应用(如一个完整的工具、网站):可以用GPL,防止别人闭源分发你的作品。
第二步:主流许可证对比(按推荐程度排序)
| 许可证类型 | 简称 | 核心理念 | 对用户要求 | 适合场景 |
|---|---|---|---|---|
| MIT | MIT | 最简单、最宽松,别人可以随便用、改、闭源、商用,只需保留你的版权声明。 | 几乎无限制。 | 个人项目、小型库、内部工具,希望代码被广泛使用。 |
| Apache 2.0 | Apache | 与MIT类似,但增加了对专利的明确授权,要求保留版权和免责声明,修改需要注明。 | 需要保留版权和免责声明,修改文件需注明变更。 | 企业级项目、涉及专利的项目(如Google、Apple常用)。 |
| GNU GPLv3 | GPL3 | 强“传染性”,如果有人分发应用(包括网络服务),必须用GPL发布整个应用的源码。 | 要求高,衍生作品也必须用GPL。 | 保护自由软件,不希望别人闭源使用你的代码。 |
| GNU AGPLv3 | AGPL3 | GPL的升级版。连“网络服务”也算分发,如果有人通过网页使用你的代码,也必须公开源码。 | 要求最高。 | Web应用、云服务,防止有人改改就部署到网上,不公开源码。 |
| GNU LGPL | LGPL | 弱传染性,专门针对库,允许商业项目以动态链接方式使用(无需开源),但如果静态链接或修改了库本身,则需开源。 | 针对库修改有要求。 | 库,既想被广泛使用,又不想被商业项目直接据为己有。 |
| BSD 2/3-Clause | BSD | 与MIT极度相似,但BSD有禁止背书条款。 | 与MIT类似。 | 学术项目(UC Berkeley使用)。 |
第三步:常见场景推荐(直接抄作业)
-
场景1:我写了一个小工具/爬虫/脚本,希望别人随便用,就当个乐子。
- 推荐:MIT,一行注释搞定,简单明了。
-
场景2:我写了一个核心库(
pandas,requests),想让它成为行业标准。- 推荐:MIT 或 Apache 2.0,商业公司才敢用,用的人越多,生态越好。
-
场景3:我写了一个非常酷的机器学习框架,不希望大公司闭源修改后卖钱。
- 推荐:GPLv3,如果有人分发你的代码或修改版,必须开源他的全部程序。
-
场景4:我写了一个SaaS网站后端代码,不想让别人改改就上线,还不开源。
- 推荐:AGPLv3,这是开源许可证里最强的“防盗版”机制(MongoDB, Elasticsearch之前用类似协议)。
-
场景5:我在公司内部写了一个库,用于内部组件,但未来考虑开源。
- 推荐:Apache 2.0,它明确授予了专利权,对雇佣单位更友好。
-
场景6:我完全不懂,就想挑一个最安全的。
- 推荐:MIT,代码大家随便用,你免责,99%的情况都适用,如果你不主动写,GitHub默认也是MIT。
第四步:如何操作(GitHub / PyPI)
- 选择许可证文件:在项目根目录创建一个
LICENSE文件(或LICENSE.txt)。 - 使用官方模板:
- 访问 https://choosealicense.com/ 这个官方指南,它会帮你生成精确的法律文本。
- 在 GitHub 创建仓库时,直接在“Add a license”下拉框里选择一个(如MIT),GitHub会自动生成。
- 修改版权声明:将
[year]和[fullname]替换为你的实际年份和姓名(2024 Alice Smith)。这个必须做,否则法律上无效。
特殊提示
- 不要自己写许可证:法律风险极高,不要DIY,只用上面提到的这些经过数十年法律检验的。
- 如果项目使用了他人的开源代码:你需要确保你的许可证与所有依赖的许可证兼容。
- 你的代码如果用了GPL库,那你的代码也必须变成GPL,你的代码如果用了MIT库,你可以继续用MIT。
- 兼容性快速检查:Apache兼容MIT和GPLv3;GPLv3不兼容Apache 2.0(指简单组合情况,实际需看具体条款)。
- Python生态的特殊性:在PyPI上,最流行的包大多是 MIT 或 BSD(如
requests,flask,scipy),其次是 GPL(如某些大型科学计算包)。强烈推荐从MIT或Apache开始,除非你有强力理由。
个人项目、库:选 MIT,企业级、有专利:选 Apache 2.0,想强制别人开源:选 GPLv3,想防止网页端被盗用:选 AGPLv3。