开源许可证这事,说简单也简单,说复杂也复杂,有些细节问题,一不小心,就容易给绕进去。

前段时间我就遇到一个问题:说两个许可证兼容,到底是在说什么?又如何评判?

比如两个最常见的许可证:MIT和GPL-3.0,一个宽松,一个严格,它俩兼容吗?

如果兼容,为什么说是兼容的?

想了半天,才给弄明白。

一、什么是许可证兼容?

所谓兼容,就是两个东西放在一起会不会冲突,能不能放到一块。

比如:

软件A的许可证要求是:你用我的软件,就得每天跑超过3公里;

软件B的许可证要求是:你用我的软件,每天跑步不能超过1公里。

这两个软件,就不能组合到一起发布,因为他们的许可证要求是冲突的。

如果B的许可证要求改为:

你用我的软件,每天必须跑步超过5公里。

这就不冲突了,A和B就可以组合在一起,按照B的许可证发布了。

二、那么MIT和GPL兼容吗?

现在我们回到正题:

比如A软件是MIT的,B软件是GPL-3.0的(以下简称GPL),能不能把这两个软件放在一起形成C,然后发布?

注意,A和B存在调用关系,并不是毫无关系地放在一起。

我想了3种可能:

  1. C很大,主要成分是B,仅仅把A当作一个模块用。

  2. 作者写了一个很小的B,调用了很大的A。

  3. 作者直接在A里面改了一点东西,这点东西叫B。

这些情况虽然看上去很不一样,但从许可证的角度看,本质上是一样的,都是A+B=C。

那么,C用什么发布?也有3种可能:

  1. C用GPL发布

  2. C用MIT发布

  3. C用其他协议发布,甚至放到公共空间。

哪种可以,哪种不行?我的解答是:

  1. C可以用GPL发布,因为MIT允许这么干。

  2. C不能用MIT发布,因为GPL不允许自己的衍生品用MIT发布。

  3. 想用其他许可证,要具体分析,用AGPL也许可以(这在GPL-3.0第13条有说),但别的大概都不行。

三、分析一下

首先要搞明白:

C既是A的衍生品,也是B的衍生品。

因为从A看,是A加了B形成C;从B看,则是B加上了A形成C。

虽然有时会觉得不合常理,比如B有1000行,A只有10行,把C说是A的衍生品会让人直觉上感觉不对。

但从定义上讲,就是这样的,A完全可以认为自己从10行被改成了1010行。

既然C是衍生品,我们看看两个许可证对衍生品的要求:

MIT对衍生品的要求是:把A的版权和MIT声明体现出来。

GPL对衍生品的要求是:整个C要用GPL发布。

这两个要求冲突吗?

不冲突。你可以把C按照GPL发布,同时把A的版权和MIT声明体现出来。

四、涉及哪些具体条文?

请仔细看MIT协议,里面说了它的要求:

来自:https://opensource.org/licenses/MIT

如果不想看英文,可以看我写的中文版解读:从MIT协议谈契约精神

事实上,MIT就是要求显示版权,显示MIT协议(显示MIT的链接也行)

另外,注意MIT允许sublicense(分许可),这样,C(包括里面的A)按照GPL发布就有合理依据了。

再仔细看GPL协议,按照第2条,GPL是不允许sublicense的,也即衍生品只能用GPL:

来自:https://spdx.org/licenses/GPL-3.0-only.html

按照第5条,衍生品的整体要按照GPL发布,这样,C需要按照GPL发布,作为C里面的A,也是如此。

作为一种例外,第13条说,GPL可以和AGPL兼容,也即GPL-3.0的软件和AGPL-3.0的软件结合起来,整体可以按AGPL-3.0发布。

希望更深入了解的,可以看我写的人话解读GPLv3。

五、那么,我应该怎么做?

当你把A(使用MIT)和B(使用GPL)合并起来,形成C以后。

发布C时,你要显著地在文档或代码里面体现以下内容。

1、说明C是用GPL授权的,比如用LICENSE或COPYING文件来声明。

2、说明C用了A,说明A的版权,以及A是用MIT协议的。一方面要在文档里面说,另一方面,在代码里面也要保留A的版权和MIT协议。

这样做,不违背MIT,也不违背GPL。别人看到了,如果想用C,就遵循GPL;如果只是想用A,遵循MIT就可以了。

六、实例

我在GitHub上找到一个叫netdata的软件,就符合本文讨论的情况。

该软件的位置在:

https://github.com/netdata/netdata

它是用GPL发布的,但里面使用的一些第三方软件是MIT的。

在该软件仓库的首页上,以及根目录的LICENSE文件中,说明了其许可证是GPL3。但同时提到该软件用了一些第三方软件。

打开上面写的第三方许可(third party licenses),可以看到里面清晰注明了这些第三方软件的出处、版权和许可信息:

上面是部分截图,事实上一共有30多个软件,大多数都是MIT的。

在代码里面,netdata的作者也不敢马虎,比如对d3pie这个软件的引用,代码头部是这样的:

这就不会有什么问题。

致谢:我的朋友孙振华对此文形成提供了很多帮助。

另:本文只是说明了MIT和GPL-3.0的兼容性,如果想了解更多许可证之间的兼容关系,回复“兼容”,获取信通院牵头编写的“开源许可证兼容性指南”。

