图片

整理 | 郑丽媛

出品 | 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。或者更确切地说,我非常非常不喜欢那些对“衍生”的意思有不合理且笼统想法的人。

图片

对于这件事,你有什么看法吗?欢迎评论区留言!

参考链接:

https://www.theregister.com/2021/03/25/ruby_rails_code/

https://github.com/mimemagicrb/mimemagic/issues/97

图片
在这里插入图片描述

Logo

20年前,《新程序员》创刊时,我们的心愿是全面关注程序员成长,中国将拥有新一代世界级的程序员。20年后的今天,我们有了新的使命:助力中国IT技术人成长,成就一亿技术人!

更多推荐