【这是 ZY 第 12 篇原创技术文章】html
身为程序员,咱们不可避免的要和开源项目打交道,不论是咱们本身作了些开源项目,仍是使用开源项目,对各类开源协议的了解是必要的。
这篇文章旨在短期内让读者朋友们对常见的开源协议有了了解,在建立本身开源项目时能够灵活选用协议,在使用开源项目时也能够避免踩到开源协议的坑。
基于上述目的,文章篇幅不长,若是感受不过瘾,建议多读几遍~vue
OSI,开发源代码组织,是一个旨在推进开源软件发展的非盈利组织。目前受到 OSI 认可的开源协议一共 83 种,具体协议能够在 OSI 官网 查看。react
咱们在 Github 上建立一个开源项目时,新建一个名为 LICENSE 的文件时,就会弹出选择开源协议的按钮,咱们点进去就能够看到,Github 默认支持的协议模板。点击协议会有详细的介绍。
ios
咱们下面就看看这几种协议的内容,以及在这几种协议中如何去选择。协议的具体内容在这里不作解读,由于实在是篇幅不短,先聊聊其中的重点。git
修改代码须要说明程序员
可用于商业github
小益使用 Apache 协议开源了一个 Android 类库,只要小张引用类库时保留了原做者的声明,并对修改的源码进行说明,那后续项目开源与否,都是符合协议的。redis
hadoop,tomcatflask
声明协议bootstrap
容许闭源商业软件的发布和销售
brew
声明协议
相比 BSD 2.0 新增协议以下: 不能够用开源代码的“做者/机构的名字”或“原来产品的名字”作市场推广
容许闭源商业软件的发布和销售
小益使用 BSD 协议开源了一个 Android 类库,只要小张引用类库时保留了原做者的声明,并对修改的源码进行说明,那后续项目开源与否,都是符合协议的。
flask,redis,numpy
许可声明
容许商业化
小益使用 MIT 协议开源了一个 Android 类库,只要小张引用类库时保留包含了许可声明,那后续项目开源与否,都是符合协议的。
vue,react,bootstrap,vscode,electron,axios,terminal
感染
能够用于商业,可是必须开放源码
小益使用 GPL 协议开源了一个 Android 类库,这个时候小张作开发时,本着不重复造轮子的想法,在项目中引用了小益的类库。项目开发完成之后,小张想把项目上架到 GooglePlay,可是不想开源,这个时候就违反了 GPL 协议。 为了避免违反协议,小张索性将项目开源,而在选择开源协议的时候,小张必须选择 GPL 协议。
GPL 的本质就是生生不息,不断衍生。
Linux,GCC,scapy
GPL 3.0 相比 2.0 新增了一些条例:
GIMP,Bash,YouCompleteMe
引用类库无需开源
适合商业软件
小益使用 LGPL 协议开源了一个 Android 类库,小张作开发时引用了此类库。以后小张将项目上架到 GooglePlay 而不开源,是没有违反协议的。可是小张引用类库时,是以源码的形式引用的,那就必需要将项目开源了。
alibaba/jvm-sandbox
网络交互
AGPL 在 GPL 的基础上,增长了一条限制,经过网络与用户交互,也须要提供源代码
能够用于商业,可是必须开放源码
octotree
修改源码须要开源
容许闭源商业软件的发布和销售
che
版权集中
容许闭源商业软件的发布和销售
小益使用 MPL 协议开源了一个 Android 类库,小张对源码进行修改之后从新发布,修改后的源码版权也属于小益。
syncthing,firefox-ios
其实看了上述介绍,了解了各个协议之间的区别,咱们基本上也就清楚项目该选哪一种协议了。若是还不清楚,可参照此 网站。
zh.wikipedia.org/wiki/GNU通用公…
www.gnu.org/licenses/ol…
jxself.org/translation…
www.cnblogs.com/onlycxue/ar…
后续会不按期更新五分钟系列,内容主要集中在一些不太须要深刻的技术点,旨在让读者朋友们快速了解一些技术概念,