10月26号,了解如何7天上架一个语聊房应用 了解详情
写点什么

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:583337
用户头像
刘燕 InfoQ记者

发布了 697 篇内容, 共 224.3 次阅读, 收获喜欢 1340 次。

关注

评论

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

第一章-认识产品经理作业

阿珍爱上阿强

产品经理 JD 财务

Docker 教程(一):Docker 是什么

看山

Docker DevOps

容器 & 服务:K8s 与 Docker 应用集群 (三)

程序员架构进阶

Docker kubernet 容器化 28天写作 3月日更

前端抱怨API响应慢,我们后端该做些什么?

程序员小毕

源码 程序员 面试 后端 API

架构师训练营 4 期 第10周

引花眠

架构师训练营 4 期

人生如戏,戏如人生——敏捷剧本杀玩后感

Bruce Talk

敏捷 Agile

Prometheus+SpringBoot应用监控全过程详解

程序员小毕

Java 源码 程序员 面试 springboot

Android入门你值得拥有!手持4个大厂offer的我,附面试题答案

欢喜学安卓

android 程序员 面试 移动开发

程序员是如何解决问题的

ES_her0

28天写作 3月日更

第五次作业&总结

青葵

学习

一个程序员应怀揣武侠梦

DisonTangor

程序员

Wireshark数据包分析学习笔记Day4

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

迷宫算法(DFS)

大忽悠

3月日更

恋物志(三):“美丽到牙齿”的智能硬件圈地运动

脑极体

laravel的生命周期

一个大红包

28天挑战 3月日更

学习曾国藩:职场咸鱼的翻身之法

boshi

七日更 职业生涯

程序员成长第二十二篇:做任务分配时,要考虑员工的成长。

石云升

项目管理 程序员 28天写作 职场经验 3月日更

LeetCode题解:279. 完全平方数,动态规划,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

Python 环境搭建

依旧廖凯

Python 28天写作 3月日更

android面试!Android事件体系全面总结+实践分析,大牛最佳总结

欢喜学安卓

android 程序员 面试 移动开发

面试官:小伙子你给我说说MySql并发事务处理细节

程序员小毕

Java MySQL 程序员 面试 事务

SICP 习题解答 1.7

十元

SICP 习题解答 1.9

十元

python常用库简介

张鹤羽粑粑

28天写作 3月日更

SICP 习题解答 1.10

十元

LinqToExcel.Extend 源码分析

happlyfox

28天写作 3月日更

自动化测试环境搭建

IT蜗壳-Tango

IT蜗壳自动化 21天

真香!阿里大牛“亲码”千页Redis源码笔记,差距不止一点点

程序员小毕

Java redis 源码 架构 面试

SICP 习题解答 1.8

十元

【自动化】Day01

IT蜗壳

设计模式的5个常见问题及解决办法

乐天

设计模式

InfoQ 技术公开课【如何利用融云场景化 SDK 30分钟构建语聊房】

InfoQ 技术公开课【如何利用融云场景化 SDK 30分钟构建语聊房】

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