开源许可协议

概述

开源许可协议是指开源社区为了维护作者和贡献者的合法权利,保证软件不被一些商业机构或个人窃取,影响软件的发展而开发的协议。通常,许可协议会在其条款中明确是否允许专利使用、修改、分发、商业用途、私人使用等。

常用开源协议

如果您想快速选择以下常见开源协议,可借助 常用开源协议选择器

如何选择开源协议

我们该如何选择合适的开源协议呢?

开源协议特点和区别

首先,我们需要明白这些常见开源协议有何特点和区别。一般会从权限、条件和限制三个方面考虑,我们制作了图表进行了对比展示,以供参考。

许可协议专利修改分发商用私用公开源码变更记录相同许可证网络公开许可和版权声明商标
MIT
Apache-2.0×
BSD-2
BSD-3
ISC
GPL-2.0
GPL-3.0
AGPL-3.0
LGPL-2.1√1
LGPL-3.0√1
MPL-2.0√2×

表中相关图示说明如下:

1.权限包括:

  • 专利:
    • √:该许可证提供了明确的专利权授予权力。
    • ×:该许可证明确声明它不授予贡献者专利的任何权利。
  • 修改:
    • √:许可材料可以被修改。
  • 分发:
    • √:许可材料可以分发。
  • 商用:
    • √:许可的材料和衍生物可用于商业目的。
  • 私用:
    • √:许可的材料可以私下使用和修改。

2.条件包括:

  • 公开源码:
    • √:分发许可材料时,必须提供源代码。
  • 变更记录:
    • √:对许可材料所做的更改必须记录在案。
  • 相同许可证:
    • √:分发许可材料时,必须在同一许可下发布修改。在某些情况下,可以使用类似或相关的许可证。
  • 相同许可证(库):
    • √1:分发许可材料时,必须在同一许可下发布修改。在某些情况下,可能会使用类似或相关的许可,或者该条件可能不适用于将许可材料用作库的作品。
  • 相同许可证(文件):
    • √2:分发许可材料时,必须在同一许可下发布对现有文件的修改。在某些情况下,可以使用类似或相关的许可证。
  • 网络公开:
    • √:通过网络与许可材料进行交互的用户被授予接收源代码副本的权利。
  • 许可和版权声明:
    • √:许可和版权声明的副本必须包含在许可材料中。

3.限制包括:

  • 商标:
    • ×:该许可证明确声明它不授予商标权,即使没有此类声明的许可证也可能不授予任何隐含的商标权。

选择建议

1.源码公开:从上表中,可以看出GPL、AGPL、LGPL协议要求公开分发材料的源码,在使用相关库或代码时请谨慎选择。

2.商标使用:在修改、分发Apache-2.0、MPL-2.0许可的材料时不能直接使用原来的商标名称。

3.专利使用:如果你比较关注专利使用方面,Apache-2.0 许可协议比较受青睐,有较多的组织和开发者使用该协议,并且应用在了较多的流行项目中。

4.宽松使用:其他宽松类协议(MIT、BSD、ISC)应用较为广泛。比如,在前端项目,尤其是npm包项目中,比较偏爱采用 MIT 和 ISC 协议。

总体来说,MIT 和 Apache-2.0 是目前最普遍的许可协议选择。