开源许可证选择:MIT、GPL 与 Apache 2.0
text MIT License
Copyright (c) [年份] [版权持有人]
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
### 允许的行为
- **商用**:可将代码用于商业产品,甚至闭源发行。
- **修改**:可自由修改,无需公开修改后的源码。
- **分发**:可合入自己的项目并以任何形式再发布。
- **专利许可**:没有明确的专利授权条款(意味着可能面临专利风险)。
### 限制
唯一的限制是:在软件的所有副本中,都必须包含原始的版权声明和许可声明。
### 适用场景
- 小型工具、库、示例代码。
- 希望代码被最大程度采用,包括被大公司闭源使用。
- 不介意他人基于你的工作做成商业闭源产品。
## GPL 许可证(以 GPLv3 为例)
### 核心理念
GNU 通用公共许可证(GPL)是一种 **Copyleft** 许可证:任何分发你软件(或基于你软件的衍生作品)的人,都必须以相同的 GPL 许可证公开其源代码。
### 主要版本
- **GPLv2**:经典版本,要求衍生作品同样使用 GPLv2,无“安装信息”要求。
- **GPLv3**:增加对专利报复条款、硬件限制(如 Tivo化)的防护,兼容更多许可证。
### GPLv3 允许的行为
- 查看、修改并运行软件用于任何目的。
- 分发原版或修改版,**但必须同时提供源代码**,且衍生作品仍需使用 GPLv3。
### GPLv3 的限制(核心条款)
- **传染性(Copyleft)**:如果你将 GPL 代码作为库链接到你的项目中(无论是静态还是动态链接),你的整个项目都**必须**以 GPL 许可证开源。
- **提供源码**:分发二进制版本时,必须同时提供或书面承诺提供对应的源代码。
- **专利终止**:如果分发者就软件中的某项专利起诉任何人,该分发者的专利许可将自动终止。
### 适用场景
- 希望确保软件及其所有衍生产品永远保持自由开源。
- 操作系统内核、核心系统工具、大型协作项目(如 Linux、GCC)。
- 希望构建强大的共享生态,防止被闭源商业利用。
## Apache 许可证 2.0
### 核心特点
Apache 2.0 是宽松型许可证,但比 MIT 更加“正式”,增加了专利授权条款和责任限制。
### 允许的行为
- 商用、修改、分发、再许可。
- 修改后的代码**无需**公开源码(无 Copyleft)。
- **明确的专利授权**:所有贡献者自动向使用者授予其所拥有的、实施该软件所需的专利权。
- 如果你起诉他人侵犯专利权,你获得的专利许可将终止(专利报复条款)。
### 附加要求
与 MIT 不同,Apache 2.0 要求在修改过的源代码文件中**显式声明你做出了修改**,并保留原始版权、专利和商标声明。此外,如果你分发软件的副本,必须包含一份 NOTICE 文件(如果存在的话)。
### 适用场景
- 企业级项目,希望法律层面更清晰,尤其重视专利风险。
- 与商业公司合作频繁的项目,Apache 2.0 的专利保护让商业伙伴更放心使用。
- Android 平台大量使用(AOSP 大部分采用 Apache 2.0)。
## 三大许可证核心差异一览
| 特性 | MIT | GPLv3 | Apache 2.0 |
|--------------------|-------------------------|---------------------------------|---------------------------------|
| **许可证类型** | 宽松型 | 强 Copyleft | 宽松型(含专利条款) |
| **衍生作品必须开源** | 否 | 是(完整项目传染) | 否 |
| **专利授权** | 无明确条款 | 有(专利报复) | 明确授权 + 报复条款 |
| **状态声明要求** | 仅保留版权声明 | 保留版权声明,并提供源码 | 保留版权声明、专利声明,标记修改|
| **代码复用自由度** | 极高(可闭源商用) | 低(整个链接项目必须开源) | 极高(可闭源商用,且无专利隐患)|
| **文件级修改标记** | 无 | 无(仅声明版权所有) | 必须注明修改过的文件 |
| **代表项目** | jQuery, Rails, .NET Core| Linux 内核, Git, VLC | Android, Kubernetes, Hadoop |
## 如何选择适合你的许可证?
### 决策树快速判断
你是否愿意让你的代码被任何人(包括商业公司)闭源使用? ├── 是 → 代码需要防御专利诉讼风险吗? │ ├── 是 → 选择 Apache 2.0 │ └── 否 → 选择 MIT └── 否 → 你希望所有使用你代码的人都必须开源他们的产品吗? ├── 是 → 选择 GPLv3 └── 否 → 考虑 LGPL(库弱传染)或 MPL(文件级弱传染)