记住三个关键开源许可证,选择开源项目不再犯难

VicLai 2024年5月7日

OSI 认可的开源许可证,目前已经有 100 多个,还有很多因为不符合 OSI 有关开源的定义,而被称之为“伪开源(Fauxpen Source Licenses)”的许可证,比如最有代表性的 SSPL 许可证,SSPL 许可证是 MongoDB 公司于 2018 年推出的一种“开源许可证“,并尝试将其提交给 OSI 审批,此后在 2021 年, Elastic 公司也将旗下知名的开源软件 ElasticSearch 和 Kibana 的许可证变更为 SSPL,为此 OSI 在其官方网站专门发布了一篇声明,阐述“SSPL 不是开源许可证”,因为他不符合 OSI 有关开源定义中的“第六条:许可证不得限制任何人在特定领域使用该程序”

OSI 关于 SSPL 的声明

开源许可证这么多,作为开源项目的管理者,如何选择适合的许可证?

100 多种开源许可证协议,没有必要挨个去研究,首先这些协议的用词都非常复杂和晦涩难懂,非专业人士难以理解,其次大多数协议的应用范围也非常有限,研究的意义不大。抓住其中具有代表性的许可证进行分析即可。

作为项目的管理者,为自己的项目选择许可证,首先要明确以下三个问题:

  1. 他人修改源码后,是否可以闭源?(会影响到开源软件的商业化生态)
  2. 新增的代码,是否要采用同样的许可证?(所谓的许可证的传染性,是项目不分叉的重要保障)
  3. 每一个修改过的文件,是否都必须放置版权说明?(考虑的是版权问题)

明确了上述三个需求之后,基本上就圈定了许可证选择的主要方向。更进一步,还可以考虑以下两个问题:

  1. 衍生软件的广告,是否可以用你的名字促销?(基本上放弃了所有权利)
  2. 是否需要对源码的修改之处,提供说明文档?(对许可证的传染性进行折中)

下面这个图,比较简洁的呈现了最常用的几个许可证的区别和联系(阮一峰制图): 开源协议 by 阮一峰制图

综上:

  • 如果你期望自己的开源项目真正的、完全的、不附加任何限制的开源,那么选择 ”MIT 许可证“,比如我所在的公司快猫星云开源的 all-in-one 监控数据采集器项目 flashcatcloud/categraf 就采用 MIT 许可证;
  • 如果你期望保障自己的开源项目的完整性,不被分叉或者不被闭源,那么选择 ”GPL 许可证“,典型代表项目为 Linux 内核:https://github.com/torvalds/linux,GPL 许可证有效的保障了 Linux 内核项目沿主干稳定发展;
  • 如果你期望自己的开源项目,保留一定的版权,又不限制其他人基于该开源软件商业化,那么就选择 ”Apache 许可证“,典型的代表项目有 Kubernetes、云原生监控工具 Nightingale 夜莺,围绕着开源软件的商业化公司也是开源项目生态的重要组成力量;

知名开源项目陆续变更开源许可证,会带来什么影响?

最近,有一些知名开源项目,出于保护商业利益的角度出发,陆续更改了自己的开源许可证,比如:Redis、Zabbix、Grafana、ElasticSearch、Kibana 等。

  • 2024 年 3 月 Redis 切换许可证
  • 2024 年 4月 Zabbix 切换许可证
  • 2022 年 5 月 ElasticSearch 切换许可证
  • 2021 年 4 月 Grafana 切换许可证

这些许可证的更改,对于普通的终端用户来讲,并不会有太大的影响。这些变化无一例外,都针对”商业使用“做出了限制,避免了第三方商业公司对开源项目发起方的商业利益构成竞争。以 Zabbix 7.0 变更许可证为例,会给以二次开发 Zabbix 并提供商业化版本的公司带来约束,如不能及时调整服务模式,那影响就是致命的。

不过考虑到围绕着开源软件的各种商业化公司,本身也是开源项目生态的重要贡献者和参与方,这些许可证的变化,对整个开源生态的合力肯定是造成了削弱,出现“另起炉灶”的事情,或者出现各种“开源平替方案”。比如当 ElasticSearch 更改许可证之后,Amazon 直接对 ElasticSearch 进行分叉另起炉灶推出了 OpenSearch 项目;再比如最近 Redis 更改许可证之后,微软立即推出了 Redis 的开源平替 Garnet 项目,并号称性能遥遥领先 Redis。

开源许可证,无所谓好与坏。合适的许可证,是开源项目发展的基石。变更许可证带来的项目分叉或者出现平替,就是根本性基石出现动摇的体现之一。

作为开源项目的用户,如何选型开源项目?

作为开源项目的终端用户,如何评价和选项开源软件呢?可以从以下四个方面去考虑:

  1. 开源项目的生态位要准确:也就是看该项目在庞大的开源软件构成的链条上,是否是关键的一环,能否通过标准化的输入输出嵌入到链条中。反例:如果你看到一个开源项目的定位模糊、功能追求大而全、难以和其他开源软件对接,那么大概率该项目的发展会受限。
  2. 开源项目社区的活跃度和多元化:众人拾柴火焰高,速度是开源项目的制胜法宝,我们可以从 Issue / PR / Contributor 维度去评价,比如看 issue 数量是不是多、Contributor 来源是否多元化、Issue/PR 的响应速度是否够快等。
  3. 项目的许可证是否符合自己的要求:合适的许可证,是开源项目发展的基石,推荐选择 Apache 许可证、MIT 许可证、GPL 许可证等主流许可证相关项目。
  4. 是否有基金会托管:托管在基金会的项目一般都有相对透明的治理架构,能够聚集更多的力量,也不会轻易的做出更改许可证类型等事项。
开源版
Flashcat
Flashduty