MIT和GPL到底是怎么兼容的
开源许可证这事,说简单也简单,说复杂也复杂,有些细节问题,一不小心,就容易给绕进去。
前段时间我就遇到一个问题:说两个许可证兼容,到底是在说什么?又如何评判?
比如两个最常见的许可证: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种可能:
C很大,主要成分是B,仅仅把A当作一个模块用。
作者写了一个很小的B,调用了很大的A。
作者直接在A里面改了一点东西,这点东西叫B。
这些情况虽然看上去很不一样,但从许可证的角度看,本质上是一样的,都是A+B=C。
那么,C用什么发布?也有3种可能:
C用GPL发布
C用MIT发布
C用其他协议发布,甚至放到公共空间。
哪种可以,哪种不行?我的解答是:
C可以用GPL发布,因为MIT允许这么干。
C不能用MIT发布,因为GPL不允许自己的衍生品用MIT发布。
想用其他许可证,要具体分析,用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到底是怎么兼容的相关推荐
- Github常用License总结(MIT/Apache/GPL)
MIT: 比较宽松的许可证是 MIT 许可证,只要用户在项目副本中包含了版权声明和许可声明,他们就可以拿你的代码做任何想做的事情,你也无需承担任何责任. from: https://www.zhihu ...
- [转]开源协议MIT、GPL、LPGL、BSD、MIT的区别
如果你认为本系列文章对你有所帮助,请大家有钱的捧个钱场,点击此处赞助,赞助额0.1元起步,多少随意 声明:本文只用于个人学习交流,若不慎造成侵权,请及时联系我,立即予以改正 锋影 email:1741 ...
- 从转载阿里开源项目 Egg.js 技术文档引发的“版权纠纷”,看宽松的 MIT 许可该如何用?
作者 | 苏宓.彭慧中 出品 | CSDN(ID:CSDNnews) 开源迅速发展的这两年,很多内部问题逐渐凸显出来,如安全.版权.协议使用等. 近日,来自V2EX社区中一位开发者 @an168ban ...
- MIT,Apache许可证是什么,看完这条你就懂了
MIT许可证(The MIT License)是许多软件授权条款中,被广泛使用的其中一种.与其他常见的软件授权条款(如GPL.LGPL.BSD)相比,MIT是相对宽松的软件授权条款. MIT与GPL. ...
- 把 GPL 视作“病毒”?请停止污名化 GPL
整理 | 彭慧中 责编 | 屠敏 出品 | CSDN(ID:CSDNnews) GPL是最著名的自由软件许可协议之一,在开源热度高涨的今天,围绕它的话题讨论络绎不绝.就在5月13日,软件自由保护协会( ...
- win11不兼容很多游戏?win11不兼容哪些游戏
很多用户升级win11系统之后,最担心的就是win11兼容性不强,很多游戏都玩不了.那到底win11不兼容哪些游戏?下面小编就来给大家讲讲. win11很多游戏不兼容 1.其实win11系统并没有那么 ...
- 跟老男孩学 Linux 运维:Web 集群实战
内容简介 本书针对中小规模网站集群的搭建.部署.优化进行了详细讲解,全书可分为三大部分,其中第一部分讲的是 Linux 相关的基础且重要的知识,第二部分针对当下流行的 Web 环境架构(LNMP)的搭 ...
- 第1章 Linux系统介绍与环境搭建准备
第1章 Linux系统介绍与环境搭建准备 本章以操作系统的介绍作开篇,首先介绍操作系统的基础概念以及操作系统的原理:然后带领读者了解Unix/Linux的诞生和发展史,以及市面上常见的Unix/Lin ...
- 2022 CCF中国开源大会会议通知(第四轮)
一.会议简介 2022 CCF中国开源大会(CCF ChinaOSC)拟于2022年8月20日至21日在陕西省西安高新国际会议中心召开.大会由中国计算机学会(CCF)与开放原子开源基金会主办,CCF开 ...
最新文章
- Spring Cloud Alibba教程:Sentinel的使用
- 如何使用windbg在驱动加载时下断
- AI类人工智能产品经理的丛林法则
- 德勤:95%的受访公司将在2019年投资区块链
- java date 转换calendar_Java中日期格式(String、Date、Calendar)的相互转换
- C#中POST数据和接收的几种方式
- Nginx 基础 ( 二)
- Qt for Android 开发大坑
- Vendor Prefix:为什么需要浏览器引擎前缀
- 【转载】SQL 标量函数-----字符串函数 之二 去空格函数 LTRIM() 、RTRIM()
- 基于深度学习的数字识别GUI的设计
- 学习web前端技术的笔记,仅供自己查阅备忘,移动对font-size的控制(并非原创)...
- QT的UI界面效果预览快捷键
- 大话设计模式之爱你一万年:大话设计模式之爱你一万年由来
- 英文和中文在计算机的优劣,汉语和英语优缺点的比较(转载)
- 安装爱剪辑计算机丢失,windows10系统下安装“爱剪辑”软件的方法
- 智源大会人工智能的认知神经基础论坛精华观点 | 从「第一性原理」到大脑仿真...
- uniapp 手写canvas海报(兼容android/ios/h5/微信小程序)
- Windows资源管理器未响应解决方案
- Mac OSX 升级python six模块版本
热门文章
- [附源码]Nodejs计算机毕业设计宿舍人员签到管理系统Express(程序+LW)
- lammps案例:反应势reax模拟氢气燃烧过程
- 美联致美, 专属定制之美,让美丽不可复制
- 一个简洁的高自定义的H5播放器
- 13岁女孩被摁在马桶中暴打,面对霸凌,是妥协还是反抗? 警醒 !
- Emoji使commit产生双倍快乐
- Android--LayoutAnimation介绍
- 数据库系统概论期末复习二、关系数据库
- 爱立信实习总结之外企的企业文化
- realsense相机内参如何获得+python pipeline+如何通过python script获取realsense相机内参(windows下可用)