作为一名软件开发人员,你一定也是经常接触到开源软件,但你真的就了解这些开源软件使用的开源许可协议吗?
你不会真的认为,开源就是完全免费吧?那么让我们通过本文来寻找答案。
一、开源许可协议简述
开源许可协议是指开源社区为了维护作者和贡献者的合法权利,保证软件不被一些商业机构或个人窃取,影响软件的发展而开发的协议。它的中文名:开源许可协议;外文名:open source license。
二、开源许可协议之间的区别与联系
通过上图,可以很清晰的了解到6种常见的开源许可协议之间的区别与联系,主要围绕的就是几个核心问题:
- 修改源代码后,是否允许闭源?
- 每一个修改过后的文件,是否都必须放置版权说明?
- 是否需要对每一个修改过的文件提供说明文档?
- 新增代码是否需要使用同样的许可证?
- 衍生软件的广告是否可以使用你的名字进行促销?
三、几种常见开源许可协议的主要内容
说起各式各样的开源许可协议,我们不得不提起GNU,它的全称是“GNU's Not Unix!”(GNU并非Unix!)的首字母递归缩写。
1985年Richard Stallman又创立了自由软件基金会(Free Software Foundation)来为GNU计划提供技术、法律以及财政支持。尽管GNU计划大部分时候是由个人自愿无偿贡献,但FSF有时还是会聘请程序员帮助编写。当GNU计划开始逐渐获得成功时,一些商业公司开始介入开发和技术支持。当中最著名的就是之后被Red Hat兼并的 Cygnus Solutions。
正因为有了GNU计划的大力推广,后面的Linux才逐渐发展壮大,直至今日,它已经走到30个年头,在服务器领域可谓是一枝独秀。也正因为有了Linux的蓬勃发展,慢慢才看到了越来越多的开源软件走向大众视野,整个软件行业才走向了发展的快车道,今后也会是长盛不衰,勇往直前。下面着重说一下各大流行的开源许可协议的核心内容。
1、Apache开源许可协议
Apache (Apache License) :Apache许可协议,一般常用是2.0版本,Apache 2.0许可证是ASF(Apache Software Foundation,Apache软件基金会)在2004年发布的,以帮助ASF实现其目标:“通过开源软件开发协作,提供可靠且长久不衰的软件产品”。ASF出品的软件一般都采用Apache 2.0许可证。当然,非ASF的项目也可以使用,Apache许可证设计出来是供所有人使用的。
它的核心内容如下:
- 可以随便使用,不会因版权和专利找你麻烦!
- 不能用我的商标!
- 你分发本作品或衍生作品时,可以不再提供源码!
- 你在分发时,必须做到:
1)带上本许可证!
2)保留本软件的所有版权、专利等说明!
3)你改过的文件,你得说改了哪!
4)NOTICE文件中的信息得保留!
5)在遵循本许可证的条件下,你可以再许可!
6)本作品就这样了,我不会负任何责任的!你想负责你可以负,但别拉上我!
2、MIT开源许可协议
MIT (Massachusetts Institute of Technology):MIT许可协议之名源自麻省理工学院,又称“X许可协议”或“X11许可协议”。
MIT内容与三条款BSD许可证(3-clause BSD license)内容颇为近似,但是赋予软件被授权人更大的权利与更少的限制。
它的核心内容是:
- 被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。
- 被授权人可根据程式的需要修改授权条款为适当的内容。
- 在软件和软件的所有副本中都必须包含版权声明和许可声明。
此授权条款并非属copyleft的自由软件授权条款,允许在自由/开放源码软件或非自由软件(proprietary software)所使用。此亦为MIT与BSD(The BSD license, 3-clause BSD license)本质上不同处。
MIT条款可与其他授权条款并存。另外,MIT条款也是自由软件基金会(FSF)所认可的自由软件授权条款,与GPL相容。
相对于BSD开源许可协议,MIT开源许可协议是当下流行的开源许可协议中【最为宽松】的许可协议。
3、BSD开源许可协议
BSD原先是用在加州大学柏克利分校发表的各个4.4BSD/4.4BSD-Lite版本上面(BSD是Berkly Software Distribution的简写)的,后来也就逐渐沿用下来。1979年加州大学伯克利分校发布了BSD Unix,被称为开放源代码的先驱,BSD许可证就是随着BSD Unix发展起来的。BSD许可证被Apache和BSD操作系统等开源软件所采纳。
相较于GPL许可证和MPL许可证的严格性,BSD许可证就宽松许多了,一样是只需要附上许可证的原文,不过比较有趣的是,它还要求所有进一步开发者将自己的版权资料放上去,所以拿到以BSD许可证发行的软件可能会遇到一个小状况,就是这些版权资料许可证占的空间比程序还大。
它的核心内容是:
- 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
- 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
- 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。
- 可以说BSD开源许可协议是当下流行的开源许可协议中【较为宽松】的许可协议。
4、MPL开源许可协议
MPL (Mozilla Public License):Mozilla公共许可协议。MPL是The Mozilla Public License的简写,是1998年初Netscape的 Mozilla小组为其开源软件项目设计的软件许可证。MPL许可证出现的最重要原因就是,Netscape公司认为GPL许可证没有很好地平衡开发者对源代码的需求和他们利用源代码获得的利益。同著名的GPL许可证和BSD许可证相比,MPL在许多权利与义务的约定方面与它们相同(因为都是符合OSIA 认定的开源软件许可证)
它的核心内容是:
- MPL虽然要求对于经MPL许可证发布的源代码的修改也要以MPL许可证的方式再许可出来,以保证其他人可以在MPL的条款下共享源代码。但是,在MPL许可证中对“发布”的定义是“以源代码方式发布的文件”,这就意味着MPL允许一个企业在自己已有的源代码库上加一个接口,除了接口程序的源代码以MPL许可证的形式对外许可外,源代码库中的源代码就可以不用MPL许可证的方式强制对外许可。这些,就为借鉴别人的源代码用做自己商业软件开发的行为留了一个活口。
- MPL许可证第三条第7款中允许被许可人将经过MPL许可证获得的源代码同自己其他类型的代码混合得到自己的软件程序。
- 对软件专利的态度,MPL许可证不像GPL许可证那样明确表示反对软件专利,但是却明确要求源代码的提供者不能提供已经受专利保护的源代码(除非他本人是专利权人,并书面向公众免费许可这些源代码),也不能在将这些源代码以开放源代码许可证形式许可后再去申请与这些源代码有关的专利。
-
对源代码的定义:而在MPL(1.1版本)许可证中,对源代码的定义是:“源代码指的是对作品进行修改最优先择取的形式,它包括:所有模块的所有源程序,加上有关的接口的定义,加上控制可执行作品的安装和编译的‘原本’(原文为‘Script’),或者不是与初始源代码显著不同的源代码就是被源代码贡献者选择的从公共领域可以得到的程序代码。”
-
MPL许可证第3条有专门的一款是关于对源代码修改进行描述的规定,就是要求所有再发布者都得有一个专门的文件就对源代码程序修改的时间和修改的方式有描述。
5、GPL开源许可协议
GPL (GNU General Public License) :GNU通用公共许可协议。GNU通用公共许可协议是一个被广泛使用的自由软件许可协议条款,GPL 保证了所有开发者的权利,同时为使用者提供了足够的复制,分发,修改的权利。
它的核心内容是:
- 可自由复制:你可以将软件复制到你的电脑,你客户的电脑,或者任何地方。复制份数没有任何限制。
- 可自由分发:在你的网站提供他人下载,拷贝到U盘送人。
- 可用来盈利:可以在分发软件的时候收费,但你必须在收费前向你的客户提供该软件的 GNU GPL 许可协议,以便让他们知道,他们可以从别的渠道免费得到这份软件,以及你收费的理由。
- 可自由修改:如果你想添加或删除某个功能,没问题,如果你想在别的项目中使用部分代码,也没问题,唯一的要求是,使用了这段代码的项目也必须使用 GPL 协议。
需要注意的是,分发的时候,需要明确提供源代码和二进制文件,另外,用于某些程序的某些协议有一些问题和限制,使用 GPL 协议,你必须在源代码代码中包含相应信息,以及协议本身。
6、LGPL开源许可协议
LGPL (GNU Lesser General Public License) :GNU宽通用公共许可协议。GNU 还有另外一种协议,叫做 LGPL (Lesser General Public Licence),它对产品所保留的权利比 GPL 少,总的来说,LGPL 适合那些用于非 GPL 或非开源产品的开源类库或框架。因为 GPL 要求,使用了 GPL 代码的产品必须也使用 GPL 协议,开发者不允许将 GPL 代码用于商业产品。LGPL 绕过了这一限制。
LGPL是GPL的变种,也是GNU为了得到更多的甚至是商用软件开发商的支持而提出的。与GPL的最大不同是,它有以下几个核心内容:
- 可以私有使用LGPL授权的自由软件;
- 开发出来的新软件可以是私有的而不需要是自由软件;
- 任何公司在使用自由软件之前应该保证在LGPL或其它GPL变种的授权下。
四、结尾
通过上文,你肯定已经打破了开源就是免费的思想了吧?并且我们可以简单对上面6中常见开源许可协议在宽松到严谨的方向做个简单排序:MIT > BSD > Apache > LGPL > Mozalla (MPL) > GPL
另外,在今后使用/学习一些开源软件/框架的时候,需要了解一下它使用的是什么开源许可协议,如果你想基于这个开源软件/框架进行一些商业行为,请务必了解清楚该开源许可协议的核心内容,以免将来在版本问题上受到法律的制裁。