原文来自:http://blog.sina.com.cn/s/blog_6870d1e00100lhlv.htmlhtml
你对开源有多少了解呢?若是你是软件开发者,要开源软件,不仅仅是开放源代码就能够了,选择一种许可证很重要,一个许可证之于软件就至关于价值观之于普通人,表明了这个软件的基本品性。一个错误的许可证选择可能会直接致使整个项目的失 败,XFree86就是一个好例子。redis
各类开源的许可证主要的限制仍是在redistribution(发布),因此我的/商业公司开发的软件包含了GPL的代码,只要你不发布,是能够任意使用的。
下面是几个开源许可证的区别:app
GPL
这里不想再解释长篇的GPL译文和更长的FAQ。 简单说,GPL软件的使用者有权力获得软件的代码,只要使用了GPL,在发布(redistribution)的时候,整个项目也必须是GPL的,即主程 序和静态连接的库(Linux的.a和Windows的.lib)必须是GPL的,动态连接库(Linux的.so,Windows的.dll)必须是比 GPL兼容的。所谓GPL兼容,也就是GPL软件中可使用的库,这些许可证必须比GPL弱(如LGPL,BSD),而不能是某个商业许可证。这里有一个 兼容列表 List of FSF approved software licenses。正因如此,GPL是带有很强的传染性,只要你的软件使用了GPL的代码,那么就请以GPL开放源代码吧,而且你的项目中也不能有任何和GPL不兼容的库。
LGPL
GPL 带有很强的传染性,那么若是一个库使用GPL发布,那么使用这个库的全部软件也必须使用GPL发布,这对不想开放源代码的商业软件来说是致命的打击——你 能够不使用其余的库,但最基本的libc是不管如何绕不开的,若是libc是以GPL发布,就至关于全部软件必须以GPL发布了。所 以,LGPL(Lesser GPL)诞生了。LGPL定义为,在以LGPL发布的库的基础上开发新的库的时候,新的库必须以LGPL发布,可是若是仅仅是动态连接,那么则不受任何限 制。这样商业软件就能够随意的使用LGPL的库了。所以,LGPL也具备传染性,但限制在在其基础上开发的库上,而并不限制使用它的程序自己——它的传染 性远小于GPL。
BSD、Apache 2.0
相对GPL/LGPL的开放源代码,BSD,Apache 2.0就宽松许多——商业软件能够任意的使用BSD,Apache 2.0发布的软件代码,而不须要开放源代码,只须要说起代码的原出处就能够了。BSD和Apache 2.0说起的方式稍有不一样,具体能够参考协议的详细内容。它们是GPL兼容的spa
看看下面选择开源许可证的案例:开放源代码
Android 使用宽松的Apache 2.0发布,由于Google做为一个商业公司,并不想失去商业软件的支持,它但愿团结一切能够团结的力量加入的Android的开发中来,壮大本身的阵 营,使用Apache 2.0就无可厚非了。而Google自己,并无丧失对Android的控制权,不会担忧另一个公司拿走了Android的代码开发出一个闭源 Android的对手。由于,只要Android不断的出新版,社区不停的跟进,而且不停的修改API,其余基于Android开发的公司不得不把本身的 Patch提回到主干上,不然,必然将耗费大量人力物力在维护本身的Patch上(钱这方面你斗得过Google?),得不偿失。并且,闭源以后,与整个 社区为敌,做为一个定位软件平台的项目,会流失大量应用软件开发者,以小博大,任何一个商业公司都不会干这种胜算不高的蠢事。
在看以 GPL发布的Linux为何比以BSD发布的FreeBSD成功。其实正是由于GPL的传染性。当一个开发人员在Linux基础上开发一个新功能以后, 不得不以GPL开放源代码,贡献回Linux,这样Linux自己才能越来也越壮大并且留住了至关的开发人员,造成了一个 优秀软件->不少使用者和贡献者->贡献->更优秀的软件->更多的使用者和贡献者... 的良性循环。htm