开源 即为开放软件源代码.如标题所说,开源协议则为开源软件所遵循的许可协议,同时,获得了开源软件的用户,需要在该协议的允许范围内对软件的源代码进行使用、修改和发行
开源的存在意义则为重现软件界合作互助的团结精神为主题,维护互联网精神中最重要的开放/平等/协作/分享的发展.
世界上存在的开源协议有着上百种,但他们的区别都大同小异,无非就是规定你在某个范围能如何使用此代码,例如规定了你能否可以使用,复制和修改软件以及是否可以免费使用此软件或出售.
例如你现在看到的我的博客,是基于GPL2.0开源协议的Typecho博客程序.
目前主流有着GPL、BSD、MIT、Mozilla、Apache以及LGPL开源协议.
GPL协议
GPL协议全称为GNU 通用公共许可协议,是一个广泛被使用的自由软件许可协议,最初由理查德·斯托曼为GNU计划而撰写.
他给予了电脑程序自由软件的定义,并且使用 Copyleft
来确保程序的自由被完善的保留.
我可以使用他吗?
如果你不允许人家使用了你的源代码并进行闭源操作,且要求新增的代码必须采用GPL协议的情况下,你则可以优先选择它.
以GPL协议代码为基础做二次开发自己的产品时,GPL协议可以授予程序接受人以下权利:
- 以任何目的运行此程序的权力
- 再发行复制件的权力
- 改进此程序,并公开发布改进的权力(前提是能得到源代码)
BSD协议
BSD开源协议是一个给于使用者很大自由的协议.可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布.
BSD代码鼓励代码共享,但需要尊重代码作者的著作权.BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议.
很多企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或是二次开发.
我可以使用他吗?
如果允许他人修改源码后可以采取闭源操作,以及允许在修改过后的文件中不附带版权声明,并且不允许开源代码的作者/机构名字和原来产品的名字做市场推广/引流的前提下,你可以优先选择他.
以BSD协议代码为基础做二次开发自己的产品时,你需要满足三个条件:
- 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议.
- 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议.
- 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广.
MIT协议
MIT协议与BSD协议有着一定的相似处,均为一样宽范的许可协议.
MIT 协议又称 麻省理工学院许可证 ,最初是由麻省理工学院开发.
我可以使用他吗?
如果允许他人修改源码后可以采取闭源操作,以及允许在修改过后的文件中附不带版权声明,并且允许开源代码的作者/机构名字和原来产品的名字做市场推广/引流的前提下,你可以优先选择他.
- 以MIT协议代码为基础做二次开发自己的产品时,协议可授权如下权利:
- 被授权人有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本.
- 授权人可根据程式的需要修改授权条款为适当的内容.
Mozilla协议
Mozilla协议又称MPL协议,于1998年的Mozilla小组为其开源软件项目设计的软件许可证.
该协议融合了BSD许可证和GNU通用公共许可协议的特性,追求平衡专有软件和开源软件开发者之间的顾虑.
他与LGPL协议有着一定的相似性,均可以保护你原始作者的身份,使你至少获得认可的权利.
我可以使用他吗?
如果你不允许他人修改源代码过后进行闭源操作,且要求使用同样的开源协议并对修改过后的代码提供说明文档时,你可以优先选择他.
MPL要求对于经MPL许可证发布的源代码的修改也要以MPL许可证的方式再许可出来,以保证其他人可以在MPL的条款下共享此源代码.
Apache协议
Apache协议与BSD协议类似,同样是采用鼓励代码共享和以及保持最终原作者的著作权以及允许源代码修改过后再次发布.
Apache协议也是对商业应用友好的许可.使用者也可以再需要的时候修改代码来满足并作为开源或商业产品发布/销售.
我可以使用他吗?
如果你允许他人修改源码过后可以进行闭源操作,且要求每一个修改过后的文件都需要放置版权声明的前提下,你可以优先选择它.
使用MIT协议的源代码,你需要遵循以下条件:
- 需要给予使用此代码的用户一份Apache协议内容
- 如果修改了代码,需要再被修改的文件中说明
- 在衍生的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明
- 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence.你可以再Notice中增加自己的许可,但是不可以表现为对Apache Licence构成更改
- Apache Licence也是对商业应用友好的许可.使用者也可以再需要的时候修改代码来满足并作为开源或商业产品发布/销售
LGPL协议
与GPL类似,LGPL是GPL的一个为主要为类库使用设计的开源协议.和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同.LGPL 允许商业软件通过类库引用的方式使用LGPL类库而不需要开源商业软件的代码.这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售.
如果修改了使用LGPL协议的代码或者衍生内容,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议.因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用.
GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品.
我可以使用他吗?
如果你不允许修改的代码进行闭源操作,且要求修改过的开源协议必须采用LGPL,但不需要对源码的修改之处提供说明文档的前提下,你可以优先选择他.
采用LGPL的代码,一般情况下为一个第三方库,这时候开发人员仅仅用到了它的功能,而并未对库本身其进行任何修改,那么开发人员也不必公布自己的商业源代码.
但是如果你修改了这个库的代码,那么你修改的代码必须全部开源,并且需要保持协议也为LGPL.
当然,除了库的源码之外的商业代码,LGPL协议允许你不进行公布处理.
参考文献
这6种开源协议(GPL,LGPL,BSD,MIT,Apache)的说明和选择 - 腾讯云开发者社区-腾讯云 (tencent.com)
MIT许可协议具体限制了什么? - 知乎 (zhihu.com)