专栏首页bisal的个人杂货铺几种常见的软件开源协议介绍

几种常见的软件开源协议介绍

最近在做一些技术管理的工作,在技术规范中会涉及到开源协议,参考一下这篇文章介绍的几种常见的开源协议,例如,GPL、BSD、MIT、Mozilla、Apache和LGPL等,

P.S. https://www.runoob.com/w3cnote/open-source-license.html

Apache License

Apache License(Apache许可证),是Apache软件基金会发布的一个自由软件许可证。Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和最终原作者的著作权,同样允许源代码修改和再发布。但是也需要遵循以下条件:

  • 需要给代码的用户一份Apache Licence。
  • 如果修改了代码,需要在被修改的文件中说明。
  • 在衍生的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
  • 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但是不可以表现为对Apache Licence构成更改。
  • Apache Licence是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足并作为开源或商业产品发布/销售。

使用这个协议的好处是:

  • 永久权利,一旦被授权,永久拥有。
  • 全球范围的权利,在一个国家获得授权,适用于所有国家。假如你在美国,许可是从印度授权的,也没有问题。
  • 授权免费,无版税, 前期、后期均无任何费用。
  • 授权无排他性,任何人都可以获得授权。
  • 授权不可撤消,一旦获得授权,没有任何人可以取消。比如,你基于该产品代码开发了衍生产品,你不用担心会在某一天被禁止使用该代码。

BSD

BSD是"Berkeley Software Distribution"的缩写,意思是"伯克利软件发行版"。

BSD开源协议:是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

1. 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。

2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。

3. 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

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

GPL

GPL(GNU General Public License):GNU通用公共许可协议。

Linux采用了GPL。GPL协议和BSD,Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种Linux,包括商业公司的Linux和Linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。

LGPL

LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。

但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。

GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品。

MIT

MI是和BSD一样宽范的许可协议,源自麻省理工学院(Massachusetts Institute of Technology, MIT),又称X11协议。作者只想保留版权,而无任何其他了限制。MIT与BSD类似,但是比BSD协议更加宽松,是目前最少限制的协议。这个协议唯一的条件就是在修改后的代码或者发行包包含原作者的许可信息。适用商业软件。使用MIT的软件项目有:jquery、Node.js。

MPL(Mozilla Public License 1.1)

MPL协议允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者 。这种授权维护了商业软件的利益,他要求基于这种软件的修改无偿贡献版权给该软件。这样,围绕该软件的所有代码的版权都集中在发起开发人的手中。但MPL是允许修改,无偿使用得。MPL软件对链接没有要求。

EPL(Eclipse Public License 1.0)

EPL允许Recipients任意使用、复制、分发、传播、展示、修改以及改后闭源的二次商业发布。

使用EPL协议,需要遵守以下规则:

  • 当一个Contributors将源码的整体或部分再次开源发布的时候,必须继续遵循EPL开源协议来发布,而不能改用其他协议发布。除非你得到了原"源码"Owner 的授权。
  • EPL协议下,你可以将源码不做任何修改来商业发布。但如果你要发布修改后的源码,或者当你再发布的是Object Code的时候,你必须声明它的Source Code是可以获取的,而且要告知获取方法。
  • 当你需要将EPL下的源码作为一部分跟其他私有的源码混和着成为一个Project发布的时候,你可以将整个Project/Product以私人的协议发布,但要声明哪一部分代码是EPL下的,而且声明那部分代码继续遵循EPL。
  • 独立的模块(Separate Module),不需要开源。

Creative Commons知识共享协议

Creative Commons(CC)许可协议并不能说是真正的开源协议,他们大多是被使用于设计类的工程上。CC 协议种类繁多,每一种都授权特定的权利。一个CC许可协议具有四个基本部分,这几个部分可以单独起作用,也可以组合起来。下面是这几部分的简介:

1. 署名,作品上必须附有作品的归属如此之后,作品可以被修改,分发,复制和其他用途。

2. 相同方式共享,作品可以被修改、分发或其它操作,但所有的衍生品都要置于CC许可协议下。

3. 非商业用途,作品可以被修改、分发等等,但不能用于商业目的。但语言上对什么是"商业"的说明十分含糊不清 (没有提供精确的定义),所以你可以在你的工程里对其进行说明。例如,有些人简单的解释"非商业"为不能出售这个作品。而另外一些人认为你甚至不能在有广告的网站上使用它们。还有些人认为"商业"仅仅指你用它获取利益。

4. 禁止衍生作品,CC许可协议的这些条款可以自由组合使用。大多数的比较严格的CC协议会声明 "署名权,非商业用途,禁止衍生"条款,这意味着你可以自由的分享这个作品,但你不能改变它和对其收费,而且必须声明作品的归属。这个许可协议非常的有用,他可以让你的作品传播出去,但又可以对作品的使用保留部分或完全的控制。最少限制的CC协议类型当属 "署名"协议,这意味着只要人们能维护你的名誉,他们对你的作品怎么使用都行。

