写点什么

Ruby 大“翻车”:代码库因许可证失误被下架,致 50 万个项目陷入混乱

2021 年 4 月 08 日

Ruby大“翻车”:代码库因许可证失误被下架,致50 万个项目陷入混乱

本文最初发表于 The Register,经原作者 Thomas Claburn 授权,InfoQ 中文站翻译并分享。


3 月 31 日,软件库 shared-mime-info 的维护者 Bastien Nocera 通知了 Ruby 库- mimemagic 的维护者 Daniel Mendler,该库包含了 Nocera 的代码,而它使用了一种不兼容的软件许可来发布 mimemagic。


shared-mime-info 库已经在GPLv2下获得许可,而 mimemagic 被列为MIT许可项目。


“使用一个 GPL 文件作为源文件,会让你的整个代码库成为一个衍生作品,使其全部成为 GPL,因此,我认为在有人将它用于纯 MIT 代码库或闭源应用之前,先解决这个问题,非常重要。”Nocera 在一个Issues 帖子中写道。


“现在迫切需要把 GPL 头重新添加到 shared-mime-info XML 文件。这是 tarball 发行版中用于合并转换的工具的一部分,但是在同一文件的 .in 版本中可见。”


Mendler 感谢 Nocera 的通知,并立即将最新版本 0.4.0 和 0.3.6移至 GPLv2 下,同时撤销了之前发布在 RubyGems.org 上的版本,rubygems 是 Ruby 开发者所用的软件包注册表。然后他将mimemagic 的 GitHub repo存档,这意味着它不再被积极地开发了。


遗憾的是,这一举动破坏了 Ruby on Rails 这个流行的 Web 开发框架,它包含了 mimemagic 0.3.5 作为依赖项。这也影响了其他 172 个软件包,其中包含了 577148 个不同的软件库。


并不是所有这些项目都会立即受到影响,但是,如果不实现依赖性缓存,任何从 RubyGems.org 获取已撤回版本的 mimemagic 的构建过程都将失败。


包含 mimemagic 的软件项目现在必须考虑包含 GPLv2 许可代码的影响,在某些情况下这可能是不能接受的。假如这样做在法律上和实践上可行,他们可以切换到 0.3.6 或 0.4.0 版本的库。


诸如由英国政府商业、能源和工业战略部运营的Web 应用FileStack CMS 的 Ruby SDK、基于 Rails 的可标记图片应用Danbooru等项目,都在考虑如何解决这一问题,这让人想起了 2016 年的Left-Pad 事件


因为 mimemagic 主要是一个 mime 类型数据映射的数据库,所以 Rails 团队正在考虑其他选择,包括 2-clause BSD 授权的libmagic或 mime 数据的 Ruby 转换。但是,要达到这个目标,还有很多事情要做。


至于其他人,Shopify 应用制造商 ASoft 的创始人Sergey Alekseev要求 Mendler保持 mimemagic repo 的活动状态,这样其他受影响的项目就可以在这里讨论它们的选择。


但是 Mendler 并不同意,他说:“Rails 的依赖关系无疑是影响最大的。要是我们能找到一个适合 Rails 的解决方案,并得到 Rails 团队的认可,那就更好了。”


开源许可顾问 Paul Berg 在一封电子邮件中对 The Register 表示,尽管目前形势艰难,但是似乎相关开发人员已经做好了准备。


“因为依赖的 mimemagic 库的维护者发现它包含 GPL 代码,他们就转而采用了 GPL 许可。”他说,“令人钦佩的是,一旦发现问题,他们就会做出反应,而不是对此保持沉默,让问题继续存在下去。”


“然而,这确实给 Rails 带来了一个重大问题,”Berg 说。“Rails 广泛用于 MIT 许可下的应用,MIT 许可是一种允许性许可。因为很多应用程序是使用 Rails 编写的,假定这些应用程序不受 GPL 版权保护,所以很有可能其中很多应用程序不符合 GPL 条款,因为它们在部署时没有考虑到这些条款。”


