阿里云外贸建站,wordpress底部菜单插件,产品开发设计流程图,新闻发布会主题身为程序员#xff0c;我们不可避免的要和开源项目打交道#xff0c;不管是我们自己做了些开源项目#xff0c;还是使用开源项目#xff0c;对各种开源协议的了解是必要的。 OSI(Open Source Initiative)
OSI#xff0c;开发源代码组织#xff0c;是一个旨在推动开源软件… 身为程序员我们不可避免的要和开源项目打交道不管是我们自己做了些开源项目还是使用开源项目对各种开源协议的了解是必要的。 OSI(Open Source Initiative)
OSI开发源代码组织是一个旨在推动开源软件发展的非盈利组织。目前受到OSI承认的开源协议一共83种具体协议可以在OSI 官网查看。
在 Github 上如何添加开源协议
我们在 Github 上创建一个开源项目时新建一个名为 LICENSE 的文件时就会弹出选择开源协议的按钮我们点进去就可以看到Github 默认支持的协议模板。点击协议会有详细的介绍。
开源协议一览表
开源协议特点共享修改衍生商业化例子Apache允许商业使用和闭源但需要保留版权声明和使用许可条款可以自由地查看、使用、修改和共享源代码但修改后的项目必须开放源代码库的链接可以自由选择协议进行修改和衍生项目可以自由选择协议进行商业化Hadoop分布式计算框架、Apache Tomcat Web服务器等GPL最严格和强大的要求任何使用、修改或衍生代码的项目都必须采用GPL协议可以自由地查看、使用、修改和共享源代码必须使用GPL协议进行修改和衍生项目必须使用GPL协议进行商业化Linux操作系统、GIMP图像编辑器等BSD简洁和慷慨的允许商业使用和闭源但需要保留版权声明可以自由地查看、使用、修改和共享源代码可以自由选择协议进行修改和衍生项目可以自由选择协议进行商业化FreeBSD操作系统、Nginx Web服务器等MIT简单和宽松的允许商业使用和闭源但需要保留版权声明可以自由地查看、使用、修改和共享源代码可以自由选择协议进行修改和衍生项目可以自由选择协议进行商业化React JavaScript库、TensorFlow机器学习框架等Mozilla旨在保护用户隐私和自由允许商业使用和闭源但需要保留版权声明可以自由地查看、使用、修改和共享源代码必须使用MPL协议进行修改和衍生项目必须使用MPL协议进行商业化Firefox浏览器、Rust编程语言等LGPL允许商业使用和闭源但需要保留版权声明和使用许可条款并开放源代码库的链接可以自由地查看、使用、修改和共享源代码但修改后的项目必须开放源代码库的链接必须使用LGPL协议进行修改和衍生项目并开放源代码库的链接必须使用LGPL协议进行商业化并开放源代码库的链接Qt开发框架、GTK图形界面库等
三、Apache 2.0 3.1 关键词 修改代码需要说明
3.2 关键点 需要保留原有作者的声明 如果修改了代码需要进行说明 不承担责任 可以新增许可但不能对 Apache 协议造成更改 3.3 商业化 可用于商业
3.4 举个栗子 小益使用 Apache 协议开源了一个 Android 类库只要小张引用类库时保留了原作者的声明并对修改的源码进行说明那后续项目开源与否都是符合协议的。
3.5 使用此协议的开源项目 hadooptomcat
四、BSD 2 4.1 关键词 声明协议
4.2 关键点 再发布的产品中包含源代码则在源代码中必须带有原来代码中的BSD协议 如果再发布的只是二进制类库/软件则需要在类库/软件的文档那个和版权声明中包含原来代码中的BSD协议 4.3 商业化 允许闭源商业软件的发布和销售
4.4 使用此协议的开源项目 brew
五、BSD 3 5.1 关键词 声明协议
5.2 关键点 相比 BSD 2.0 新增协议如下 不可以用开源代码的“作者/机构的名字”或“原来产品的名字”做市场推广
5.3 商业化 允许闭源商业软件的发布和销售
5.4 举个栗子 小益使用 BSD 协议开源了一个 Android 类库只要小张引用类库时保留了原作者的声明并对修改的源码进行说明那后续项目开源与否都是符合协议的。
5.5 使用此协议的开源项目 flaskredisnumpy
六、MIT 6.1 关键词 许可声明
6.2 关键点 软件中必须包含许可声明 6.3 商业化 允许商业化
6.4 举个栗子 小益使用 MIT 协议开源了一个 Android 类库只要小张引用类库时保留包含了许可声明那后续项目开源与否都是符合协议的。
6.5 使用此协议的开源项目 vuereactbootstrapvscodeelectronaxiosterminal
七、GPL 2.0 7.1 关键词 感染
7.2 关键点 使用 / 修改 / 衍生 GPL 类库的代码或软件必须也采用 GPL 协议进行开源 项目开源后可以再增加其他开源协议但是协议必须比 GPL 宽泛 不提供品质担保使用采用此协议的软件产生的任何后果都不会负责 7.3 商业化 可以用于商业但是必须开放源码
7.4 举个栗子 小益使用 GPL 协议开源了一个 Android 类库这个时候小张做开发时本着不重复造轮子的想法在项目中引用了小益的类库。项目开发完成以后小张想把项目上架到 GooglePlay但是不想开源这个时候就违反了 GPL 协议。 为了不违反协议小张索性将项目开源而在选择开源协议的时候小张必须选择 GPL 协议。
GPL 的本质就是生生不息不断衍生。
7.5 使用此协议的的开源项目 LinuxGCCscapy
八、GPL 3.0 GPL 3.0 相比 2.0 新增了一些条例
任何向 GPL 项目贡献的成果将永远以 GPL 协议发行 GPL 软件设备的用户有权更改软件 使用此协议的的开源项目 GIMPBashYouCompleteMe
九、LGPL 9.1 关键词 引用类库无需开源
9.2 关键点 LGPL 允许商业软件通过引用(link)的方式使用 LGPL 类库而不需要开放源代码 但是如果修改或衍生 LGPL 协议代码则必须采用 LGPL 协议 9.3 商业化 适合商业软件
9.4 举个栗子 小益使用 LGPL 协议开源了一个 Android 类库小张做开发时引用了此类库。之后小张将项目上架到 GooglePlay 而不开源是没有违反协议的。但是小张引用类库时是以源码的形式引用的那就必须要将项目开源了。
9.5 使用此协议的的开源项目 alibaba/jvm-sandbox
十、AGPL 3.0 10.1 关键词 网络交互
10.2 关键点 AGPL 在 GPL 的基础上增加了一条限制通过网络与用户交互也需要提供源代码
10.3 商业化 可以用于商业但是必须开放源码
10.4 使用此协议的开源项目 octotree
十一、EPL 2.0 11.1 关键词 修改源码需要开源
11.2 关键点 修改源码后发布需要开源 软件贡献者再次将源码开源发布时需要使用 EPL 协议除非得到作者授权 项目中引用了 EPL 协议的代码项目开源时可以使用其他协议但是引用的那部分代码仍然需要使用 EPL 协议 11.3 商业化 允许闭源商业软件的发布和销售
11.4 使用此协议的开源项目 che
十二、MPL 12.1 关键词 版权集中
12.2 关键点 修改后的代码版权归软件的发起者可以免费使用 12.3 商业化 允许闭源商业软件的发布和销售
12.4 举个栗子 小益使用 MPL 协议开源了一个 Android 类库小张对源码进行修改以后重新发布修改后的源码版权也属于小益。
12.5 使用此协议的开源项目 syncthingfirefox-ios
如何选择开源协议
如果想省事不关系别人用自己的代码去做什么直接选 MIT 或者 BSD 就好 如果想代码修改以后做出声明选择 Apache 协议 如果想“繁衍”后代那么使用 GPL 协议 其实看了上述介绍了解了各个协议之间的区别我们基本上也就清楚项目该选哪种协议了。如果还不清楚可参照此网站。
参考
GNU通用公共许可证 GNU General Public License, version 1 GNU通用公共许可协议 LGPL 与GPL的区别