现如今开源软件非常流行, 一堆的开源协议的名次也是听了无数次, 但一直没有去研究到底有哪些开源协议, 他们的详细内容都不是很了解, 在软件开发中使用开源的软件难免有一些顾虑,尽管网上类似的文章很多,但是看过之后印象还是比较浅,本着好记性不如烂笔头的想法,今天有空就放狗搜索研究下, 这里做个笔记。
本文主要讨论的协议有:GPL,LGPL,Mozilla License,Apache License,BSD,MIT
先说结论:
从自由程度上排序(协议后列出的只是比下面的协议自由的部分,只是从纯粹使用角度上来说,协议的具体细则在后面):
MIT - 可以使用源码发布人来做广告
BSD - 无论修改了多少文件,只需要附带一份原来代码的BSD协议
Apache License - 修改代码之后,可以选择开源或者不开源
LGPL - 不需要公开列出所做的所有改动
Mozilla License - 如果原有代码只是以类库方式使用,那么可以自由使用任何协议,但是一旦对类库做了任何改动,那么涉及这些改动的所有源代码都必须遵守原有开源协议,并且需要公开列出你所做的所有改动。
GPL - 无论原有代码有无被修改,无论使用的方式如何,使用GPL协议的工程都必须继承GPL协议,也就是必须开源+免费。
乌克兰程序员Paul Bagwell画了一张分析图来面熟上面的关系, 国内有位网友阮一峰的博客对这张图做了翻译整理,转帖这张图如下:
原贴链接: http://www.ruanyifeng.com/blog/2011/05/how_to_choose_free_software_licenses.html
下面列出上述协议的详细资料。
GPL(GNU General Public License)
GPL开源协议的出发点是代码的开源、免费使用/引用/修改、衍生代码的开源和免费使用,但不允许修改后和衍生的代码作为非开源的商业软件发布和销售。它的要求就是:
1. 如果采用了GPL协议的代码和产品,无论是以类库方式使用还是修改代码方式使用,所开发出的产品必须遵守GPL协议,即必须是开源和免费的。
LGPL(GNU Lesser General Public License)
LGPL是在GPL基础上的一个宽松协议,它规定:
1. 如果只是采用类库的方式使用LGPL协议的产品,那么开发出的产品可以使用任何协议。
2. 如果对LGPL协议的产品代码进行了修改,那么开发出的产品就必须遵守LGPL协议,即开源和免费。
MPL(Mozilla Public License)
Mozilla开源协议是1998年初Netscape的Mozilla小组为其开源软件项目设计的软件许可证,该协议要求如下:
1. 如果开发的产品只是拿原有代码做类库使用,那么可以使用任何的协议,也可以制作商业软件。
2. 如果开发的产品对原有代码进行了修改,那么原有代码及其衍生代码都必须开源,并且必须在代码中包含MPL协议和所做的所有改动的描述。
Apache (Apache Public License)
Apache开源协议是大名鼎鼎的Apache组织采用的协议,该协议的条款和BSD类似,使用者可以自由的使用和修改源代码,也可以将源代码用作商业用途,条款如下:
1. 需要给用户一份Apache License
2. 如果以开源形式发布产品,那么对原有代码的修改都必须在被修改的文件中说明
3. 如果以开源形式发布产品,那么源代码中必须带有原有代码的协议、商标、专利声明和其他原作者规定需要包含的说明;如果以非开源方式,那么需要在产品文档和版权声明中包含这些。
4. 如果产品中包含有协议声明文件,则该文件需要带有Apache License。可以在该文件中增加其他协议声明,但不能修改Apache License。
BSD(Berkeley Software Distribution License)
BSD开源协议是一个给使用者非常大自由的协议,使用者可以自由的使用和修改源代码,也可以将源代码用作商业用途,只需要满足三个条件:
1. 如果发布的产品中包含源代码,那么源代码中必须带有原有代码的BSD协议。
2. 如果发布的产品不是开源的(类库或者商业软件),则需要在产品的文档和版权声明中包含原有代码的BSD协议。
3. 不可以用开源代码的作者或者机构的名字和原有产品的名字做市场推广。
MIT(MIT License,X11 License)
MIT开源协议是最自由的协议,该名字源自麻省理工学院,使用者除了享受和BSD协议相同的条款外,还可以使用开源代码的作者或机构的名字和原有产品的名字做市场推广。