开源项目协议有哪些?

wen 开源项目 12

本文目录导读:

开源项目协议有哪些?

  1. 宽松型协议(Permissive Licenses)
  2. 限制型/保护型协议(Copyleft Licenses)
  3. 其他常见/特殊协议
  4. 如何选择?简单总结

开源项目协议(开源许可证)是规定软件如何被使用、修改和分发的法律条款,常见的开源协议主要分为两类:宽松型(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)会使用自定义协议,常见目的是限制商业云服务或特定用途。

如何选择?简单总结

  1. 想最自由、被广泛采用(包括闭源商用)? -> 选 MITBSD-2
  2. 希望有专利保护,且希望被企业友好采用? -> 选 Apache 2.0
  3. 希望将所有修改都回馈给社区,确保代码永远自由(避免闭源商用)? -> 选 GPL-2.0GPL-3.0
  4. 在开发一个代码库,希望商业软件能通过动态链接使用它? -> 选 LGPL
  5. 在开发一个SaaS服务,强制别人通过网页使用必须开源? -> 选 AGPL

注意:协议之间可能存在兼容性问题(如GPL-2.0和Apache 2.0代码不能直接混合),在使用他人代码前,务必仔细阅读其对应的协议全文(通常在项目根目录的 LICENSECOPYING 文件中)。

抱歉,评论功能暂时关闭!