当前位置: 首页 >> 技术文章 >> 引用开源软件需要了解的开源协议
引用开源软件需要了解的开源协议
发布时间:2019-03-14 发布人:崔虎龙 763


前一段时间有几位公司同事问我,客户要引用开源软件,麻烦调研一下开源协议。我进一步了解下来,确实这里边有好多注意事项,特此准备了一下,普及给大家。


先上个图看看,这几年数据库趋势。

1552528757730049101.png

开源软件走进了企业平台,特别是云平台。并且一些机构,把这些开源软件打包成产品,推向商业化。

终于有些开源机构看不惯了。。。


1)

1552528930826047410.png

2)

1552528940109010657.png

Redis Labs自研 Redis 模块 - RediSearch,Redis Graph,ReJSON,ReBloom 和 Redis-ML 将不再是开源软件,而是源码可用(source available)

3)

1552528990372065587.png


Neo4j 产品副总裁 Philip Rathle 宣布,从 Neo4j 3.5 版本开始,企业版将仅在商业许可下提供,不再在 GitHub 上提供源代码。


问:开源协议是什么,对我们有什么影响。 


答:对于热爱开源软开发的同事,研究架构的同事,要注意了。开源软件投入到生产,间接的产生经济利益的时候,就会有无情的手,在周围徘徊。


下面看下具体介绍。
定义:LGPL许可证是LESSER GENERAL PUBLIC LICENSE的简写,也叫LIBRARY GENERAL PUBLIC LICENSE,中文译为“较宽松公共许可证”或者“函数库公共许可证”。该许可证适用于一些由自由软件基金会与其它决定使用此许可证的软件作者所特殊设计的软件软件包─比如函数库(即Library)。

全世界上的开源许可证(Open Source License):http://www.opensource.org/licenses/alphabetical

image.png

从上面子项中,我们可以看到,想用开源软件,就得遵守规则,要不将来要吃红牌的

下面介绍常用的的开源协议GNU GPL,PostgreSQL License,SSPL v1.0,BSD,Apache License2.0,Commons Clouse v1.0


GNU GPL

GNU是一个类Unix操作系统。GPL是GNU General Public License的缩写。它是由多个应用程序、系统库、开发工具乃至游戏构成的程序集合。GNU的开发始于1984年1月,称为GNU工程。GNU的许多程序在GNU工程下发布;我们称之为GNU软件包。

GPL同其它的自由软件许可证一样,许可社会公众享有:运行、复制软件的自由,发行传播软件的自由,获得软件源码的自由,改进软件并将自己作出的改进版本向社会发行传播的自由。

4.png

GPL协议最主要的几个原则:

1、确保软件自始至终都以开放源代码形式发布,保护开发成果不被窃取用作商业发售。它必须开放源代码。

2、GPL 大致就是一个左侧版权(Copyleft,或译为“反版权”、“版权属左”、“版权所无”、“版责”等)的体现。GPL 精髓就是,只要使软件在完整开源 的情况下,尽可能使使用者得到自由发挥的空间,使软件得到更快更好的发展。

3、无论软件以何种形式发布,都必须同时附上源代码。

4、开发或维护遵循 GPL 协议开发的软件的公司或个人,可以对使用者收取一定的服务费用。但还是一句老话——必须无偿提供软件的完整源代码,不得将源代码与服务做捆绑或任何变相捆绑销售。

SSPL v1.0

SSPL (Server Side Public License) 为 MongoDB 基于 GPLv3 上修改并提出的软件授权协议.
MongoDB 认为 AGPL “Remote Network Interaction” 条款叙述不够明确, 容易造成混淆. 加上许多云端服务商一直在挑战 AGPL 的底线, 大量使用 MongoDB 来进行营利行为却不遵守 AGPL. 所以才提出明确定义的 SSPL.

SSPL服务器端公共授权。许可证更改并不影响当前使用社区服务器的常规用户。根据 MongoDB 之前的 GNU AGPLv3 协议,想要将 MongoDB 作为公共服务运行的公司必须将他们的软件开源,或需要从 MongoDB 获得商业许可,该公司解释说,“然而,MongoDB 的普及使一些组织在违反 GNU AGPLv3 协议的边缘疯狂试探,甚至直接违反了协议。”
尽管 SSPL 与 GNU GPLv3 没有什么不同,但 SSPL 会明确要求托管 MongoDB 实例的云计算公司要么从 MongoDB 获取商业许可证,要么向社区开源其服务代码。

这回知道为什么,从去年开始MongoDB 从linux 系统 各个平台中 抽离出来了。

一共有18个协议如下,这个开发代码的人,不知道怎么想出来的

0. Definitions.
1. Source Code.
2. Basic Permissions.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
4. Conveying Verbatim Copies.
5. Conveying Modified Source Versions.
6. Conveying Non-Source Forms.
7. Additional Terms.
8. Termination.    9. Acceptance Not Required for Having Copies.
10. Automatic Licensing of Downstream Recipients.
11. Patents.
12. No Surrender of Others' Freedom.
13. Offering the Program as a Service.
14. Revised Versions of this License.
15. Disclaimer of Warranty.
16. Limitation of Liability.
17. Interpretation of Sections 15 and 16.

