PuGong

Bookworm, Programmer

开源协议漫谈

15 Jun 2020

目前开源协议软件被越来越多应用,但很多公司或个人在使用的时候并不注意说其使用的开源软件采用的协议,可能导致后续的一些法律上的纠纷。因此这里将常用的开源协议整理一下以供参考。

当前GITHUB最常用的开源协议主要由MIT,Apache 2.0以及GPLv3。三种血液里面MIT协议最宽松,可以任意使用;Apache协议对于企业会更友好,不用担心涉及专利的事情;GPLv3是最严的,它严格要求使用此协议组件的软件产品也必须按照GPLv3协议开源出来。

开源协议漫谈Slides: 开源协议漫谈

图解开源协议

如果使用开源软件,需要关注其开源协议

如果自己开源,选择License时需要考虑

graph TD
canClosed{是否可闭源}
canClosed -->| 是| canLic{放置版权声明}
canClosed -->| 否| canSameLic{采用同样许可证}
canLic -->| 是| canPro{可以用来宣传}
canLic -->| 否| Apache
canPro -->| 是| MIT
canPro -->| 否| BSD
canSameLic -->| 是| mustDoc{必须文档说明}
canSameLic -->| 否| canNetDist{是否可网络分发}
mustDoc -->| 是| Mizzia
mustDoc -->| 否| LGPL
canNetDist -->| 是| GPL
canNetDist -->| 否| AGPL

MIT协议:

允许范围

Commercial use
Modification
Distribution
Private us

使用条件

License and copyright notice

不包含内容

Liability
Warranty

类似的协议: BSD协议; MIT = two-clause BSD; 3/4-Clause BSD增加了“No Endorsement”条款,即不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

适用场景:鼓励开源,随意使用。

使用的软件:.NET Core, 大部分NPM包。

Apache 2.0协议 (ASLv2)

允许范围

Commercial use
Modification
Distribution
Patent use
Private us

使用条件

Trademark use
Liability
Warranty

不包含内容

Liability
Warranty

适用场景:鼓励开源,可以任意使用;贡献者可申请专利,但需要提供专利许可

使用软件:大多数apache foundation下面的软件,比如tomcat, hadoop, kafka等

GNU General Public License version 3协议 (GPLv3)

允许范围

Commercial use
Modification
Distribution
Patent use
Private us

使用条件

Disclose source
License and copyright notice
Same license
State changes

不包含内容

Liability
Warranty

GPLv3扩展

GNU Affero General Public License (AGPLv3): 在使用条件中增加了:Network 
use is distribution,意思就是 When a modified version is used to provide 
a service over a network, the complete source code of the modified 
version must be made available.

GNU Lesser General Public License (LGPL): 放宽了对非此协议的组件引用限制

类似协议:

Mozzila:不强制要求使用同样许可证,但需要开源

Eclipse Pulic License(EPL): 类似于GPL,比GPL限制略弱,去掉了“Patent 
Retalation”

GPLv2: 和GPLv3的区别在于违反许可证后的处理,v2违规后立刻取消许可证,只有在
版权人同意后才能恢复,v3对企业相对友好,可以申请临时许可证,也可以在停止侵
权后的60天内版权人没有提出异议的话自动恢复。

适用场景:强制开源,可以任意使用,但需要将修改后的代码同样开源

注意:GPL感染

注意: 免费软件 != 开源软件

常用的开源软件所采用的协议

操作系统:

Linux Kernel: GPLv2
Android: ASLv2

Web容器

Nginx: BSD
tomcat:ASLv2
Wildfly(formly jboss):LGPL
Jetty:ASLv2
apache httpd: ASLv2
NodeJS:MIT

WebLogic: 商用
WebSphere: 商用

消息队列:

Kafka:ASLv2
RocketMQ:ASLv2
RabbitMQ:Mozzila
zeroMQ:LGPL

数据库

REDIS:BSD协议
PostgreSQL:postgresql协议,和MIT/BSD类似
MySQL: GPLv2
MariaDB:GPLv2 (驱动:LGPLv2.1 or later)
Hadoop:ASLv2
Spark:ASLv2
HBase: ASLv2
Elastic Search:ASLv2
MongoDB: AGPLv3和商用协议;驱动 ASLv2

neo4j: AGPLv3和商业协议

虚拟化:

Kubernetes: ASLv2
Openstack: ASLv2
Docker: ASLv2
Vagrant: MIT
Virtualbox: GPLv2;扩展包:Personal Use and Evaluation License (PUFL),不可商用

开发框架/组件

Spring Cloud & other Spring Frameworks :ASLv2
Dubbo: ASLv2
Ruby on Rails: MIT
大多数JS库(VueJS,AngularJS, Backbone.js等):MIT
Django: BSD
Ruby: BSD

编辑及测试工具

ATOM: MIT
VSCode: MIT
Eclipse: EPL
JUnit:EPL
JMeter:Apache v2
Jenkins: MIT

其他

Firefox: Mozzila
7-zip:  LGPLv2.1
Bitcoin core: MIT
PuTTY: MIT
Gitlab: MIT

References:

Open Source Licenses on Wikipedia

Open Source Licenses on github

Open Source Licenses on Choose a License

Softwares by license on Wikipedia

Open Source Licenses Comparison on foss