写点什么

因许可证不兼容,50 万 + 项目受到影响,Rails 替换了出问题的库

2021 年 3 月 31 日

因许可证不兼容,50 万+项目受到影响,Rails 替换了出问题的库

上周,一个名为 mimemagic 的 Ruby 库因开源许可证不兼容的问题导致 50 万 + 项目陷入混乱。


上周三,shared-mime-info 软件库的维护者 Bastien Nocera 给 Ruby 库 mimemagic 的维护者 Daniel Mendler 发送了消息:“你之前交付的 mimemagic 库采用了我的代码,使用了不兼容的软件许可证。”


shared-mime-info 库是在 GPLv2 许可证下授权的 ,而 mimemagic 是在 MIT 许可证下授权的,事实上这两种开源许可确实是不兼容的。Nocera 在 GitHub 的 Issues 上发帖:“使用 GPL 文件作为源文件,会使整个代码库都变成衍生代码,并且全部代码都应遵循 GPL 许可,所以如果有人在纯 MIT 代码库中或者是闭源应用程序中使用了 GPL 代码,应该及时纠正这个问题。”


得知此事之后,Mendler 先是向 Nocera 表示了感谢,并将最新的 0.4.0 和 0.3.6 版本移到 GPLv2 下,并从包注册表 RubyGems.org 上撤销了之前发布的版本,将 mimemagic GitHub 代码库存档。


虽然补救动作比较及时,但 Ruby on Rails 由于依赖 mimemeagic 0.3.5 仍然受到了影响。同时,还有 172 个其它软件包、共 577148 个不同的软件仓库也受到了影响。当然,并不是所有项目都会立即受到影响,但是任何试图从 RubyGems.org 获取 mimemagic 已撤销版本的构建过程都会失败,除非之前就已经实现了依赖缓存。

如何解决?


面对已经发生的开源许可不兼容的问题,我们应该如何解决呢?开源许可顾问 Paul Berg 表示:“这件事对于 Rails 造成了很大的影响。目前,有很多应用程序都是使用 Rails 开发的,由于 Rails 之前采用的是较为宽松的开源许可 MIT,所以这些应用程序自然不可能遵守 GPL 的条款。如果,我们将 Rails 改为采用 GPL 许可,那么成千上万的团队都可能要做出调整,这是不切实际的,我们必须寻找其它的办法。”


Ruby on Rails 团队讨论了很多解决方案,例如使用替代产品,比如 2-clause BSD 授权的 libmagic 或实现一个 mime 数据库的 Ruby 版本,但这些方法的工作量很大。


上周四,mimemagic 发布了 0.4.1 版本,删除了 GPL 覆盖的代码,恢复了 MIT 许可,用户现在必须自己提供 mime 类型数据库。对于 0.3.6 和 0.4.0 版本的撤销,许多人感到遗憾。


上周五,Rails 团队经过讨论最终决定将 mimemagic 换成另一个名为 Marcel 的库。Rails 5.2.5、6.0.3.6 和 6.1.3.1 发布了带有 ActiveStorage 服务的修订版,用 Marcel 1.0.0 取代了它的 mimemagic 依赖。


Basecamp 的开发人员 George Claghorn 在发布新版本的博客文章中解释说:“在 1.0.0 之前,根据 MIT 许可证的条款发行的 Marcel(和 Rails 一样)间接依赖在不兼容的 GNU 通用公共许可证下发布的 mime 类型数据。而 Marcel 1.0.0 则是直接打包从 Apache Tika 改编的 mime 类型数据,这些数据是在许可且兼容的 Apache 许可证 2.0 下发布的。”


要做到这一点需要费一些功夫。Marcel 本质上是 mimemagic 的包装,因此它的某些部分必须经过修改才能被 MIT 许可。现在,Marcel 的 mime 签名数据表(称为魔术数字签名)来自 Apache Tika,因此不需要遵循 GPLv2。

后记:开源许可的兼容性


目前经过 Open Source Initiative(OSI)认证的开源许可证共有 80 余种。中国信通院云计算与大数据研究所开源运营主管郭雪将这些开源许可证根据使用条件的不同,分为了四类:开放性开源许可证、弱传染型开源许可证、传染型开源许可证和强传染型许可证。


  • 开放性开源许可证是最基本的类型,用户可以修改代码后闭源。常见的许可证包括:MIT、BSD、Apache 等;

  • 弱传染型开源许可证是指如果一个软件包含该协议下部分代码,完全发布时某些部分必须适用该许可证,其它部分可在其它写协议下发布。常见的许可证包括:LGPL、MPL、EPL 等。

  • 弱传染型开源许可证明确修改版本必须以同一许可证发布,如果一个软件包含该协议下的代码,完全发布时必须作为整体适用该协议。常见的许可证为 GPL;

  • 强传染型许可证在传染型许可证要求的基础上,还要求使用开源软件提供云服务时也必须提供源代码。常见的许可证为 AGPL。


