作者 CSDN
· 2021年03月30日

50 多万个项目陷入混乱!只因代码库许可协议不兼容

声明:本文来自于微信公众号 CSDN(ID:CSDNnews),作者: 郑丽媛,授权站长之家转载发布。

提到开源,不少人都认为是免费+自由,其实并非全然如此。

每个开源工作者的追求不同。有的人只想专心写代码,不约束其他人对代码的使用范围,开源闭源皆可;有的人则希望其开源项目能得到更广泛的分享与改进,使用其源码的人也能坚持开源。

鉴于这种多样性的追求,因此,为了维护开源工作者权益,保持其创作热情,开源许可协议(开源许可证)就此诞生,用于规定使用开源项目时的权利及责任,即告诉使用者应该做什么,不应该做什么

在众多开源许可协议中,彼此之间是否可以兼容也不尽相同。上周三就发生了一起因开源许可协议不兼容引发的一场混乱:一个名为 mimemagic 的 Ruby 库因包含了与其自身许可证不兼容的部分代码,导致包括 Ruby on Rails 在内的五十多万个项目受到影响。

MIT & GPL

在详谈之前,我们需要先了解与这起事件有关的两种开源协议:MIT & GPL。

  • GPL

GNU GPL,全称 GNU General Public License,即 GNU 通用公共许可证,简称为 GPL,为人熟知的 Linux 正是采用了 GPL 协议。

GPL 协议在于对代码开源、免费使用和引用、修改,对衍生代码开源及免费使用,但不允许修改后或衍生的代码用作闭源的商业软件

另外,GPL 协议还具有较为特别的“传染性”:无论代码多少,但凡引用、修改遵循 GPL 代码的软件都必须开源和免费,并且要采用同样的 GPL 许可证。

  • MIT

相对而言,MIT 则是较为宽松的许可协议。

MIT 许可证之名源自麻省理工学院(Massachusetts Institute of Technology, MIT),因此又称麻省理工学院许可证,最初由麻省理工学院开发。

采用该协议的开源作者一般只想保留版权,因此没有任何其它的限制。即无论是以二进制还是源码形式发布,使用者须在发行版中包含版权声明和原许可协议声明,但这个发行版开源与否、商业化与否均由使用者自行决定,开源作者并不干涉。

而这次的事件就是由于在遵循 MIT 的项目中使用了部分 GPLv2 的代码。

开源许可协议并不兼容

上周三,shared-mime-info 软件库的维护者 Bastien Nocera 告知 mimemagic 库的维护者 Daniel Mendler:mimemagic 中包含了 shared-mime-info 的代码。不巧的是,mimemagic 库采用的是 MIT 许可证,而 shared-mime-info 遵循的是 GPLv2许可证,两者并不兼容

Nocera 在 Issues 的帖子中写道:“使用 GPL 文件作为源代码会让你的整个代码库成为衍生代码,因而需要使其全部采用 GPL 许可证,所以我认为在有人在纯 MIT 代码库或闭源应用程序中使用它之前,改正这个问题非常重要。”

图片

得知此事之后,Mendler 向 Nocera 表示感激,随后立刻将 mimemagic 的最新版本0.4.0和0.3.6从 MIT 转移至 GPLv2,并从 Ruby 开发者使用的软件包注册表 RubyGems.org 上撤回了之前的版本。此外,他还存档了 mimemagic 的 GitHub 存储库,表示此后不再支持被积极开发。

mimemagic 维护者的动作之快,令开源许可顾问 Paul Berg 都不禁赞赏:“mimemagic 维护者令人钦佩的是,一旦发现问题,他们就会做出反应,而不是对此保持沉默并让问题继续存在。”

然而,这件事情并没有就此结束,它引发了一场规模庞大、难以解决的混乱。

Ruby on Rails 都受到影响

截止目前,这件事影响了175个软件包,涉及到578404个不同的软件存储库,其中就包括Web 开发框架 Ruby on Rail,因为它使用了下架的 mimemagic 0.3.5 版本作为依赖项。

图片

目前,Rails 团队正在研究替换方案,由于 mimemagic 主要是 mime 类型数据映射数据库,因此 Rails 可能会考虑采用 2-clause BSD 许可的 libmagic 或 mime 数据的 Ruby 转换,但不论哪种方式实现起来都并非易事。

对此,Berg 还提出了一种可能——将 Rails 从 MIT 改为采用 GPLv2协议。不过考虑到使用 MIT 许可证的 Rails 的广泛使用,众多基于此框架开发的应用程序必定没有遵守 GPL 协议,因而此方案会为这些项目带来巨大影响,并不可行。

Berg 感慨道:“无论如何,鉴于 Rails 的受欢迎程度,它对行业至关重要,因此在短时间内解决此问题可能将是一份不小的工作。”

另外,除了 Rails 之外的那50多万个项目也并非是立即受到影响,只是之后任何尝试获取从 RubyGems.org 撤下的 mimemagic 版本的构建过程都会失败,除非在此之前就已经实现了依赖缓存机制。因此目前所有使用 mimemagic 的软件项目都面临采用 GPLv2协议带来的影响。

上周四,mimemagic 团队恰好印证了 Berg 的建议“mimemagic 可以尝试替换代码中的 GPL 部分,保留其 MIT 许可证”,撤回0.3.6和0.4.0版本,更新了0.4.1版本,该版本恢复了 MIT 许可证并删除了 GPL 相关的代码——the Freedesktop.org Shared Mime Types 数据库,不过现在用户必须自己提供 mime 类型数据库了。

网友:我非常不喜欢 GPL

这件事的波及范围较广,因此众多网友对此也进行了热议。

评论1:

对于不太关注自由/开源软件的人来说,这种类型的问题令人沮丧。当然,许可证很重要,但是普通用户只是想让事情正常运行。

图片

评论2:

我真的非常不喜欢 GPL。或者更确切地说,我非常非常不喜欢那些对“衍生”的意思有不合理且笼统想法的人。

图片

| 纠错

这篇文章对你有价值吗?