在进行开源软件选型时,需要留意一下开源协议,开源选件往往可以免费使用,但不意味着随意使用,根据你的用途,协议的要求会对你产生一定的影响。

截止到写稿时,经过OSI(Open Source Initiative)组织批准的开源协议就有82种之多,可以参见:([https://opensource.org/licenses/alphabetical),]。

我们常见的开源协议有以下几种:

GPL许可:是 GNU General Public License 的缩写,既GNU通用公共许可协议,是自由软件基金会(GNU)发布的一个软件首选许可,GPL许可一共发布的三个不版本,最新一版是2007年公布的GPLv3,最著名的使用GPL许可的软件就是大Linux。GPL许可的特点就是,使用GPL软件(包括类库)或者源代码(不管多少)的发布的新产品(包括新增源代码和可执行二进制文件)也必须使用GPL协议,也要公开源代码。由于这个许可具有一定的开源强制性,很多大公司对GPL许可的开源软件的选择还是比较谨慎的。GPL 协议有很多变种:比如LGPL, AGPL

LGPL : LGPL 是 GNU Lesser General Public License 的缩写 既GNU宽通用公共许可证,相比于GPL,其开源强制性弱一些,对商用软件更加友好,使用该许可的著名软件是Linux下的办公软件 OpenOffice。按照该许可协议的要求,以类库方式引入基于LGPL许可的软件可以不开源其衍生产品的源代码,单对于LGPL许可授权的源代码进行修改或者和修改相关的衍生代码则必须开源且使用LGPL许可进行授权。

AGPL:Affero General Public License,简称Affero GPL或AGPL,Affero 是一家公司名称,AGPL最初由该公司撰写,改许可是相当于GPL的增强版本,主要是对通过网络发布服务进行限制。GPL许可本身限制的是软件的“发布”行为,只要是使用了GPL许可的源代码或者二进制文件,必须开源且以同样以GPL许可进行授权,但到了互联网十点,很多互联网公司并不发布软件实体,而是提供“服务”,所以GPL的约束力就明显下降了,AGPL许可的目的就是填补这个所谓的“漏洞”,改许可要求,除了GPL本身的约束以外,所有基于AGPL许可软件提供网络服务,其相关源代码必须开源,所以在AGPL许可下,网络服务也被看做一种分发形式。所以很多互联网公司禁止使用 AGPL 许可的开源软件。

BSD许可:BSD(BSD是Berkly Software Distribution的简写)许可最初使用在加州大学伯克利分校发布的 BSD Unix 系统上,随着BSD系统的发展,BSD许可也随之沿用下来。相比于GPL 和 MPL 的严格要求,BSD 许可的的要求就非常宽松,给予使用者非常大的自由度。在该许可下的软件可以自由使用修改,也可以将修改后的代码再次发布,而且可以是按照闭源的私有软件进行发布,只需要在发布的软件和中保留BSD许可协议文件即可,但未经许可不能使用原作者或者机构名义进行宣传和推广。

MPL许可:MPL是 The Mozilla Public License 的做些。是1998年初Netscape的 Mozilla小组为其开源软件项目设计的软件许可证。MPL许可允许经过MPL授权的源代码和其他授权的文件(包括源代码和二进制文件)混合使用,甚至剥和私有软件混合使用,这相当于GPL许可和BSD或类似许可的折中,其既有一定的开源强制性,又保留一定的私有权利。按照该许可要求,使用基于MPL授权源代码的部分,包括对MPL源代码的修改部分,必须保持MPL授权,这一点和GPL协议类似,但新增代码发布的可使用其他方式授权,甚至是私有授权,也可以比闭源的方式。

MIT 许可:MIT 许可是来自麻省理工学院(Massachusetts Institute of Technology, MIT),该许可被认为是最自由的开源协议之一,也是应用最为广泛的开源协议(据blackduck——一家对软件源代码进行合规审计的公司,统计,全球有将近1/3的开源软件使用MIT开源协议),他的协议声明非常简短,他和BSD许可类似,允许自由修改发布基于MIT的代码和软件,只需要你的发行版里包含原始协议文件即可,其他无任何限制,及时使用原始作者的名义进行推广。使用MIT许可的著名软件有ssh 客户端软件jquery,Rails,putty 和 xwindows等。

Apache 2.0许可:改协议是由Apache软件基金会发布的许可,最初用在像Apache web Server这样Apache的内部软件中,2004年公布了2.0版本。其限制条件和BSD类似,允许自由修改和使用、发布软件,但要求保留版权,相比于BSD许可,该许可对版权要求的更细,每一个被修改后的原始文件都要著名原始版权声明。使用 Apache 2.0许可 著名的软件有 Android ,Apache web server,swift 等。

很多互利网公司禁止使用 AGPL,以和气类似的开源许可(CPAL,OSL),甚至用GPL,LGPL,MPL(如果仅仅是内部使用,不以软件分发的形式出现,也可以自由使用),推荐使用BSD,APache 2.0 和 MIT 许可。

开源软件也不是免费的午餐,开源许可使用不当也可能引起官司,比如下面的例子:

2007 年 Skype 公司被发现再其网络语音手持电话的固件中使用了Linux内核代码,Linux是基于GPL许可的,按照协议规定,skype 必须向售卖该产品的用户免费提供固件源代码。但skype并没有这么做,只有在2007年2月被告上法庭,并被一德国法庭判有罪。(http://www.cnbeta.com/articles/tech/55365.htm,http://www.groklaw.net/article.php?story=20080508212535665)

2008 年12月11日,自由软件基金会(FSF)将著名网络设备生产商Cisco 告上法庭,由于思科公司旗下品牌 Linksys 下的诸多产品使用了包括 Gcc ,GNU binutils 和 GNU C 库,这些软件多数是基于GPL或LGPL许可的,但思科公司并未按照许可要求公开相关产品的源代码。(https://en.wikipedia.org/wiki/Free_Software_Foundation,_Inc._v._Cisco_Systems,_Inc.)

可见,即使是也有“帆船”的时候,要么是影响公司声誉,要们是被迫开放源代码,正所谓填下没有免费的午餐,选在开源软件时不要以为免费就拿来就用,一定要仔细审查开源协议是否符合你的产品要求。

chat

常见的开源协议有哪些?

常见的开源协议包括以下几种:

  1. MIT License(麻省理工学院许可证):这种许可证非常简单和宽松,允许用户几乎不受限制地使用、复制、修改、合并、发布、分发、再许可和出售软件。

  2. Apache License 2.0(阿帕奇许可证 2.0):这种许可证允许用户自由地使用、修改和分发软件,但要求在分发时保留原始许可证和版权声明,并且需要在修改后的文件中注明更改。

  3. GPL (General Public License)(通用公共许可证):GPL 是一种著名的“传染性”许可证,要求使用 GPL 代码的任何派生作品也必须以 GPL 许可证发布。常见的版本包括 GPLv2 和 GPLv3。

  4. LGPL (Lesser General Public License)(宽松公共许可证):LGPL 是 GPL 的一种更宽松的版本,允许软件库在不受 GPL 约束的情况下与非 GPL 软件一起使用。

  5. BSD License(伯克利软件分发许可证):BSD 许可证也非常宽松,允许几乎不受限制地使用、修改和分发代码,但要求保留原始的版权声明和免责声明。

  6. MPL (Mozilla Public License)(Mozilla 公共许可证):MPL 允许代码的自由使用、修改和分发,但要求在分发时必须以 MPL 许可证发布,并且必须公开修改后的源代码。

  7. EPL (Eclipse Public License)(Eclipse 公共许可证):EPL 允许代码的自由使用、修改和分发,但要求在分发时必须以 EPL 许可证发布,并且需要对修改后的代码进行标记。

每种许可证都有其特定的使用场景和法律条款,选择合适的开源许可证取决于你项目的需求和对代码使用的控制程度。

哪一种协议最能保护开源者的权限?防止劳动果实被云平台等窃取?

如果要最大限度地保护开源者的权益,防止云平台或其他商业实体窃取劳动果实,GNU General Public License (GPL) 是一个很好的选择。具体来说,GPL 许可证有以下几个特点:

  1. 强制开放源代码:GPL 要求任何基于 GPL 代码的派生作品也必须以 GPL 许可证发布,并且必须公开源代码。这意味着任何人使用或修改你的代码都必须将他们的修改也公开。

  2. 防止闭源再发布:GPL 许可证不允许将修改后的代码作为闭源软件发布。任何人使用你的 GPL 代码,都必须以相同的 GPL 许可证发布他们的修改版。

  3. 保护用户自由:GPL 许可证旨在保护用户的自由,确保他们可以自由地使用、修改和分发软件,而不是被锁定在专有软件中。

除了 GPL 之外,AGPL (Affero General Public License) 可能是一个更好的选择,特别是针对云平台的情况。AGPL 具有与 GPL 类似的要求,但增加了一项规定:如果软件通过网络提供服务,使用该软件的任何人都必须能够获得其源代码。这意味着,如果一个云平台使用你的 AGPL 代码提供服务,他们也必须公开他们的修改和源代码。

总之,GPL 和 AGPL 都是保护开源者权益、防止商业实体不当利用劳动果实的强力工具。选择这两种许可证可以有效防止云平台等窃取和闭源使用你的开源项目。

GPL 和 AGPL 二者有什么区别?哪一种更加能保护开源者的权利

GPL(General Public License)和 AGPL(Affero General Public License)都是旨在保护开源软件作者权益的许可证,但它们在保护代码在网络服务中的使用方面有所不同。

以下是两者的主要区别:

GPL (General Public License)

  1. 适用范围
    • 主要用于分发软件的源代码。
    • 要求任何分发或修改的派生作品也必须以 GPL 许可证发布,并且源代码必须公开。
  2. 主要特点
    • 强制开放源代码:任何基于 GPL 代码的派生作品都必须以 GPL 许可证发布,并且必须公开源代码。
    • 防止闭源再发布:不允许将修改后的代码作为闭源软件发布。
  3. 限制
    • GPL 不适用于通过网络提供服务的场景。也就是说,如果一个组织使用 GPL 代码通过网络提供服务,他们不必公开源代码。

AGPL (Affero General Public License)

  1. 适用范围
    • 除了包含 GPL 的所有要求外,AGPL 还增加了一项特别规定,适用于网络服务的场景。
  2. 主要特点
    • 网络服务条款:如果一个组织使用 AGPL 代码通过网络提供服务,他们必须公开源代码。这包括任何修改后的版本。
    • 强制开放源代码和网络服务:确保通过网络提供服务的版本也必须公开源代码。
  3. 保护力度
    • AGPL 在保护开源者权益方面更为严格,特别是针对通过网络提供服务的场景。AGPL 确保任何使用你的代码提供网络服务的人都必须公开他们的修改和源代码。

选择建议

如果你希望最大程度地保护你的开源项目,防止云平台或其他服务提供商利用你的代码却不公开他们的修改,AGPL 是一个更好的选择。

AGPL 在 GPL 的基础上增加了对网络服务的保护条款,确保你的代码在所有使用场景下都能保持开放性和透明性。

参考资料

https://coderxing.gitbooks.io/architecture-evolution/content/chapter1/di-yi-zhang-ff1a-zhun-bei-qi-cheng/12-guan-yu-kai-yuan/123-kai-yuan-xie-yi-de-xuan-ze.html