“所以,将 Rails 重新许可给 GPL,使 Rails 符合要求,这对成千上万的团队来说,很可能是一个巨大的变化,实际上不是一个可行的解决方案。遗憾的是,其他解决方案很可能并不容易。”


Berg 表示,mimemagic 可以尝试替换 GPL 部分代码,并保留其 MIT 许可。他说,另一个选择是 Rails 完全取代 mimemagic,前提是存在合适的替代方案。


“不管怎样,由于 Rails 的普及,它在行业中的重要性不言而喻,解决这一问题在短期内可能不会是一件小事。”他说。“我并不羡慕他们的处境。”


“这就解释了当你引入所有的依赖性和重用代码时,为什么一定要认真地列出它们,并努力确保这些依赖性的许可与你的意图相一致。这一点非常重要。”


最新情况:4 月 1 日,mimemagic 更新到了 v0.4.1,恢复了 MIT 许可,并删除了 GPL 覆盖的代码:theFreedesktop.org 共享的 Mime Types 数据库。现在用户必须自己提供。0.3.6 和 4.0 版本已经废除,这让很多人感到很沮丧。


作者介绍:


Thomas Claburn,居住在旧金山湾区,负责 The Register 的软件开发、DevOps、计算机安全等栏目。


原文链接:


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

2021 年 4 月 08 日 14:581640
用户头像
刘燕 InfoQ记者

发布了 554 篇内容, 共 173.8 次阅读, 收获喜欢 1053 次。

关注

评论

发布
暂无评论
发现更多内容

架构师训练营 1 期 - 第四周作业(vaik)

行之

极客大学架构师训练营

架构师训练营 1 期 - 第四周总结(vaik)

行之

极客大学架构师训练营

Spring学习笔记(一)手写一个简单的Spring

无语

Spring Framework

第 4 周 系统架构总结

bearlu

系统架构

第4周 作业一

bearlu

架构师训练营第 1 期 -week4

习习

spring-boot-route(十一)数据库配置信息加密

Java旅途

Java Spring Boot

Redis-技术专题-哨兵配置和原理

李浩宇/Alex

典型互联网公司使用的技术

happy

LeetCode题解:144. 二叉树的前序遍历,使用栈,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

详解「区块链」溯源

netkiller

区块链 防伪 超级账本 标签 区块链产品溯源

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?

knight

架構師訓練營 week4 作業

ilake

spring-boot-route(十二)整合redis做为缓存

Java旅途

Java redis Spring Boot

第四周作业

Geek_4c1353

极客大学架构师训练营

区块链支付系统开发源码,usdt承兑系统搭建

WX13823153201

区块链支付系统开发

go-zero流数据处理利器

Kevin Wan

go stream functional

甲方日常 27

句子

生活 工作 随笔杂谈 日常

浅析 Java 内存模型 三

朱华

Java volatile JMM

架构师训练营第4周作业

悠哉

浅析 Java 内存模型 二

朱华

Java JMM

数字人民币真的来了 六年历程全回顾

CECBC区块链专委会

数字货币 DCEP

区块链思维是赋能未来经济的关键思维

CECBC区块链专委会

区块链 经济 技术创新

第二周课后练习

大大猫

极客大学架构师训练营

第9周总结

Vincent

极客时间 极客大学

架構師訓練營 week4 總結

ilake

CPU 执行程序的秘密,藏在了这 15 张图里

小林coding

操作系统 计算机基础 计算机 编译器、程序语言、CPU 指令

架构师训练营 - 第四周作业

一个节点

极客大学架构师训练营

第9周作业

Vincent

极客时间 极客大学

架构师训练营 - 第四周总结

一个节点

极客大学架构师训练营

第三周课后练习

大大猫

极客大学架构师训练营

4月17日 HarmonyOS 开发者日·上海站

4月17日 HarmonyOS 开发者日·上海站

Ruby大“翻车”:代码库因许可证失误被下架,致50 万个项目陷入混乱-InfoQ