参考:
https://www.mongodb.com/licensing/server-side-public-license

BSD

BSD许可证原先是用在加州大学柏克利分校发表的各个4.4BSD/4.4BSD-Lite版本上面(BSD是Berkly Software Distribution的简写)的,后来也就逐渐沿用下来。1979年加州大学伯克利分校发布了BSD Unix,被称为开放源代码的先驱,BSD许可证就是随着BSD Unix发展起来的。BSD许可证被Apache和BSD操作系统等开源软件所采纳。

BSD开源协议(original BSD license、FreeBSD license、Original BSD license)是一个给于使用者很大自由的协议,BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

相较于GPL许可证和MPL许可证的严格性,BSD许可证就宽松许多了,一样是只需要附上许可证的原文,不过比较有趣的是,它还要求所有进一步开发者将自己的版权资料放上去,所以拿到以BSD许可证发行的软件可能会遇到一个小状况,就是这些版权资料许可证占的空间比程序还大。

5.png

BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

1.如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
2.如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
3.不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

参考: https://en.wikipedia.org/wiki/BSD_licenses

PostgreSQL License

PostgreSQL License是在PostgreSQL许可下发布的,这是一个自由的开源许可,类似于BSD或MIT许可。

本软件及其文档的使用、复制、修改和分发均可用于任何目的,无需支付任何费用,也无需书面协议,但上述版权声明及本段和以下两段均应出现在所有副本中。目前 PostgreSQL 遵循的是 BSD 开源协议,该协议给予了使用者很大的自由,不仅允许使用者修改和重新发布代码,也允许使用或在 BSD 代码上开发商业软件发布和销售。另外,国内外的主流云厂商几乎都在提供 PostgreSQL 云服务,如国外的 AWS、Microsoft Azure,国内的阿里云、腾讯云、华为云等等。
参考:
https://www.postgresql.org/about/licence/

Apache License 2.0

Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:

1.需要给代码的用户一份Apache Licence
2.如果你修改了代码,需要在被修改的文件中说明。
3.在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
4.如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。

6.png

Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。
Apache 协议还有以下需要说明的地方:
 永久权利
一旦被授权,永久拥有。
 全球范围的权利
在一个国家获得授权,适用于所有国家。假如你在美国,许可是从印度授权的,也没有问题。
 授权免费,且无版税
前期,后期均无任何费用。
 授权无排他性
任何人都可以获得授权
 授权不可撤消
一旦获得授权,没有任何人可以取消。比如,你基于该产品代码开发了衍生产品,你不用担心会在某一天被禁止使用该代码。
英文原文:http://www.apache.org/licenses/LICENSE-2.0.html

Commons Clause v1.0

首先,Commons Clause 不是开源的。开源项目必须符合由 OSI 开源促进协会审核通过的准则,审核标准包括:免费再分发、源代码的完整性、允许衍生作品、不歧视个人或团体、不歧视工作领域、许可证分发、技术中立等等。

Commons Clause v1.0 的介绍:
如果许可证没有限制其他条件,许可证下授权将不包括和并不授予给您出售软件的权利。

就上述而言,“出售”是指根据许可证授予您的任何或所有权利,以便向第三方提供费用或其他报酬(包括但不限于托管或咨询/支持软件服务的费用),一种产品或服务,其价值完全或基本上来自软件的功能。许可证要求的任何许可声明或归属也必须包含此Commons Cause License Condition声明。

当项目使用Commons Clouse,它只影响代码的将来——这意味着不会立即影响现有的用户。过去版本使用的许可证不会被撤销,因此该Clouse只会应用在将来的版本。

链接:https://commonsclause.com/

总结

通过了解GNU GPL,PostgreSQL License,SSPL v1.0,BSD,Apache License2.0,Redis Commons Clause 开源协议,可以分为3大类
1.《GNU GPL》:完全开源
2.《BSD ,Apache License2.0 PostgreSQL License,MySQL社区版》:
使用者很大自由的协议,
代码鼓励代码共享,
允许使用者修改和重新发布代码,
开发商业软件发布和销售。
3.《SSPL》 限制在于 云计算公司。

4.Redis Labs 高级功能限制


对于数据库方面开源协议:

1.MySQL社区版,Redis ,PostgreSQL  自身使用没问题

2.MongoDB 云平台上使用:  MongoDB 获取商业许可证,社区开源其服务代码

3.Redis Labs 商业限制

个人想法:

  1. 开源协议有效地管理和规范了开源软件使用,开发规范,版本迭代,并且提供了很多好的想法,给我们实际应用上带来了很多方便。

  2. 商用方面的开源协议,其实就是想把自己的劳动成果转换成物资而已。这个需要一个平衡点。

  3. 还有那些闭源的,希望开源。说的伟大点,历史记住你!