开源漫谈之GNU GPL的前世今生

原创
开源
在开源社区,许可协议代表着一种契约,一种法律,一种政治。根据Black Duck的统计,目前全球开源项目中有超过半数使用了GNU GPL许可协议。GNU GPL到底是怎样来的,又为什么会受到如此狂热的支持?本篇文章将帮助你了解GPL的前世今生。

【51CTO独家特稿】前段时间在51CTO发布过的一篇译文对当下最为流行的五大开源许可协议进行了简单的介绍。由于参与开源运动的多为开发者与设计者,而开源许可协议的原文往往跟法律条文一样难懂,导致开源社区的很多参与者并没有对开源许可协议产生足够的认识。但事实上,了解开源许可协议不仅可以帮助我们更好的做出选择,并且可以更加深入的参与开源社区的文化。

要了解开源许可协议,当然要从GNU GPL开始说起。这个许可协议究竟是如何诞生,又是如何被社区接受并广为使用的呢?请看下面的介绍。

GNU GPL条文概述

GNU General Public License,通常简称为GPL,是当下最为通用的开源许可协议。GPL的条文最早在1989年由Richard Stallman(RMS)撰写,用于GNU项目。这位自由软件之父在当年提出了四大自由的诉求:

◆可以使用软件做任何事的自由

◆可以根据自己需要任意修改软件的自由

◆可以与别人分享软件的自由

◆可以与别人分享自己对软件所做改动的自由

[[10781]] 

为了有效地保护这些自由,RMS将GPL定义为第一个、同时也是最为严格的Copyleft许可协议——也就是说,如果你使用了按照GPL发布的项目,那么你的项目也必须按照GPL许可协议发布,不得添加任何其他限制。(不过,Copyleft这个理念却不是从GPL开始,而是从20世纪70年代起就有人开始实行的。)使用GPL协议的代码制作的程序并非不能拿来卖钱,事实上RMS开始自由运动的第一笔经费就是通过售卖附在磁碟上的Emacs赚来的。GPL的主要规定在于源代码必须自由公开。之后为了增强此协议的Copyleft效力以及与专有软件代码以及其他协议代码的兼容性,RMS又先后在1991年和2007年敲定了GPLv2和GPLv3的条文。

使用GPL的知名开源项目

根据Black Duck Open Source Resource Center(直译为黑鸭子开源资源中心,由Black Duck软件公司发起建立并维护的数据库)的调查,目前使用GNU GPLv2的开源项目是最多的。到今天为止(2010年5月)的统计中,GPLv2占据了全部开源项目当中48.54%的比例,而GPLv3的使用率也已经不低,达到了5.61%。这其中包括很多我们所熟悉的开源项目:

[[10782]] 

Linux:如日中天的操作系统,和Unix以及整个自由软件运动有着非常深的渊源。目前使用GPLv2(因此在理论上,所有的Linux发行版都遵循GPL许可协议)。

GNU系列:GNU Emacs,GNU调试器,GNU C编译器等等。当然,GNU项目已经在使用GPLv3。

eMule电驴:众所周知的P2P下载工具,目前使用GPLv2。有兴趣的读者可以看看他们翻译的非官方GPL中文文本

WordPress:流行的博客系统,目前使用GPLv2。

Java:Java的HotSpot技术和Java语言编译器javac从2006年开始采用GPLv2,不过条款中在GPLv2允许的范围内使用了linking exception(直译为连接例外),所以是一个修改过的GPLv2。另外,同属于Sun的Glassfish和NetBeans IDE也都采用此种许可协议。

MySQL:著名的开源数据库。MySQL采用的是双重许可协议——带有例外的GPLv2,以及专有类型的最终用户许可协议。这种双重许可的方式是开源软件发展多年的一个产物,这种方式允许厂商通过售卖开源软件的许可证赚钱,为想要使用GPL开源项目而又不想公开自己代码的用户提供了另一种选择。至于这种方法是否有利于开源界,以及是否会被用来钻空子,目前还无法得出明确的结论。不过可以肯定的一点是,因为MySQL在GPLv2下发布,所以无论之后发生什么事,MySQL这个开源技术都是不可能被扼杀的。

#p#

GPL牵涉的法律案件回顾

须知RMS所做的远不止是开发了GNU项目以及确定了GNU GPL许可协议。为了自由软件的推广,RMS在1985年创建了自由软件基金会(Free Software Foundation,FSF),并一直致力于解决自由软件运动相关的法律和结构问题。

可想而知,GPL在推出之后并开始流行的十多年间成为了很多专有软件厂商的眼中钉。最早的一起直接针对GPL的法律诉讼发生在2003年8月,身为原告方的SCO Group以Linux内核中使用了IBM AIX代码,而AIX代码又使用了SCO Unix代码为由,将IBM告上了法庭。这一举动激发了Linux社区的公愤,IBM继而联手红帽针对SCO提起反诉与上诉;之后SCO开始恐吓不愿撤销SCO Unix使用权的Linux用户,并更进一步展开了对Novell、AutoZone和DaimlerChrysler的诉讼。这一系列诉讼逐渐演变成了一场旷日持久的战争。

[[10783]] 

