许可证兼容性检查器
检查能否将他人的代码合并到自己的项目中发布。结果为一般性解读,附有例外条款或额外许可时可能有所不同。
本网站内容仅为一般信息,不构成法律意见。实际发布、合同或纠纷的判断,请咨询律师等专业人士。
完整兼容性表
行是引入的代码,列是合并该代码后一起发布的项目。以复制、组合代码并作为一个程序发布的情形为准。
● 可以◐ 有条件可以○ 不可以
| 代码 ↓ / 项目 → | 专有软件 | MIT | Apache-2.0 | GPL-3.0 | GPL-2.0 | GPL-2.0+ | LGPL-3.0 | LGPL-2.1 | AGPL-3.0 | MPL-2.0 | EPL-2.0 | BSD-3-Clause | BSD-2-Clause | ISC | 0BSD | BSL-1.0 | Unlicense | CC0-1.0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| MIT | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 有条件可以 | 可以 | 有条件可以 | 有条件可以 |
| Apache-2.0 | 可以 | 可以 | 可以 | 可以 | 不可以 | 有条件可以 | 可以 | 不可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 有条件可以 | 可以 | 有条件可以 | 有条件可以 |
| GPL-3.0 | 不可以 | 不可以 | 不可以 | 可以 | 不可以 | 有条件可以 | 有条件可以 | 有条件可以 | 可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 |
| GPL-2.0 | 不可以 | 不可以 | 不可以 | 不可以 | 可以 | 有条件可以 | 不可以 | 有条件可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 |
| GPL-2.0+ | 不可以 | 不可以 | 不可以 | 可以 | 可以 | 可以 | 有条件可以 | 有条件可以 | 有条件可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 |
| LGPL-3.0 | 有条件可以 | 有条件可以 | 有条件可以 | 可以 | 不可以 | 有条件可以 | 可以 | 有条件可以 | 可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 |
| LGPL-2.1 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 |
| AGPL-3.0 | 不可以 | 不可以 | 不可以 | 有条件可以 | 不可以 | 有条件可以 | 有条件可以 | 有条件可以 | 可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 | 不可以 |
| MPL-2.0 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 |
| EPL-2.0 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 | 有条件可以 |
| BSD-3-Clause | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 有条件可以 | 可以 | 有条件可以 | 有条件可以 |
| BSD-2-Clause | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 有条件可以 | 可以 | 有条件可以 | 有条件可以 |
| ISC | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 有条件可以 | 可以 | 有条件可以 | 有条件可以 |
| 0BSD | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 |
| BSL-1.0 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 有条件可以 | 可以 | 有条件可以 | 有条件可以 |
| Unlicense | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 |
| CC0-1.0 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 |
什么是兼容性
两个许可证「兼容」,是指可以在同时遵守两个许可证条件的前提下,发布由两份代码合并而成的一个程序。兼容是有方向的:把 MIT 代码放进 GPL 项目可以,但把 GPL 代码放进 MIT 项目,整个组合作品都必须遵守 GPL 条件,因而无法继续作为「MIT 项目」存在。
此表假设的情形
- 复制他人代码或静态结合,作为一个程序发布的情形。
- 不分发、仅在内部使用时,大多数条件都不会触发(AGPL 的网络条款除外)。
- 以独立进程运行、仅通过命令行或网络通信的情况,有可能被视为「聚合(aggregate)」而非「结合」,结论可能不同。
- 仅以动态链接使用 LGPL 库的情况,要比此表宽松得多。请参阅 GNU 兼容性矩阵中的「Use a library」一项。
判定依据
- GNU 许可证之间的组合:FSF《GNU 许可证常见问题》中的兼容性矩阵(以 copy code 为准)
- Apache-2.0 与 GPL:FSF 许可证列表 — 与 GPL-3.0 兼容,与 GPL-2.0 不兼容
- MPL-2.0:原文第 1.12 条(Secondary License)·第 3.3 条(Larger Work)
- EPL-2.0:原文 Exhibit A(指定 Secondary License)
附有例外条款(如 Classpath Exception、Linux-syscall-note)或额外许可的代码可能与此表不同。判断事关重大时,请查阅原文并听取专业意见。