个人开发者到底选择GPL协议还是MIT协议?

为什么小米可以避开开源协议?

安卓是开源的,为什么华为还要自己造鸿蒙?

你知道史上最奇葩的开源协议吗?

这些问题,都将在这篇文章中找到答案。

开源,是很多个人开发者选择的道路。

开源不仅能够帮助整个生态共同进步,也能够帮助个人开发者提升技术和名气,这一点从vue就能看出来。

但是,开源的意思并不是没有规则,全部无条件的免费提供给别人用,必须要遵循一定的规则,这个规则就是开源协议(Open Source License)。

世界上的开源协议大概有上百种,但是常用的只有5、6种,网络上的很多文章只是笼统的介绍,并没有说清楚这些协议的关键区别,以及每种协议对开发者的好处和限制。

为了帮助开发者区别这些协议,这篇文章对常见的几种协议进行介绍,包括需要遵循的原则以及目前使用这些协议的代码库。

GPL-强制开源

GPL(GNU General Public License):GNU通用公共许可协议。

GPL协议的目的就是强制代码开源免费使用

其最大的特点就是“开源的传染性”。也就是说,假设某公司使用了具有GPL协议的代码库,那么他理论上也必须把自己的代码库开源。

注意,这里是理论上。

实际上,大公司可以有很多方法避开这个限制。

比如,2015年的时候,小米被指责违反了GPL协议,MIUI系统是基于Android开发的,而内核Linux遵循的是GPL协议,那么小米也必须对自己的MIUI系统进行开源。

但是小米方面给出的答复是“很快就会开源”。这个很快,就慢慢拖着,反正我也不否认未来会开源。

另外,大公司还会选择为自己维护一套闭源的商业代码。

比如最著名的AOSP (Android Open-Source Project) 和Android。

AOSP是开源的安卓系统,而Android这个词已经变成了谷歌的一个商标,以及附加了GMS等一些软件的大系统。

什么意思呢,我们认为开源的那套系统,实际上就像一个毛坯房,而真正附加了谷歌全家桶等软件的Android,是精装房,精装的部分是不开源的。

所以华为一定要自己基于AOSP开发一套操作系统,你要不这么干的话,只要谷歌禁止你使用Android,马上就死。

说个笑话,GPL协议没有限制你卖钱。

也就是说理论上,你可以把原汁原味的开源linux系统卖给别人,当然有没有买家就另说了。

LGPL-让公司能够白嫖代码卖钱

由于GPL协议的“开源传染性”,一些公司肯定无法接受将自己的代码开源出去,这还怎么赚钱呢?

于是出现了LGPL( GNU Lesser GPL),也就是限制更少(针对想闭源卖钱的公司)的GPL。

如果公司只是想白嫖某个LGPL协议的代码库,而不需要对其及进行修改,那就可以使用此协议。

具体来说就是。

如果使用动态链接LGPL代码库,则你不需要开源。

如果使用静态链接,则你可以通过封装一层的方式避免开源,可以简单理解为只需要开源直接调用LGPL库的那部分代码就可以了。

是不是有些难以理解,没关系,我们举个例子。

假设有一个LGPL库,名为LibA,现在你在源文件main.cpp中使用了此库,如下:

int main() {LibA.init();LibA.DoSomething();
}

按照LGPL协议,你的这个源文件必须要开源,因为它直接调用了LibA的代码。

如何避免呢?封装!

你再写一个封装文件wrapper.cpp,如下:

void my_libA_init() {LibA.init();
}
void my_libA_DoSomething() {LibA.DoSomething();
}

接下来,在你的main.cpp中调用你的封装文件,相当于间接调用LibA:

int main() {my_libA_init();my_libA_DoSomething();
}

那么,你只需要开源wrapper.cpp,而不需要开源main.cpp了,这样就可以隐藏上层逻辑,也就能够作为商业软件卖钱了。

著名的GUI开发框架Qt使用了LGPL协议。

MIT-受公司欢迎的宽松协议

MIT(The Massachusetts Institute of TechnologyLicense,麻省理工学院许可协议)是众多协议条款中,被广泛使用的其中一种。与其他常见的软件许可协议相比,MIT是相对宽松的软件许可协议。

MIT协议允许你任意的使用、复制、修改原MIT代码库,随便你卖钱还是开源,唯一需要遵循的原则就是在你的软件中声明你也使用的是MIT协议就行了

而很多的公司企业在选用开源产品的时候都首选MIT协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

UI框架VUE、脚本语言Lua使用的就是MIT协议。

BSD-别借我的名气做宣传!

BSD协议几经变种,和MIT协议区别已经不大,唯一的小区别是BSD要求开发者不能利用前人的名义做宣传。比如我不能以某某升级版,某某加强版的名义来宣传我的软件。

Apache-避免法律纠纷

MIT和BSD协议有一个特点:简洁

这个特点具有两面性。

一方面,作为个人开发者,可以放心的使用MIT或BSD协议而不太需要担心背后的法律风险。

另一方面,大公司在开源自己软件时,会担心由于“过度宽松”导致产生一些法律纠纷。

因此,Apache协议出现了。

在保持较为宽松的开源基础上,加上了一些避免法律冲突的限制。

比如,要求在每个许可文件中,必须保留再分发代码中的任何原始著作权、专利、商标等

因此,大公司往往倾向于使用Apache协议而不是稍微模糊的MIT协议。

百度的深度学习框架PaddlePaddle使用了Apache协议。

WTFPL-我不敢写全称的奇葩协议

如果你觉得上面的协议没一个自由的,你崇尚绝对的自由开源,那么这条协议就太适合你了。

WTFPL协议是目前最奇葩的协议,奇葩在两点。

第一点是,这个协议实际上没有任何内容,这里是这个协议的内容。

鉴于这里面敏感词太多我就不逐字翻译了。

大致意思就是:你想干什么就干什么吧,你可以随便改代码,你也可以随便改协议内容,。

第二个奇葩点在于。

这个协议是已经被认证了的协议......

你敢相信,这个奇葩协议是一个正儿八经的正规军。

现在,你搞清楚不同开源协议之间的区别了吗?

GPL、MIT、Apache...开发者如何选择开源协议?一文讲清根本区别!相关推荐

  1. GPL、MIT、Apache...开发者如何选择开源协议?一文讲清根本区别

    个人开发者到底选择GPL协议还是MIT协议? 为什么小米可以避开开源协议? 安卓是开源的,为什么华为还要自己造鸿蒙? 你知道史上最奇葩的开源协议吗? 这些问题,都将在这篇文章中找到答案. 目录 GPL ...

  2. 开源协议有哪些?如何选择开源协议?

    开源软件在追求"自由"的同时,不能牺牲程序员的利益,否则将会影响程序员的创造激情,因此世界上现在有 60 多种被开源促进组织(Open Source Initiative)认可的开 ...

  3. java license 开源_MinIO:一个基于Apache License v2.0开源协议的对象存储服务

    MinIO Quickstart Guide--快速入门 MinIO 是一个基于Apache License v2.0开源协议的对象存储服务.它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构 ...

  4. 一文讲清如何正确选择图表,学会后再也不会用错图表

    在工作中会发现很多人在做图表的时候,最容易出现错误的地方不是在对数据的处理上,而是在对图表的选择上.图表种类如此之多,什么场景下用什么图表展示最合适,确实是一个难题,一旦用了不合适的图表来表达数据,反 ...

  5. 【开源协议】关于6种开源协议的说明(GPL,LGPL,BSD,MIT,Apache)

    关于开源协议的说明 前言 开源协议分为 宽松型 和 著作权型. 如何选择? 开源协议(GPL,LGPL,BSD,MIT,Apache)的说明 1. GPL 2.LGPL 3. BSD开源协议 4.MI ...

  6. VNPY官方开源项目为什么不能选择MIT开源协议

    其他文章 <VNPY项目开源地址> https://gitcode.net/vnpy/vnpy <vnpy3.0新版策略自动生成回测文件功能代码解析> 众所周知,VNPY是采用 ...

  7. 开源协议是什么?有哪些?如何选择?

    开源软件在追求"自由"的同时,不能牺牲程序员的利益,否则将会影响程序员的创造激情,因此世界上现在有 60 多种被开源促进组织(Open Source Initiative)认可的开 ...

  8. 【全】可供选择的软件开源协议的罗列

    Public License List 罗列各种开源代码的公共协议以供选择.具体每一个协议的含义可以另外找教程文章或看官网原文,这里解决"都有什么"的问题. List of lic ...

  9. 从Facebook的React框架事件学习一下开源协议

    前言 前一阵子由于Facebook BSD+PATENTS License的原因,Apache项目禁止使用带该license的代码,引人注目的就是Facebook的React前端框架. 后来在知乎上看 ...

最新文章

  1. CKfinder2.0.2版本破解
  2. python做exe开发教程_python做exe开发教程
  3. oracle 计划中的view,执行计划里的view
  4. jQuery实现多条件筛选
  5. npm install出现问题:run 'npm audit fix' to fix them, or 'npm audit' for details(安装babel)
  6. Linux系统有od程序吗,Linux od命令
  7. 慕课网上的星级评分--学习视频后模仿实现
  8. linux下keepalived+nginx的负载均衡搭建
  9. Mentor软件盗版
  10. C语言ASCII码转换
  11. 《机器学习实战》--资料下载和运行环境
  12. 高项、高级项目管理师论文-成本管理
  13. 板块拥挤度的相对强度rps
  14. 中企动力助力亚美日化 打造互联网一站式综合服务平台
  15. Going Deeper with Convolutions——GoogLeNet论文翻译——中英文对照
  16. 使用 dfuse 无缝过渡到 EOSIO 1.8
  17. 文件上传漏洞总结(含原因+防御措施)+白名单+黑名单+内容、头+解析漏洞/修补方案
  18. 宽带波束形成-----恒定波束宽度设计
  19. 网络课笔记整理——物理层
  20. 怎样用计算机算屋面的坡度,屋顶坡度的表示方法是什么

热门文章

  1. alfresco6.1(源码版) + onlyoffice安装部署
  2. 计算机科学体系介绍,计算机学科体系简介.ppt
  3. 方案:软件系统测试工作指南
  4. gamemaker学习笔记:读取JSON
  5. 三相永磁同步电机无感滑模观测控制TI源代码解析
  6. 微软 Win11 快捷键大全
  7. 2018-11-27
  8. php生成短链接:将数字转成字母,将字母转成数字
  9. MySql性能测试工具-sysbench
  10. python import 文件