目前,开源软件被大规模的使用在生产环境,包括Linux,MySQL这些基础软件,以及各细分领域的专业软件,比如做大数据处理的hadoop/kafka/storm,搞机器学习的tensorflow等,可以说我们每天都在直接或间接的使用开源软件。使用开源软件就一定要遵循它的许可证,否则可能会面法律纠纷和行业谴责。
开源许可证是由一个叫做开放源代码促进会(open source Initiative,简称OSI)的组织颁发的,目前经过该组织认证的许可证有83种,但80%的开源软件使用的许可证不超过10种,如下图所示MIT、GPL、Apache和BSD这几个许可证占了大头,下面我给大家一一介绍下这些常见的许可证。
首先看下面这张网上比较流行的图,列出了几种主要许可证的关系,能否闭源是它们的主要区别,是否要求在修改开源代码后必须用文档记录下来也是一个重要特征,这里指出下这个图有一处错误(事实上,最左下角LGPL许可证要求对源代码的修改之处提供文档说明)。总体来讲,GPL开源很彻底,BSD和MIT两个最宽松。
首先看MIT,它是最受欢迎的,也是最宽松的许可证,接近一半的开源软件都采用了MIT。如果一个开源软件采用了MIT许可,我们在使用该软件时只需要满足两个条件:
1、必须包含该软件的版权声明,也就是说需要明确指出该软件的版权人;
2、必须包含MIT的License原文。
以下是某开源软件的MIT许可全文,非常的简单明了。如果基于这个软件做了一个新的软件并且给其他人使用,只需要在我们的License里复制粘贴这段许可证就可以为所欲为的使用。比如我们看某个软件有市场前景,可以修改源码然后封装在自己的产品中去销售,赚钱了也不用给原作者分红,不用担心有任何风险。
接下来看BSD,BSD分为2-Clause和3-Clause,2-Clause与MIT等价,3-Clause与MIT唯一的区别是它不能使用原始作者或者贡献者的名字来宣传,比如我们使用了谷歌BSD许可的开源软件改造之后做成自己的软件,宣传时不能带有谷歌的字样。使用BSD的软件比较出名的有Nginx和Redis等。
再看Apache许可证,它明确的指出了无限期授权给使用者软件的版权和专利权,不可撤回。也就是说我们一旦使用了该软件,就再也不用担心有人找上门来说侵犯版权和专利权,但我们不能侵犯软件的商标权,商标权是保留的。另外,这个软件要求程序员在每个修改别人代码的地方都写清楚修改人,修改内容和修改时间,也就是以许可证的方式规范程序员写代码一定要有注释。使用Apache许可的软件非常多,大数据处理很多软件都采用该协议,比如kafka,storm以及被阿里巴巴收购的flink等。
接下来看下GPL,它采用了一个叫做Copyleft的反版权概念,意思是说使用了GPL许可的软件,修改代码之后必须把修改后的源代码开放出来,不能将开源软件据为己有,我们把这个特性称为开源传染性。这个概念的逻辑出发点是我免费给你提供了源代码,那你拿我的代码去修改(优化)之后必须给我看你是怎么改的。所以在使用GPL许可的软件时要注意,假如我们的软件使用了很多组件,GPL开源软件只是我们软件很小的一部分组件,其他大部分代码都是我们自己的私有代码,这种情况下,GPL许可的开源传染性要求我们把产品的全部代码都免费开源出来,假如我们产品中有核心机密代码但被迫开源那我们就会面临很大的麻烦。
另外,GPL也是反专利的,License条款明确提到如果一个专利导致用户不能自由的使用软件,那么这个专利就是无效的,用户的自由超越了专利!
GPL的传染性规定了从作者开始,后面所有的代码都得开源,典型的代表是Linux,迫于GPL的规定,Linux的所有变种,比如Redhat,Centos,Ubuntu等都必须免费开源。
但也有个例外就是andriod,谷歌为了逃避GPL协议的规定可以说是费劲了心思。Linux的许可证里面一条是说通过类库的方式调用内核则不受GPL的限制,谷歌为此专门给安卓重写了blibc的类库来调用内核方法,摒弃了Linux自带的glibc类库,从而逃避了GPL的限制。所以现在我们看到各大安卓手机的厂商自己定制的操作系统都没有开源出来,不受GPL协议的限制,这得感谢谷歌的努力。
跟GPL类似,还有LGPL,这个许可证是弱传染性的,它规定通过类库引用的方式使用开源软件,则我们的软件可以不用开源,这样的话商业软件可以使用LGPL软件,且不用开源自己的代码。
还有个是AGPL,它可以说是专门针对云服务提供商制定的,一般来说,我们修改了开源软件并且再次分发出来的时候才会受许可证的限制,如果是我们自己内部使用则不受限制。但是AGPL则要求即使是自己使用开源软件,但如果用来提供云服务,那么我们的云服务的代码也必须全部免费开源。所以云服务提供商要慎重选择AGPL许可的软件,避免不必要的麻烦。
常用的开源许可证介绍完了。我们来总结一下,首先从版权的角度来说,所有许可证都要求附上许可证和版权声明,其次,除了MIT和BSD,其他许可证都要求我们写代码要有注释,最后GPL/LGPL/AGPL具备开源传染性,不允许闭源,MIT/BSD/Apache可以闭源作为商业软件发售。
从专利的角度来看,除了MIT和BSD没有提到专利授权,也就是说使用软件可能会有专利风险,其他许可证都明确把专利授权给用户,不可撤回,并且有专利报复条款,也就是说如果有人提出开源软件侵犯专利的主张或诉求,那么他就不能使用这个软件,使用这个软件反而就是侵权在先了,这是为了避免有人恶意发起专利诉讼。
最后,我把各许可证的风险做了分级,AGPL,GPL风险最高, 使用这些许可证的开源软件要特别小心,要注意不要违反Copyleft开源传染性的规定。LGPL由于可以用类库的方式使用开源软件,且不必开源自己的代码,列为中风险。MIT,BSD,Apache这几个宽松型许可由于限制少,风险比较低。对于商业公司来说,如果希望把内部组件开源,在扩大行业影响力的同时又能保留自己的专利权,MIT和BSD是最合适的选择。
看完本文有收获?请分享给更多人
关注「黑光技术」加星标,关注大数据+微服务