这场战争的战场之一就在于GPL:根据SCO的申诉,SCO Unix的源代码是当时SCO的一些员工私自按照GPL发布的,因此不具备法律效力。SCO的发言人还进一步表示,“GPL违背美国宪法,还有版权,反托拉斯,及出口管制等法令。”但是,整个事情还要更加复杂:Unix原本是AT&T卖给Novell而Novell又卖给SCO的,(这段历史可参考Unix传奇一文)因此自由软件和开源社区反过来质疑SCO是否真正拥有Unix的所有权;而FSF也站出来,依据GPL的条文捍卫Linux用户不受恐吓的权利。

美国法院最终并没有在GPL许可协议上进行定论,但数年间的法律判决基本都对SCO不利,2005年的判决中甚至对SCO没有提供侵权代码的证据表示了直白的鄙夷。SCO最终在2007年申请了破产保护,并希望卖出自己的Unix产品线,但这似乎也不可能了:美国法院在那一年宣判Unix属于Novell,并在最近的2010年3月31日重复了这个判决

虽然这场战争的主战场与GPL关系不大,但Linux一方的胜利还是为GPL增添了一定力量。在2007年,一个FLOSS一方的叫做SFLC(Software Freedom Law Center,软件自由法律中心)的法律团体以违反GPL协议为由,代表BusyBox的两位开发者将Monsoon Multimedia软件厂商告上了法庭。在此之前,针对违反GPL协议的处理方法一直是由FSF等开源组织私下沟通解决的,因此此案成为了美国第一例因GPL而立案的案件。不过,这宗诉讼最后以双方庭外和解的方式结束,GPL也因此失去了一次验证其法律有效性的机会。

为什么社区对GPL如此青睐?

GPL是一个代表了RMS的Copyleft理念的许可协议,在各种开源许可协议中属于最为严格的一个,可以说是直接阻碍了开发者通过贩卖版权和专利软件这种传统的软件赚钱营生。但是为什么在这么多的开源项目当中,使用GPL协议的项目占据了一半以上的高比例呢?由于开发者大多数专注于开发本身,而对许可协议这个概念并不十分重视,所以有些项目的发起人在没有进行深入了解的时候直接选取了流行的GPL协议,这是原因之一。不过有很多社区人士则明确的表达过自己选择GPL的理由——

“GPL代表了自由。”

“我使用GPL,因为微软讨厌它。我不用BSD,因为微软喜欢它。”

“GPL意味着分享,而BSD/MIT协议意味着偷窃。当然,这取决于你如何定义分享与偷窃!”

众多观点之中,Linux之父Linus Torvalds的说明毫无疑问是值得了解的。在2008年的一次访谈中,Linus对许可协议的选择是这样评论的:

[[10784]] 

“我相信GPL(尤其是v2)是一个协同工作的绝佳模式——所有的人分享他们的代码,同时确保没有浑水摸鱼者能够利用他人的工作成果来为自己取得好处——你使用自己贡献的源代码来为你所获得的源代码进行“支付”。我将其称之为tit-for-tat模式,这种模式不仅适用于软件界,也同样在经济学与博弈论中十分出名。

不过这种tit-for-tat模式并非是所有人的需求。比如说,如果你隶属标准委员会,你只是希望能够借由一段开源代码的传播来推广一个标准,而并不介意这段代码是否会被用在专有软件中盈利,那么Apache或BSD协议则比较合适。

即使单纯是从理性的角度来看,不同许可协议的存在也都是合理的。同时我也要说,程序员们并非在任何时刻都是理性的。自负的心理,个人的特殊需求,都是导致众多有细微差别的许可协议诞生的原因。

不过我们要知道,有选择是件好事!而且非常流行的许可协议并不是那么多,所以基本上没有什么可困扰的。”

讲到这里,相信大家对于GNU GPL开源许可协议的由来和使用情况已经有了相当的了解。当然正如同上面介绍的,在开源运动的发展历程中,GPL并非是最早诞生的许可协议,而且随着时间的推移与各种需求的影响,社区中出现了很多其他的开源许可协议,其中也有不少是由GPL修改而来的。这些其他的许可协议是如何诞生,它们和GPL有什么不同,而社区又为什么会选择这些许可协议呢?我们在下一篇文章中会继续介绍。

【编辑推荐】

  1. 隐逸在GNU/Linux中的非自由软件
  2. 详解Linux内核与GNU计划
  3. 全面了解GNU计划

 

责任编辑:yangsai 来源: 51CTO.com
相关推荐

2021-12-15 11:52:34

GPLLinuxGNU

2021-06-07 08:41:59

React异步组件

2011-08-23 09:52:31

CSS

2015-11-18 14:14:11

OPNFVNFV

2014-07-30 10:55:27

2016-11-08 19:19:06

2016-11-03 13:33:31

2013-05-23 16:23:42

Windows Azu微软公有云

2014-07-21 12:57:25

诺基亚微软裁员

2016-12-29 18:21:01

2014-07-15 10:31:07

asyncawait

2021-06-17 07:08:19

Tapablewebpack JavaScript

2012-05-18 16:54:21

FedoraFedora 17

2016-12-29 13:34:04

阿尔法狗围棋计算机

2019-06-04 09:00:07

Jenkins X开源开发人员

2019-08-05 10:08:25

软件操作系统程序员

2011-05-13 09:43:27

产品经理PM

2021-04-15 07:01:28

区块链分布式DLT

2015-06-11 11:10:09

对象存储云存储

2013-11-14 16:03:23

Android设计Android Des
点赞
收藏

51CTO技术栈公众号