本文目录导读:

开源项目协议(开源许可证)是规定软件如何被使用、修改和分发的法律条款,常见的开源协议主要分为两类:宽松型(Permissive)和限制型(Copyleft),以下是最常见和重要的开源协议分类及介绍:
宽松型协议(Permissive Licenses)
这类协议限制较少,允许用户自由使用、修改、再分发(包括闭源商用),主要要求保留版权声明。
- MIT License
- 特点:最宽松、最简单的协议之一,只要求你在分发代码时保留原作者的版权声明和许可声明。
- 适用场景:广泛用于各种项目,尤其是希望被最大化采用和商用的代码。
- BSD License(伯克利软件发行版许可证)
- 2-Clause BSD (BSD-2):与MIT类似,要求保留版权声明。
- 3-Clause BSD (BSD-3):在BSD-2基础上增加了一条“禁止使用原作者名义进行背书或推广”的条款。
- 适用场景:学术界和企业项目,尤其是喜欢稍严格名誉保护的项目。
- Apache License 2.0
- 特点:比MIT稍复杂,明确授予专利权,并要求在修改后的文件里保留原始版权声明和更改说明,对专利问题有明确保护。
- 适用场景:大型项目、企业级应用(如Android、Hadoop、Spring框架)。
- Unlicense / CC0(公共领域)
- 特点:放弃所有版权,将代码贡献至公共领域,任何人都可以不受任何限制地使用。
- 适用场景:希望代码完全无版权约束,支持最彻底的自由。
限制型/保护型协议(Copyleft Licenses)
这类协议要求修改或衍生作品也必须以相同或兼容的协议开源,防止代码被私有化(用于闭源商用)。
- GPL-2.0 / GPL-3.0(GNU通用公共许可证)
- 特点:著名的“病毒式”传播,如果你使用了GPL代码并发布(分发)了软件,你的整个衍生作品也必须全部以GPL协议开源。
- 重要注意:如果只是内部使用或通过网络提供服务(SaaS),则不需要强制开源,但分发则必须开源。
- 适用场景:希望保护代码自由,防止被闭源项目使用(如Linux内核、Git)。
- LGPL(GNU宽通用公共许可证)
- 特点:GPL的变种,允许通过链接(如库文件)的方式被闭源软件调用,而不强制整个闭源软件开源,但修改LGPL库本身仍须开源。
- 适用场景:专门用于代码库(Library),让商业软件可以通过动态链接等方式使用(如一些C/C++基础库、Qt框架早期版本)。
- AGPL(Affero GPL)
- 特点:GPL的增强版,解决了“网络服务漏洞”,任何通过互联网使用AGPL软件的用户(如网站访问者),都有权获得该软件的完整源代码。最严格的Copyleft协议。
- 适用场景:云服务、SaaS(软件即服务)项目,强制要求即使通过远程网络提供服务也必须开源(如MongoDB早期版本、Elasticsearch曾用)。
- MPL 2.0(Mozilla公共许可证)
- 特点:介于宽松和严格之间,允许将MPL代码与其他专有代码混合(文件级别保护),但修改后的MPL文件本身仍须开源。
- 适用场景:Mozilla的Firefox、Thunderbird等常见项目。
其他常见/特殊协议
- Eclipse Public License (EPL):类似于MPL,与GPL不完全兼容,主要用于Eclipse基金会项目。
- Creative Commons (CC) 协议:
- 主要针对非软件作品(文档、图片、音乐)。
- CC0:放弃版权(类似Public Domain)。
- CC BY:署名即可。
- CC BY-SA:署名且相同方式共享。
- 自定义/特殊协议:某些项目(如JSON、SSPL)会使用自定义协议,常见目的是限制商业云服务或特定用途。
如何选择?简单总结
- 想最自由、被广泛采用(包括闭源商用)? -> 选 MIT 或 BSD-2。
- 希望有专利保护,且希望被企业友好采用? -> 选 Apache 2.0。
- 希望将所有修改都回馈给社区,确保代码永远自由(避免闭源商用)? -> 选 GPL-2.0 或 GPL-3.0。
- 在开发一个代码库,希望商业软件能通过动态链接使用它? -> 选 LGPL。
- 在开发一个SaaS服务,强制别人通过网页使用必须开源? -> 选 AGPL。
注意:协议之间可能存在兼容性问题(如GPL-2.0和Apache 2.0代码不能直接混合),在使用他人代码前,务必仔细阅读其对应的协议全文(通常在项目根目录的 LICENSE 或 COPYING 文件中)。