CC 许可协议更多的是在设计类工程中使用,而不是开发类,但没有人或妨碍你将之使用与后者。只是你必须要清楚各部分条款能覆盖到的和不能覆盖到的权利。

通过这几张图,可以更直观的了解开源协议之间的关系,

图1

图2

图3

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 常见开源协议介绍

    世界上的开源许可证(Open Source License)大概有上百种,今天我们来介绍下集几种我们常见的开源协议。大致有GPL、BSD、MIT、Mozilla...

    JAVA日知录
  • 常见的开源协议

    参考文章: https://zh.wikipedia.org/wiki/Apache%E8%AE%B8%E5%8F%AF%E8%AF%81 https://...

    续写经典
  • 扒一扒常见的开源许可协议

    之前写过一篇文章(那些年用过的开源项目(一)),列出了很多当年用过的开源项目。现在有这么多的开源项目可供我们选择,这要得益于当前非常积极的开源氛围,然而,尽管开...

    Bruce Li
  • 软件开发中的开源协议详解!

    作者:pdai 开源不等于免费!为了加速我们的开发,我们会使用开源的软件和源码; 为避免商业风险,需要在使用时了解第三方如软件协议,版本,和已知CVE风险等;本...

    Java技术栈
  • 视频直播软件开发,直播软件开发中的常见协议有哪些

    1、RTMP(Real RTMP(real time messaging protocol)实时消息传输协议 RTMP 给予TCP协议 是一个协议族 包括RTM...

    布谷鸟小刘
  • 软件开发架构介绍||OSI七层协议之物理

      两种事物要想相互通信最基本的方式是通过一个规定好的协议去执行,然后就能得到有效沟通(通信),比如不同国家的人要想互相通话就得有个全球的语言标准——英语,全世...

    py3study
  • HTTP 协议内常见的post提交数据类型介绍

    我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。HTTP 协议规定的 HTTP 请求方法有 OPTIONS、GET...

    EasyNVR
  • 业界常见的数据挖掘软件介绍

    一、主要介绍12种 1.传统的数据挖掘套件(Classic suites): SAS Enterprise Miner 5.3 SPSS Clementine ...

    小莹莹
  • 消息队列常见的几种使用场景介绍!

    消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构。使用较多的消息队列有Active...

    Java团长
  • 消息队列常见的几种使用场景介绍!

    消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构。使用较多的消息队列有Active...

    Spark学习技巧
  • 消息队列常见的几种使用场景介绍!

    消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构。使用较多的消息队列有Active...

    Java后端技术
  • exp和expdp几种常见的使用场景操作介绍

    同事前几天问到exp/expdp根据条件导出一张/多张表数据的问题,借此机会,依次对这些需求做个实验,仅供参考。

    bisal
  • 2018-09-07 几种开源协议的比较(BSD,Apache,GPL,LGPL,AGPL,MIT) – 整理几种开源协议的比较(BSD,Apache,GPL,LGPL,AGPL,MIT) – 整理

    http://ewen0930.github.io/2016/11/open-source-licenses/

    Albert陈凯
  • 常见面试第三题之Activity的几种启动模式介绍

    Activity的几种启动模式介绍 ? 今天我们来讲的是Activity有几种启动模式,其实以前我没太在意这方面的知识,但是我在开发过程中发现,其实了解和...

    非著名程序员
  • 几种常用Linux系统的软件镜像源配置

    CentOS 6操作系统版本结束了生命周期(EOL),Linux社区已不再维护该操作系统版本。

    yuanfan2012
  • 开源软件的许可协议,这也贼鸡儿多了吧...

    开源软件在追求“自由”的同时,不能牺牲程序员的利益,否则将会影响程序员的创造激情,因此世界上现在有 60 多种被开源促进组织(Open Source Initi...

    杰哥的IT之旅
  • 【RL-TCPnet网络教程】第1章 当前主流的小型嵌入式网络协议栈

    这几年物联网发展迅猛,各种新产品、新技术也是层出不穷,本章节就为大家介绍当前主流的小型嵌入式网络协议栈。

    armfly
  • 大数据开发学习中常用的几种分析工具介绍

    程序员现在比以往任何时候都需要数据分析工具,这里列举了几种大数据技术分析工具的介绍,加米谷大数据带大家一起来了解一下吧

    加米谷大数据
  • 软件安全性测试(连载2)

    机密性要求保护数据内容不能泄露,加密是实现机密性要求的常见手段。加密技术的过程如下。

    小老鼠

扫码关注云+社区

领取腾讯云代金券