为什么要了解开源协议
现在在使用的开源协议有很多种,我们只要了解常用的几种开源协议即可,知晓了不同开源协议之间的区别,可以避免一些无意识的侵权行为,也可以保护自己的开源代码。
常见的开源协议(Open Source License)
BSD(Berkeley Software Distribution)
BSD开源协议是一个给予使用者很大自由的协议。基本上使用者可以“为所欲为”,可以自由地使用、修改源代码,也可以将修改后的代码作为开源或者专有软件再发布,即修改和衍生的代码可以闭源商用。但是需要满足三个条件:
- 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
- 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
- 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。
Apache Licence 2.0
Apache License大家应该非常熟悉,是开源组织Apache采用的协议,最初为Apache HTTP服务器而撰写,现在Apache基金下会下所有项目都使用Apache License。Apache License和BSD类似,鼓励代码共享和尊重原作者的著作权,同样允许代码修改和再发布,即修改和衍生的代码可以闭源商用,但是需要满足以下要求:
- 如果修改了代码,需要在被修改的文件中说明。
- 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他说明。
- Apache Licence也是对商业应用友好的许可。使用者也可以再需要的时候修改代码来满足并作为开源或商业产品发布/销售。
GPL(General Public License)
GPL协议和BSD、Apache License最大的区别是具有“传染性”,只要在一个软件中使用(“使用”指类库引用,修改后的代码或者衍生代码)GPL协议的产品,则该软件产品必须采用GPL协议,即使用类库、修改和衍生的代码不能商用,必须是开源和免费的,比如红帽Linux继承了Linux的GPL协议,所以它是开源的,你可以免费使用,但是他提供的服务是收费的,开源软件都是通过为用户提供有偿服务来盈利。
GPL with Classpath Exception
这是基于GPL的一个协议,但是排除了一种“引用”的情况,OpenJDK就采用了该协议,所以你如果修改了OpenJDK的代码,那么就会被传染为强制开源,也采用GPL协议,但是如果你的代码中只是引用了OpenJDK的代码,比如Java中import
OpenJDK的类库,则不受该协议影响,可以闭源商用。
LGPL(Lesser General Public License)
这是基于GPL的一个协议,和GPL with Classpath Exception类似,LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码,但是如果修改LGPL协议的代码或者衍生,则修改部分的额外代码和衍生的代码都必须采用LGPL协议。
EPL (Eclipse Public License 1.0)
EPL由Eclipse基金会应用于名下的集成开发环境Eclipse上,EPL允许任意使用、复制、分发、传播、展示、修改以及改后闭源的二次商业发布。期限制条件如下:
- 修改和衍生的代码必须继续遵循EPL开源协议,除非你得到了源码作者的授权。
- 在EPL下,你可以将源码不做任何修改来商业发布,但是代码必须开源。
- 独立的模块不需要开源。
图解
此处盗用阮老师的图片,能更加清晰地了解不同协议的差别。
版权声明
Copyright 2018-2021 by XXX Ltd. All Rights Reserved
上述版权声明表示:
- 第一次创作是2018年
- 2021年经过了修改
- 版权属于XXX公司,保留所有权利(比如署名权,收益权,不被修改的权利等)
总结
随着版权意识的不断提高,我们要根据实际情况,选择不同开源协议的开源软件或者是商业软件,2019年4月,Oracle JDK协议从BCL换成了OTN,也让更多人投入了OpenJDK的怀抱。
参考
https://www.runoob.com/w3cnote/open-source-license.html
http://www.ha97.com/833.html