提到开源,不少人都认为是免费自由,其实并非全然如此。 每个开源工作者的追求不同。有的人只想专心写代码,不约束其他人对代码的使用范围,开源闭源皆可;有的人则希望其开源项目能得到更广泛的分享与改进,使用其源码的人也能坚持开源。 鉴于这种多样性的追求,因此,为了维护开源工作者权益,保持其创作热情,开源许可协议(开源许可证)就此诞生,用于规定使用开源项目时的权利及责任,即告诉使用者应该做什么,不应该做什么。 在众多开源许可协议中,彼此之间是否可以兼容也不尽相同。上周三就发生了一起因开源许可协议不兼容引发的一场混乱:一个名为mimemagic的Ruby库因包含了与其自身许可证不兼容的部分代码,导致包括RubyonRails在内的五十多万个项目受到影响。 MITGPL 在详谈之前,我们需要先了解与这起事件有关的两种开源协议:MITGPL。 GPL GNUGPL,全称GNUGeneralPublicLicense,即GNU通用公共许可证,简称为GPL,为人熟知的Linux正是采用了GPL协议。 GPL协议在于对代码开源、免费使用和引用、修改,对衍生代码开源及免费使用,但不允许修改后或衍生的代码用作闭源的商业软件。 另外,GPL协议还具有较为特别的“传染性”:无论代码多少,但凡引用、修改遵循GPL代码的软件都必须开源和免费,并且要采用同样的GPL许可证。 MIT 相对而言,MIT则是较为宽松的许可协议。 MIT许可证之名源自麻省理工学院(MassachusettsInstituteofTechnology,MIT),因此又称麻省理工学院许可证,最初由麻省理工学院开发。 采用该协议的开源作者一般只想保留版权,因此没有任何其它的限制。即无论是以二进制还是源码形式发布,使用者须在发行版中包含版权声明和原许可协议声明,但这个发行版开源与否、商业化与否均由使用者自行决定,开源作者并不干涉。 而这次的事件就是由于在遵循MIT的项目中使用了部分GPLv2的代码。 开源许可协议并不兼容 上周三,sharedmimeinfo软件库的维护者BastienNocera告知库的维护者DanielMendler:中包含了的代码。不巧的是,库采用的是MIT许可证,而遵循的是GPLv2许可证,两者并不兼容。 Nocera在Issues的帖子中写道:“使用GPL文件作为源代码会让你的整个代码库成为衍生代码,因而需要使其全部采用GPL许可证,所以我认为在有人在纯MIT代码库或闭源应用程序中使用它之前,改正这个问题非常重要。” 得知此事之后,Mendler向N表示感激,随后立刻将mimemagic的最新版本0。4。0和0。3。6从MIT转移至GPLv2,并从Ruby开发者使用的软件包注册表RubyGems。org上撤回了之前的版本。此外,他还存档了mimemagic的GitHub存储库,表示此后不再支持被积极开发。 维护者的动作之快,令开源许可顾问PaulBerg都不禁赞赏:“mimemagic维护者令人钦佩的是,一旦发现问题,他们就会做出反应,而不是对此保持沉默并让问题继续存在。” 然而,这件事情并没有就此结束,它引发了一场规模庞大、难以解决的混乱。 RubyonRails都受到影响 截止目前,这件事影响了175个软件包,涉及到578404个不同的软件存储库,其中就包括Web开发框架RubyonRail,因为它使用了下架的0。3。5版本作为依赖项。 目前,Rails团队正在研究替换方案,由于mimemagic主要是mime类型数据映射数据库,因此Rails可能会考虑采用2clauseBSD许可的或mime数据的Ruby转换,但不论哪种方式实现起来都并非易事。 对此,Berg还提出了一种可能将Rails从MIT改为采用GPLv2协议。不过考虑到使用MIT许可证的Rails的广泛使用,众多基于此框架开发的应用程序必定没有遵守GPL协议,因而此方案会为这些项目带来巨大影响,并不可行。 B感慨道:“无论如何,鉴于Rails的受欢迎程度,它对行业至关重要,因此在短时间内解决此问题可能将是一份不小的工作。” 另外,除了R之外的那50多万个项目也并非是立即受到影响,只是之后任何尝试获取从RubyGems。org撤下的mimemagic版本的构建过程都会失败,除非在此之前就已经实现了依赖缓存机制。因此目前所有使用mimemagic的软件项目都面临采用GPLv2协议带来的影响。 上周四,团队恰好印证了Berg的建议“mimemagic可以尝试替换代码中的GPL部分,保留其MIT许可证”,撤回0。3。6和0。4。0版本,更新了0。4。1版本,该版本恢复了MIT许可证并删除了GPL相关的代码Freedesktop。orgSharedMimeTypes数据库,不过现在用户必须自己提供mime类型数据库了。 网友:我非常不喜欢GPL 这件事的波及范围较广,因此众多网友对此也进行了热议。 评论1: 评论2: