摘要:license,中文译为“许可证”。在开源世界里,license是具有法律效力的,通过选择相应的license,版权拥有者可以声称自己相应的权利,包括其他人使用、修改、引用、共享等一系列涉及版权的操作。

01 开源license,是啥?

场景:壮壮是一个程序员,他最近开发了一个小功能,并且将代码放到了github上。过了一段时间,壮壮发现,好多人引用他的代码,但没有声称他的著作权,壮壮觉得很气愤,且不理解:为什么大家这么不尊重我的劳动成果呢?所以他就问他的好朋友小源同学,小源同学了解情况后,告诉他:是因为你没有采用符合你需求的license啊!

license,中文译为“许可证”。在开源世界里,license是具有法律效力的,通过选择相应的license,版权拥有者可以声称自己相应的权利,包括其他人使用、修改、引用、共享等一系列涉及版权的操作。

实际上,目前国际上公认的开源许可证有80余种,如果对开源了解不多的人,确实会觉得仅许可证一项就很复杂,但在实际使用许可证时,我们可以将使用场景归纳一下,并且将一些常用的许可证种类列举并解释,就极大的方便开发者选用合适的许可证了。下面一道就梳理一下那些常用的许可证~

02 开源license,咋用?

故事:Stallman是自由软件之父,他在上世纪八十年代开发GNU系统时,创造了Copyleft一词,用以区分商业公司copyright。实际上,在上世纪七、八十年代,就已经有相当一部分开源许可证被发布出来,供开源软件选择使用。

如上图所示:Copyright是目前商业公司采用的版权保护办法,旨在杜绝用户之间通过复制、分发等形式,共享产品,造成商业利益的损失;

Public domain则属于另一极端,即在未声明任何license的情况下,著作者与著作物不存在任何关联。

我们所讲的开源license,则集中在Copyleft和Permissive两类情况中,具化来讲,可以理解为:

Copyleft:衍生代码必须开源,且采用相同的开源license;

Permissive:衍生代码不必开源,可采用不同的开源license;

所以,作为代码的生产者,无论是个人抑或是公司,可以确立自身在面对开源时的原则,进而能够确定自身所选定的license类型。

03 开源license,有哪些?

如前文所述,国际公认的开源license,有多达80余种,理解起来殊无必要。只要掌握常用的几类,在需要的时候,采用相应的license,即可解决许可证相关问题。

至于更多的时间精力,不如留给继续coding或者撩妹~

1GPL

全称为General Public License,是Stallman老爷子在鼓捣GNU时所采用的开源协议。GPL最特殊的一点在于:只要一个软件使用了GPL协议的产品,则该软件也必须采用GPL协议,即衍生或修改后的代码,不可用于闭源的商业软件销售和发布。

这种特性,使得GPL具有病毒的特性——传染性。但GPL的传染是为了所有相关代码能够开放,使更多人受益。

2BSD

全称为Berkeley Software Distribution,是一个较为宽松的开源协议,唯一关注的是保护代码作者的著作权要受到尊重,这给予使用者很大的自由度。在满足二次发布时需要声明原来代码的BSD协议及不将原作者/产品用作市场推广时,,使用者可以自由的使用、修改源码,甚至在源码基础上二次开发后进行商用发布和销售。

3MIT

全称为Massachusetts Institution of Technology,又名“X条款”,MIT与BSD较为类似,差异较小。仅提供版权保护和声明,即在二次开发后的发行版中,需要包含原许可证声明。

4MPL

全称为Mozilla Public License,是网景公司的Mozilla小组于1998年设计的软件许可证。该许可证介于GPL和BSD之间,是为了更好的平衡“开发者对源码的需求和他们利用源代码获得的收益”。比如MPL协议下,可以通过折中办法,隐藏具有商业诉求的源代码,为商用场景提供了许可。MPL协议规定较为详细,感兴趣的读者可以自行搜索该协议,作进一步的研究。

5Apache License 2.0

没错,该许可协议就是来自于大名鼎鼎的Apache Software Foundation,总体来说,该许可协议与BSD/MIT协议类似,属于比较宽松、商业友好的开源协议。只需要使用者在使用了该协议下的源代码后, 再发布后,依然带有对源代码的协议、商标、及其他作者规定的说明,即可。

6LGPL

全称为Lesser General Public License,亦称GPL V2,虽然它与GPL同出一处,但他具有不同性:LGPL 允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。但如果是修改LGPL的代码或者衍生的代码,则所有修改或衍生的代码,均需要遵循LGPL协议。

04 开源license,用哪个?

开源license,并没有严格地讲孰优孰劣,只有在根据实际的使用场景,才能明确开源license的最佳选择。

“道理我都懂,可还是过不好这一生”,那么不妨,我们从两个小故事中窥探开源license的真假浮沉吧~~

故事一

2016年5月,Facebook开源了自身的前端软件React,引来业界震动。

7月,Facebook在React开源许可协议中的附加专利条款开始引发争议。

11月,Facebook官方澄清附加专利条款,但并未获得认同,业界仍然忧心忡忡。

2017年7月,Apache基金会禁止使用遵循BSD+附加专利条款的jar包。

同时,中国互联网的一批企业开始意识到问题严重性,并且积极抵制该协议,并且寻求新的前端技术以替代React。

10月,Facebook迫于压力,宣布将react及其他一系列采用BSD+专利许可协议的软件改用MIT许可协议。

点评:BSD+专利许可协议的精髓是“如果你觉得Facebook侵犯了你的知识产权,你不能起诉Facebook;如果Facebook起诉你,那么你不能反诉,否则你就立即停止使用React”。

瞧瞧!小扎很精明嘛!

可惜!群众也不傻呀!

故事二

2009年,甲骨文宣布收购SUN公司。本来是一件正常的商业行为,但却有一个人坚决反对,他就是Michael Widenius——MySQL的创始人。可他为什么反对呢?

因为MySQL是SUN公司所有,一旦被收购,就将属于Oracle公司。而众所周知,Oracle和MySQL那可是死敌啊!MySQL的未来境遇,可想而知。于是Michael Widenius甚至发起了万人签名,提交请愿书,要求欧盟委员会否决这项交易。

当然,历史的进程已经表明:SUN还是被Oracle收购了;MySQL并没有因此而死掉;这又是为什么呢?

因为MySQL采用的是GPL协议,按照该协议:任何源码的衍生产品,如果对外发布,都必须采用相同的许可协议。即我们前边提到的“传染性”。也就是说,在MySQL已经被广泛采用的情况下,使用的GPL协议,反而成为了他最好的保护伞,因为即使Oracle公司废弃MySQL,其他企业或个人依然可以发布MySQL的最新版本和特性;从另外一个角度讲,Oracle公司舍不得MySQL的规模和技术,如果在此基础上进行修改,则二次发布的产品因为GPL协议的传染性,也不得不采用该协议,依然使得MySQL或者重生。

但如果MySQL一开始使用的是MIT/BSD等协议,那么Oracle很容易将MySQL并入自己的商业产品中,并且通过一系列新的特性和功能,使得开源版本被边缘化。

回过头看,开源协议之威力,竟至于斯!

05 写在最后:简单粗暴的选择你的开源协议

乌克兰程序员Paul Bagwell画了一张分析图,介绍了最为流行的几种开源license的实际使用情况。国内技术牛人汉化过来,贴在此处,供大家参考。

扒一扒开源世界有哪些licenses?的更多相关文章

  1. 扒一扒spring,dom4j实现模拟实现读取xml

    今天leadr提出需求,原来公司项目中读取解析xml文件的代码效率太低,考虑切换一种xml为数据封装格式与读取方式以提高效率.我这灵机一动spring对bean的依赖注入就是读取xml文件,可以尝试扒 ...

  2. 自定义View系列教程03--onLayout源码详尽分析

    深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Andr ...

  3. Javascrpt无刷新文件上传

    最近工作中遇到上传文件问题,主要需求是一步点击上传,兼容ie8+,当时用的dojox/form/uploader控件,这两天扒了一下源码,明白了原理拿出来分享一下. 总体思路如下: 1.对于支持XML ...

  4. Sea.js创始人玉伯的前端开发之路

    在Web应用程序的用户体验越来越被重视的今天,前端开发的地位也上升到了前所未有的高度,而随之而来的也有更多的挑战. 为了将前端开发者繁重的工作变得简单,框架应运而生.国内也不乏一些非常优秀的前端开发框 ...

  5. Java的JXL操作xls形式

    jxl这是一个韩国的写作java操作excel工具, 源世界中,有两套比較有影响的API可供使用.一个是POI,一个是jExcelAPI.当中功能相对POI比較弱一点.但jExcelAPI对中文支持非 ...

  6. 说说Request.Params[key]和Request[key]

    摘要 其实你一看到,就应该会想到,这个不简单吗,不就是服务端接收参数的一种方式吗?是的.在asp.net编程中,QueryString.Form.Cookie是三种比较常见的接收客户端参数的方式.Qu ...

  7. Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展

    本文由“猫爸iYao”原创分享,感谢作者. 1.引言 最近有个需求:评论@人(没错,就是IM聊天或者微博APP里的@人功能),就像下图这样:   ▲ 微信群聊界面里的@人功能    ▲ QQ群聊界面里 ...

  8. jQuery运行方式818

    我们平时打开JQ源码就会看到这么一段代码 (function (window, undefined) { //JQ代码 })(window) 有一点经验的朋友会知道这是js自执行函数 它的好处主要作用 ...

  9. Future接口和FutureTask类【FutureTask实现了Runnable和Future接口】

    Future API: public interface Future<V> { /** * Attempts to cancel execution of this task. This ...

随机推荐

  1. 记一次layui弹框关闭问题

    我在博客园记录过layui关于弹框关闭问题,文章为layui关闭弹出层,这次出现了特殊情况,之前是通过layer.closeAll()解决了这个问题,但是这次解决不了.而换成parent.layer. ...

  2. python相关资料链接

    后续的博客更新,会涉及到很多的python及python的框架相关的内容,这里将自己收藏的一些关于python相关资料的链接做一个整理,算是一个导航索引吧... PS:其中有些链接对应的技术团队文章, ...

  3. 解决IsEditable="True"的ComboBox在DataGrid中点击一次不能选中行的问题

    原文:解决IsEditable="True"的ComboBox在DataGrid中点击一次不能选中行的问题 此方法很笨拙,并不推荐使用!!! 此方法很笨拙,并不推荐使用!!! 此方 ...

  4. ReactJs入门教程-精华版

    原文地址:https://www.cnblogs.com/Leo_wl/p/4489197.html阅读目录 ReactJs入门教程-精华版 回到目录 ReactJs入门教程-精华版 现在最热门的前端 ...

  5. FineUI经典项目展示(2)基础管理系统(附在线演示)

    本系列<FineUI经典项目展示>文章将会集中展示一批使用FineUI(开源版).专业版.MVC版的经典项目. 如果你希望自己的FineUI项目出现在这个舞台,请到官网论坛提交申请: ht ...

  6. zookeeper-监控与优化-《每日五分钟搞定大数据》

    本文的命令和配置都是基于zookeeper-3.4.6版本.优化很多时候都是基于监控的,所以把这两个内容写在了一起,慢慢消化. 监控 简单地说,监控无非就是获取服务的一些指标,再根据实际业务情况给这些 ...

  7. 面试 12:玩转 Java 快速排序

    终于轮到我们排序算法中的王牌登场了. 快速排序由于排序效率在同为 O(nlogn) 的几种排序方法中效率最高,因此经常被采用.再加上快速排序思想——分治法也确实非常实用,所以 在各大厂的面试习题中,快 ...

  8. 编剧小记 — Contour

    前言 Contour 是一款比较优秀的编剧辅助软件,按理说这篇文章应该归类到mac小记中,但其操作非常简单,基本上以写作提示为主.只怪所有提示都是英语,而且很多,每次使用打开 Contour 个别单词 ...

  9. 升级NGINX支持HTTP/2服务端推送

    内容概览 NGINX从1.13.9版本开始支持HTTP/2服务端推送,上周找时间升级了下NGINX,在博客上试验新的特性. 升级工作主要包括: 升级NGINX 修改NGINX配置 修改wordpres ...

  10. 网络编程-TCP/IP

    TCP/IP五层模型讲解(2分) 我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议 就理解了整个互联网通信的原理. 首先,用户感知到的 ...