2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

  • 2021-03-31
  • 本文字数:1719 字

    阅读完需:约 6 分钟

因许可证不兼容,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-03-31 14:117304

评论

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

Go 语言快速入门指南:Go 转 JSON

宇宙之一粟

Go JSON序列化 1月月更

偷偷看了同事的代码找到了优雅代码的秘密

慕枫技术笔记

后端 1月月更

有传闻说,写好总结可以升职加薪?

程序人生

没有区块链,就没有元宇宙

CECBC

记一次安全漏洞分析

网络安全学海

黑客 网络安全 信息安全 渗透测试 安全漏洞

王者荣耀商城异地多活架构设计

ren

虚拟数字人发展提速 多家银行宣布“造人”

CECBC

基于Amazon ECS Fargate构建Apache Superset

亚马逊云科技 (Amazon Web Services)

存储

简讯:明道云近期荣获的三项荣誉

明道云

【SpringCloud技术专题】「Gateway网关系列」微服务网关服务的Gateway全流程开发实践指南(2.2.X)

码界西柚

SpringCloud SpringCloud Gateway API Gateway 1月月更

云原生训练营毕业总结

9527

Salesforce架构师的10大原则

俞凡

架构 大厂实践 Salesforce

2021年行摄回忆录

穿过生命散发芬芳

盘点2021 1月月更

模块九作业:设计电商秒杀系统

危险游戏

架构实战营

大画 Spark :: 网络(2)-下篇-通过网络收取消息的过程

dclar

大数据 spark 源代码 Spark 源码

架构实战营 - 毕业设计

随风King

「架构实战营」

如何保证消息消费时的幂等性?

JavaEdge

1月月更

低代码实现探索(十八)流程中参数的初始化设计

零道云-混合式低代码平台

ReactNative进阶(十七):RefreshControl 组件实现刷新效果

No Silver Bullet

1月月更 ReactNative RefreshControl

毕业设计项目

panxiaochun

架构实战营

Weblogic-SSRF漏洞复现

喀拉峻

网络安全 安全 信息安全

Go编译原理系列5(抽象语法树构建)

书旅

Go 后端 编译原理 编译语言

三行代码下载抖音视频

你?

低代码实现探索(十九)低代码的意义

零道云-混合式低代码平台

关于项目中 Repository 层的思考

CRMEB

LabVIEW条形码识别(实战篇—5)

不脱发的程序猿

图像识别 机器视觉 图像处理 LabVIEW 条形码识别

加速数字经济发展,2022更需要云上创新的稳定器与推动力

脑极体

小白都能吃透 Java IOl 流,最骚最全笔记,没有之一!2️⃣

XiaoLin_Java

火狐浏览器一败涂地?

Jackpop

程序员的快乐,只需要这7款工具!

Jackpop

架构营模块九作业

GTiger

架构实战营

因许可证不兼容,50 万+项目受到影响,Rails 替换了出问题的库_开源_田晓旭_InfoQ精选文章