在linux环境下学习的多了,这些开源协议也听的见的越来越多,感觉有必要仔细了解一下。
1. BSD
先说BSD是因为它的自由度相对来说是比较大的。BSD全称Berkeley Software Distribution license,以此协议代码为基础做二次开发时,只需满足以下三个条件:
a. 对本软件源代码的再传播,必须保留上述的版权宣告、此三条件表列,以及免责声明。
b. 对本软件二进制形式的再传播,必须连带以文件以及/或者其他附于散播包装中的媒介方式,重制上述之版权宣告、此三条件表列,以及免责声明。
c. 不能使用本软件的作者/机构名字和产品的名字进行推广。
可以看出以上三条都是针对BSD源码部分,解释参考http://www.openfoundry.org/tw/legal-column-list/524--bsd。BSD协议允许使用者修改和重新发布代码,也没有对商业软件的发布和销售进行限制,使用BSD软件做二次开发后,也可以选择不公开源码,成为封闭软件,因此许多公司选择开源软件时会选BSD软件。http://soundsoftware.ac.uk/open-source-software-licences-bsd-style
2. MIT协议
来源于麻省理工,它甚至更自由,只有一个要求:在软件和软件的所有副本中都必须包含以上版权声明和本许可声明。
3. Apache协议
是由Apache软件基金会发布的自由软件许可证。条件如下:
1. 需要给使用代码的用户一份Apache Licence
2. 如果你修改了代码,需要在被修改的文件中说明。
3. 在延伸的代码中(修改和由源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
4. 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。
Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。https://www.xuchao.org/docs/apache/license.html
4. GPL协议
全称为general public license。linux使用的就是GPL协议,不同于上面几个对商业友好的协议,GPL的精神是自由软件。它授予使用者运行、复制、修改、发布的权利和自由,并要求GPL程序的演绎软件也符合GPL规定。
也就是说使用GPL源码进行二次开发之后,新的软件发布时必须以GPL为许可证,即允许使用和修改。注意这里指的是发布时,如果你不发布或不公开,则不需要执行这个规定。
这里需要特别说下收费的权力,开源不等于免费。GPL软件在发布的时候必须公开源代码,但是这不代表不能商卖,只不过用户买了之后就有权利获得你的源代码;而用户得到源代码之后,按照GPL的规定他可以免费的再分发出去,所以靠卖GPL代码赚钱很难,比较多的是通过订阅增值服务的方式收费,如redhat。
再说说“传染性”:基于GPL作品得到的作品也必须使用GPL许可证,这就是感染性。这也是为什么现在GPL是最流行的许可协议,因为传染性在很大程度上保护了自由的权利。
一般认为,修改、包含、复制、静态/动态链接都是会被“传染”的。而不被传染的行为有:使用GPL作品的输出,及简单的调用或触发作品(例如通过使用fork或exec,或调用程序的入口main方法等)。
参考:https://www.zhihu.com/question/22703660和http://stackoverflow.com/questions/10130143/gpl-lgpl-and-static-linking
另外,在欧美GPL还是蛮具有法律效力的,而在中国,由于相关法规不是很明确,所以违反了似乎也不会怎么样,但是还是准守协议为好。