理查德·斯托曼
(GNU项目发起人,自由软件活动家)
开源软件在追求“自由”的同时,不能牺牲程序员的利益,否则有可能会影响程序员的创造激情(划重点!)。为保护开源工作者的权益,出现了多种被开源促进组织(Open Source Initiative)认可的开源许可协议。
开源协议规定了,在使用开源软件时的权利和责任,也就是规定了可以做什么,不可以做什么。
开源协议虽然不一定具备法律效力,但是当涉及软件版权纠纷时,开源协议也是非常重要的证据之一。
选择一个合适的开源许可协议,最大限度保护自己软件的权益,也是十分可取的。
(一)热门的开源许可协议:
1、GNU GPL(GNU General Public License,GNU通用公共许可证)
自由软件基金会发行的用于计算机软件的协议证书,使用该证书的软件被称为自由软件。
只要软件中包含了遵循 GPL 协议的产品或代码,该软件就必须也遵循 GPL 许可协议,也就是必须开源免费,不能闭源收费,因此这个协议并不适合商用软件。
遵循 GPL 协议的开源软件数量极其庞大,包括 Linux 系统在内的大多数的开源软件都是基于这个协议的。
2、BSD(Berkeley Software Distribution,伯克利软件发布版)协议
BSD 协议基本上允许用户随意调整,用户可以使用、修改和重新发布遵循该许可的软件,并且可以将软件作为商业软件发布和销售,前提是需要满足三个条件:
- 如果再发布的软件中包含源代码,则源代码必须继续遵循 BSD 许可协议。
- 如果再发布的软件中只有二进制程序,则需要在相关文档或版权文件中声明原始代码遵循了 BSD 协议。
- 不允许用原始软件的名字、作者名字或机构名称进行市场推广。
BSD 对商业比较友好,很多公司在选用开源产品的时候都首选 BSD 协议,因为可以完全控制这些第三方的代码,甚至在必要的时候可以修改或者二次开发。
3、 Apache 许可证版本(Apache License Version)协议
Apache 和 BSD 类似,都适用于商业软件。Apache 协议在为开发人员提供版权及专利许可的同时,允许用户拥有修改代码及再发布的自由。
热门的 Hadoop、Apache HTTP Server、MongoDB等项目都是基于该许可协议研发的,程序开发人员在开发遵循该协议的软件时,要遵守四个条件:
- 该软件及其衍生品必须继续使用 Apache 许可协议。
- 如果修改了程序源代码,需要在文档中进行声明。
- 若软件是基于他人的源代码编写而成的,则需要保留原始代码的协议、商标、专利声明及其他原作者声明的内容信息。
- 如果再发布的软件中有声明文件,则需在此文件中标注 Apache 许可协议及其他许可协议。
4、 MIT(Massachusetts Institute of Technology)协议
目前限制最少的开源许可协议之一(比 BSD 和 Apache 限制少),作者只想保留版权,而无任何其它的限制,只要程序的开发者在修改后的源代码中保留原作者的许可信息即可,被商业软件广泛使用。
使用 MIT 协议的软件有 PuTTY、X Window System、Ruby on Rails、Lua 5.0 onwards、Mono 等。
5、 GUN LGPL(GNU Lesser General Public License)
LGPL 是GPL的一个为主要为类库使用设计的开源协议。允许商业软件通过类库引用(link)的方式使用 LGPL 类库,而不需要开源商业软件的代码。这使得采用 LGPL 协议的开源代码可以被商业软件作为类库引用并发布和销售。
但是如果修改 LGPL 协议的代码或者衍生品,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用 LGPL 协议。因此LGPL协议的开源代码适合作为第三方类库被商业软件引用,但不适合希望以 LGPL 协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。
PS: 如何选择开源协议
Paul Bagwell(乌克兰程序员)画的分析图