当一个开源软件使用了一个许可证,而你想把它的代码整合到你发布的开源项目中时,我们应该如何判断两个许可证的兼容性呢?大家可以参考信通院发布的这张图:



参考链接:


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

2021 年 3 月 31 日 14:11639

评论

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

“闭关修炼”这么久,吃透这些“微服务”笔记,足够面试涨10K

Java成神之路

Java 程序员 架构 面试 编程语言

吊!设计模式全解:6大设计原则+23种设计模式+设计模式PK+设计模式混编

Java架构之路

Java 程序员 架构 面试 编程语言

关于昆明市政协、市统战部、民革昆明市委赴云南坤艮盈科技有限公司(商务部CECBC区块链专委会秘书处云南办事处)调研指导工作

CECBC区块链专委会

云南发展

编写令人愉悦的API接口(一)

陈云轩

Java 程序设计 API APi设计

区块链矿机系统开发现成案例

系统开发咨询:I76-883I-5I52 邓森

LeetCode题解:92. 反转链表 II,迭代,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

FastAI:滴普技术荟:某工业产品内部结构尺寸图像测量和缺陷检测分析

滴普科技2048实验室

目标检测 图像处理 缺陷检测 AI测量 图像检测

Java 细粒度锁续篇

rookiedev

Java 多线程 加锁

使用 Helmfile 解放你的 Helm Chart

郭旭东

云原生 Helm

号称大厂面试官的克星,“神仙版”Java面试宝典,“真”吊打大厂面试官

Java架构之路

Java 程序员 架构 面试 编程语言

规模化敏捷框架何从入手?这篇文章把SAFe讲透了!

华为云开发者社区

敏捷开发 框架 safe

让你的简历不落窠臼,精雕细镂写一份真正的技术简历(Python向)

刘悦的技术博客

Python 面试 简历优化 简历

远见而明察近观若明火|Centos7.6环境基于Prometheus和Grafana结合钉钉机器人打造全时监控(预警)Docker容器服务系统

刘悦的技术博客

Docker 高可用 监控 Prometheus 预警

数字货币交易所交易平台系统开发

系统开发咨询:I76-883I-5I52 邓森

拼多多技术3面(Java研发):幻影读+Redis+分布式缓存+锁机制

Java成神之路

Java 程序员 架构 面试 编程语言

用了这个评估优化LiteOS镜像利器,我有点飘...

华为云开发者社区

镜像 开发 环境配置

区块链商城APP系统开发|区块链商城软件开发

开發I852946OIIO

系统开发

假冒、诈骗、隐私安全,如何应对数字人民币的风险与挑战?

CECBC区块链专委会

货币

比特币的安全性到底有多高?

CECBC区块链专委会

比特币

FastAI:滴普技术荟:基于机器视觉的典型多目标追踪算法应用实践

滴普科技2048实验室

目标追踪 目标检测 追踪算法

学习笔记丨数据结构之二叉查找树

Liuchengz.

数据结构 C/C++ 数据结构与算法 高级数据结构

微服务架构太难了?那你可能还没掌握SpringBoot+SpringCloud+Docker+RabbitMQ

Java架构之路

Java 程序员 架构 面试 编程语言

JVM 的运行时数据区域分布

rookiedev

Java JVM

区块链农场游戏系统开发软件定制

系统开发咨询:I76-883I-5I52 邓森

Ribbon使用及其内核原理剖析

程序员Fox

京东三面凉凉:java+spring+jvm+kafka+微服务等一个都讲不清

Java成神之路

Java 程序员 架构 面试 编程语言

2020中国 .NET开发者大会精彩回顾:葡萄城高性能表格技术解读

Geek_Willie

GCExcel 中国 .NET开发者大会 表格技术

腾讯T4架构师:刷3遍以下面试题,你也能从小公司成功跳到大厂

Java架构之路

Java 程序员 架构 面试 编程语言

转型项目经理?

escray

面经 面试经历 101次面试 七日更 十日谈

总结近期腾讯+阿里+百度Java岗高频面试题,提问率高达98%,看到这篇文章基本offer稳了

Java成神之路

Java 程序员 架构 面试 编程语言

区块链矿机挖矿系统开发软件技术

系统开发咨询:I76-883I-5I52 邓森

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

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

因许可证不兼容,50 万+项目受到影响,Rails 替换了出问题的库-InfoQ