软件开源协议(Open Source License)介绍
软件开源协议(Open Source License)是保障开源软件被合法、合规使用和分发的法律基础。选择正确的许可证对项目的成功至关重要。
下面我将为您详细介绍主流开源协议的分类、特点以及如何选择。
一、 核心概念:宽松 vs Copyleft(著佐权)
所有开源协议都基于两个核心思想,理解它们是理解所有许可证的关键:
-
宽松式许可证 (Permissive License)
- 核心思想:最大程度的自由。允许用户做任何事:使用、修改、商业闭源分发。要求通常非常少,主要是保留版权声明和许可证文本。
- 比喻:就像你把一个菜谱公开,别人可以拿去用、改、甚至开餐厅卖钱,只需要在菜单上提一下你的名字和原菜谱来源就行。
- 常见协议:MIT, Apache 2.0, BSD
-
Copyleft 许可证 (Copyleft License)
- 核心思想:“自由”的延续性。同样允许使用、修改、分发,但有一个关键限制:如果你分发修改后的版本(俗称“分发”),就必须以 相同的开源协议 公开你的修改成果。 这就是著名的“传染性”或“互惠”条款。
- 比喻:你公开了一个菜谱,并规定任何人基于你的菜谱做出的新菜谱,也必须以同样的方式免费公开。这确保了所有衍生作品始终保持开源。
- 常见协议:GPL, AGPL, LGPL
二、 主流开源协议详细介绍
(一) 宽松式协议 (Permissive Licenses)
1. MIT License (麻省理工学院许可证)
- 特点:极其简单和宽松,是目前最流行的开源协议之一。对用户几乎没有任何限制。
- 要求:
- 在软件和衍生品的所有副本中包含原始版权声明和许可声明。
- 适合:希望被广泛采用,几乎无限制地被使用的项目。jQuery, Rails, Node.js 等大量知名项目使用它。
2. Apache License 2.0 (Apache 许可证 2.0版)
- 特点:一个比 MIT 更详细的宽松协议,提供了明确的专利授权和保护。
- 要求:
- 保留版权和许可声明。
- 在修改的文件中需要有明显的更改说明。
- 如果修改了代码,需要在衍生作品中声明。
- 重要:提供了明确的专利授权(贡献者授予你使用其专利的权利),并有一个专利报复条款(如果你起诉该项目侵犯你的专利,你之前通过该许可证获得的专利授权会自动终止)。
- 适合:大型企业或涉及专利技术的项目,希望有明确的专利法律保护。Apache 项目、Android, Kubernetes 等使用它。
3. BSD Licenses (伯克利软件发行版许可证)
- 主要有两个版本:BSD 3-Clause 和 BSD 2-Clause。
- BSD 3-Clause (三条款BSD)
- 要求:
- 保留版权声明。
- 保留许可声明。
- 禁止使用版权所有者的名字或其贡献者的名字为衍生产品背书或促销(禁止背书条款)。
- 要求:
- BSD 2-Clause (二条款BSD/FreeBSD)
- 更宽松,只要求前两条。
- 适合:类似 MIT,希望非常自由的项目。
(二) Copyleft 协议 (Copyleft Licenses)
4. GPL (GNU General Public License, GNU通用公共许可证)
- 特点:最强 Copyleft,是自由软件运动的基石。具有强烈的“传染性”。
- 要求:
- 源代码必须随软件一起提供,或者在提供软件时以书面offer的形式提供源代码。
- 任何衍生作品(基于GPL代码修改或衍生的软件)都必须以 相同的 GPL 协议 发布。这意味着如果你的软件链接或包含了GPL代码,你的整个软件都必须开源。
- 版本:主流是 GPLv2 (Linux内核) 和 GPLv3 (GCC, Bash)。
- 适合:希望确保所有衍生作品都保持开源,推动自由软件生态发展的项目。
5. AGPL (GNU Affero General Public License, GNU Affero通用公共许可证)
- 特点:GPL 的“网络版”或“强化版”。它弥补了GPL的一个“漏洞”:在云服务(SaaS)场景中,如果公司只是内部使用或通过网络提供服务而不分发软件,GPL无法要求其开源修改后的代码。
- 要求:
- 包含了GPL的所有要求。
- 新增:如果通过网络向用户提供修改后的服务(即SaaS),那么必须向所有用户公开其服务的源代码。
- 适合:SaaS、网络应用服务等,防止云服务厂商使用开源代码却不回馈社区。MongoDB, Redis (早期版本) 曾转向AGPL。
6. LGPL (GNU Lesser General Public License, GNU宽通用公共许可证)
- 特点:较弱的Copyleft,旨在作为库(Library) 的折中方案。
- 要求:
- 允许用户以动态链接的方式使用LGPL库,而无需将整个主程序开源。主程序可以保持其原有许可证(包括闭源商业许可证)。
- 但如果修改了LGPL库本身,则必须将修改后的库以LGPL开源。
- 如果以静态链接的方式使用,则可能需要开源主程序,或者提供让用户能替换库的方法(如提供目标文件)。
- 适合:希望被闭源商业软件广泛采用的库文件,以扩大影响力。GNU C Library (glibc) 使用它。
三、 其他重要协议
7. MPL (Mozilla Public License, Mozilla公共许可证)
- 特点:介于宽松协议和GPL之间的“中间道路”(文件级Copyleft)。
- 要求:
- 对原有文件的修改必须以MPL开源。
- 但允许将MPL代码与其他专有代码在同一个项目中结合,只要MPL授权的文件保持独立并可被获取。专有部分可以保持闭源。
- 适合:希望鼓励代码回馈,同时又允许与商业闭源软件集成的项目。Mozilla Firefox, Thunderbird 使用它。
8. Eclipse Public License (EPL, Eclipse公共许可证)
- 与MPL类似,也是一种较弱的Copyleft协议。
9. Unlicense / CC0
- 特点:放弃版权,将作品投入公共领域(Public Domain)。这是最极端的“无协议”协议,没有任何条件。
- 注意:在某些国家,法律可能不允许完全放弃版权,此时Unlicense会尽可能提供等同于公共领域的权限。
- 适合:希望作品被完全无限制使用的情况。
四、 如何选择开源协议?
一些建议:
- 追求简单和最大普及度:选 MIT。
- 担心专利问题,需要更好的法律保护:选 Apache 2.0。
- 希望你的代码和所有修改都保持开源:选 GPL。
- 开发的是网络应用,不想被SaaS公司白嫖:选 AGPL。
- 开发一个库,希望既被开源项目使用,也被闭源商业软件使用:选 LGPL 或 MPL。
总结对比表格
协议名称 | 类型 | 要求简述 | 专利条款 | “传染性” | 商业友好度 |
---|---|---|---|---|---|
MIT | 宽松 | 保留版权和许可声明 | 无 | 无 | 极高 |
Apache 2.0 | 宽松 | 保留版权、许可、更改说明 | 有 | 无 | 极高 |
BSD | 宽松 | 保留版权和许可声明(可能禁止背书) | 无 | 无 | 极高 |
GPL | Copyleft | 衍生作品必须开源 | GPLv3有 | 强 | 低 |
AGPL | Copyleft | 衍生作品必须开源,SaaS必须开源 | 有 | 极强 | 很低 |
LGPL | 弱Copyleft | 修改库必须开源,动态链接主程序可闭源 | 有 | 弱(仅对库本身) | 高 |
MPL | 弱Copyleft | 修改文件必须开源,可与其他闭源代码结合 | 有 | 文件级 | 高 |
最后的重要提示:
- 一旦发布,很难更改:为项目选择许可证后,一旦别人基于你的许可证贡献了代码,再想更换协议会非常复杂。
- 许可证兼容性:如果你使用了别人的开源代码,要确保你的项目许可证与它们的许可证兼容(例如,GPL项目不能使用MIT代码,但MIT项目可以使用GPL代码)。
- 如有疑问,请咨询律师:对于商业项目或复杂情况,寻求专业法律意见总是最稳妥的。
希望这份详细的介绍能帮助你更好地理解开源协议!