文|卫剑钒

MIT和GPL到底是怎么兼容的相关推荐

  1. Github常用License总结(MIT/Apache/GPL)

    MIT: 比较宽松的许可证是 MIT 许可证,只要用户在项目副本中包含了版权声明和许可声明,他们就可以拿你的代码做任何想做的事情,你也无需承担任何责任. from: https://www.zhihu ...

  2. [转]开源协议MIT、GPL、LPGL、BSD、MIT的区别

    如果你认为本系列文章对你有所帮助,请大家有钱的捧个钱场,点击此处赞助,赞助额0.1元起步,多少随意 声明:本文只用于个人学习交流,若不慎造成侵权,请及时联系我,立即予以改正 锋影 email:1741 ...

  3. 从转载阿里开源项目 Egg.js 技术文档引发的“版权纠纷”,看宽松的 MIT 许可该如何用?

    作者 | 苏宓.彭慧中 出品 | CSDN(ID:CSDNnews) 开源迅速发展的这两年,很多内部问题逐渐凸显出来,如安全.版权.协议使用等. 近日,来自V2EX社区中一位开发者 @an168ban ...

  4. MIT,Apache许可证是什么,看完这条你就懂了

    MIT许可证(The MIT License)是许多软件授权条款中,被广泛使用的其中一种.与其他常见的软件授权条款(如GPL.LGPL.BSD)相比,MIT是相对宽松的软件授权条款. MIT与GPL. ...

  5. 把 GPL 视作“病毒”?请停止污名化 GPL

    整理 | 彭慧中 责编 | 屠敏 出品 | CSDN(ID:CSDNnews) GPL是最著名的自由软件许可协议之一,在开源热度高涨的今天,围绕它的话题讨论络绎不绝.就在5月13日,软件自由保护协会( ...

  6. win11不兼容很多游戏?win11不兼容哪些游戏

    很多用户升级win11系统之后,最担心的就是win11兼容性不强,很多游戏都玩不了.那到底win11不兼容哪些游戏?下面小编就来给大家讲讲. win11很多游戏不兼容 1.其实win11系统并没有那么 ...

  7. 跟老男孩学 Linux 运维:Web 集群实战

    内容简介 本书针对中小规模网站集群的搭建.部署.优化进行了详细讲解,全书可分为三大部分,其中第一部分讲的是 Linux 相关的基础且重要的知识,第二部分针对当下流行的 Web 环境架构(LNMP)的搭 ...

  8. 第1章 Linux系统介绍与环境搭建准备

    第1章 Linux系统介绍与环境搭建准备 本章以操作系统的介绍作开篇,首先介绍操作系统的基础概念以及操作系统的原理:然后带领读者了解Unix/Linux的诞生和发展史,以及市面上常见的Unix/Lin ...

  9. 2022 CCF中国开源大会会议通知(第四轮)

    一.会议简介 2022 CCF中国开源大会(CCF ChinaOSC)拟于2022年8月20日至21日在陕西省西安高新国际会议中心召开.大会由中国计算机学会(CCF)与开放原子开源基金会主办,CCF开 ...

最新文章

  1. Spring Cloud Alibba教程:Sentinel的使用
  2. 如何使用windbg在驱动加载时下断
  3. AI类人工智能产品经理的丛林法则
  4. 德勤:95%的受访公司将在2019年投资区块链
  5. java date 转换calendar_Java中日期格式(String、Date、Calendar)的相互转换
  6. C#中POST数据和接收的几种方式
  7. Nginx 基础 ( 二)
  8. Qt for Android 开发大坑
  9. Vendor Prefix:为什么需要浏览器引擎前缀
  10. 【转载】SQL 标量函数-----字符串函数 之二 去空格函数 LTRIM() 、RTRIM()
  11. 基于深度学习的数字识别GUI的设计
  12. 学习web前端技术的笔记,仅供自己查阅备忘,移动对font-size的控制(并非原创)...
  13. QT的UI界面效果预览快捷键
  14. 大话设计模式之爱你一万年:大话设计模式之爱你一万年由来
  15. 英文和中文在计算机的优劣,汉语和英语优缺点的比较(转载)
  16. 安装爱剪辑计算机丢失,windows10系统下安装“爱剪辑”软件的方法
  17. 智源大会人工智能的认知神经基础论坛精华观点 | 从「第一性原理」到大脑仿真...
  18. uniapp 手写canvas海报(兼容android/ios/h5/微信小程序)
  19. Windows资源管理器未响应解决方案
  20. Mac OSX 升级python six模块版本

热门文章

  1. [附源码]Nodejs计算机毕业设计宿舍人员签到管理系统Express(程序+LW)
  2. lammps案例:反应势reax模拟氢气燃烧过程
  3. 美联致美, 专属定制之美,让美丽不可复制
  4. 一个简洁的高自定义的H5播放器
  5. 13岁女孩被摁在马桶中暴打,面对霸凌,是妥协还是反抗? 警醒 !
  6. Emoji使commit产生双倍快乐
  7. Android--LayoutAnimation介绍
  8. 数据库系统概论期末复习二、关系数据库
  9. 爱立信实习总结之外企的企业文化
  10. realsense相机内参如何获得+python pipeline+如何通过python script获取realsense相机内参(windows下可用)