GNU 通用公共许可证
一、基本概念
GNU 通用公共许可证( 简称为 GPL )是由 自由软件基金会 发行的用于计算机软件的一种许可证制度。
GPL 最初是由 Richard Stallman 为 GNU 计划而撰写。目前,GNU 通行证被绝大多数的 GNU 程序和超过半数的自由软件采用。
GNU 宽通用公共许可证( 简称 LGPL )是由 GPL 衍生出的许可证,被用于一些 GNU 程序库。
二、GPL 许可证的历史
GNU 通用公共许可证是由 Richard Stallman 为了 GNU 计划而撰写的,它以 GNU 的 Emacs 、GDB、GCC 的早期许可证为蓝本。上述的这些许可证都包含了一些 GPL 中的版权思想,但是仅仅针对特定的某个程序。Richard Stallman 的目标是创造出一种通用的软件许可证制度,来为所有的开源软件代码计划使用。
GPL 的“版本 1”,在 1989年 1 月诞生。在 1990 年时,因为一些共享库的使用而出现了对 GPL 许可证制度更为宽松的需求,在 GPL “版本 2”于 1991 年 6 月发布时,另一许可证——库通用许可证( Library General Public License,简称 LGPL )也随之发布,并记做“版本 2 ”以示对 GPL 的补充。在 LGPL 版本 2.1 发布时与 GPL 版本不再对应,而 LGPL 也被重命名为GNU宽通用公共许可证(Lesser General Public License)。
GPLv3 在 2007 年 6 月份开始使用,由于对专利权和数字版权限制的问题造成了自由软件阵营的一次很大的争论。Stallman 于 2006 年 2 月 25 日在自由开源软件开发者欧洲会议上发表的演讲中,对 GPLv3 的特点作了解释,相对于 GPLv2 ,主要有如下 4 个不同的方面:
█ 数字版权问题。在 GPLv3 中禁止使用 GPLv3 本身作为数字版权的一部分,同时消费类电子设备上使用 GPLv3 代码必须开放源代码,而且允许用户自己重新构建。
█ 专利扩散许可。在 GPLv3 中如果具有专利的代码加入之后,此专利会自动向整个应用程序授权此专利。
█ 衍生产品的定义。在 GPLv3 中定义了衍生产品,即如果某个模块采用了 GPLv3 协议,某个产品使用此模块动态链接后,如果此模块可以被其他模块代替,则这个产品不是 GPLv3 协议,否则需要采用 GPLv3 协议。
█ GPLv3 协议与其他协议的兼容问题。
三、GPL 的自由理念
软件的版权保护机制在保护发明人权益的同时,对软件的技术进步造成了影响。版权所有软件的最终用户几乎不能从所购买的软件中得到任何软件设计相关的权利(除了使用的权利),甚至可能限制像逆向工程等法律允许范围内的行为。
与此对应,GPL 授予程序的接受方下述的权利,即 GPL 所倡导的“自由”:
█ 可以以任何目的运行所购买的程序;
█ 在得到程序代码的前提下,可以以学习为目的,对源程序进行修改;
█ 可以对复制件进行再发行;
█ 对所购买的程序进行改进,并进行公开发布。
自由软件许可证除了 GPL 许可证之外,还有一些其他的许可证,如 BSD 、APACHE 等许可证。一些许可证比 GPL 的许可证的限制要少得多,例如 BSD 许可证并不禁止其演绎作品变成版权所有软件。
它们之间的最主要区别是 GPL 提供一种软件复制和演绎产品的许可证继承保证。Stallman 发明了一种叫做 Copyleft 的法律机制,要求所有 GPL 程序的演绎作品也要在 GPL 许可证之下。
目前,GPL 许可证是自由软件和开源软件的最流行许可证。到 2004 年 4 月为止,GPL 许可证已占 freshmeat ( 最大的 UNIX 平台和跨平台软件网络发布平台 )上所列的自由软件的 75% , SourceForge 上所列软件的 68%。GNU 软件中最著名的 GPL 自由软件包括 Linux 内核和 GCC 编译器包。
四、GPL 的基本条款
GPL 许可证作为 Linux 平台软件的主要许可证,有很多独特的地方。GPL 授权的软件并不是说使用者在得到此软件后可以无限制地使用,而是要遵循一定的规则,其中主要的一点就是开放源代码。使用 GPL 授权发布的商业软件,也并不是不要钱,其盈利模式是采用收取服务费用的方式来获取利益。GPL 中的主要条款包括权利授予、Copyleft。
1.授予的权利
采用 GPL 条款的软件分发给使用人,不管是收费还是免费,其作品符合 GPL 授权, 获得 GPL 作品的人成为许可证接受人。许可证接受人有修改、复制、再发行此作品或者此作品的演绎版本的权利,许可证接受人可以由上述的行为收取费用而获利。与一般禁止商业用途的软件不同,GPL 授权的软件不禁止商业用途,例如 Stallman 最初的 Emacs 就是收取费用的,每份 150 美元。
GPL 的授权通常被人理解为免费,其实这是两种完全不同的概念:GPL 在出售产品的同时需要提供源代码,同时允许获得软件的产品进行再次发布。一般的 GPL 分发软件的盈利模式是采用服务的方式,即如果想更好地使用此软件,需要向分发者提供报酬,分发者对使用者的软件进行优化或者进行人员培训等工作。例如 IBM 提供的软件中就有 GPL 协议的,但是 IBM 是典型的服务获利的公司。
GPL 授权的另一层含义是要求分发者提供源代码,防止软件开发商对软件进行锁定,限制用户的某些行为。如果用户获得源代码,在分析源代码的基础上,可以修改某些设置,对源软件进行功能开放。
2. Copyleft
GPL 许可证不是授予许可证接受人无限制的权利,接受人在因为 GPL 而获益的时候 ( 获得软件产品的源代码 )必须遵守一定的要求。GPL 协议要求许可证的接受人在进行软件再次发布的时候必须要公开源代码,同时允许对再发行软件进行的复制、发行、修改等的权利,即再发行的软件必须为 GPL 许可证。
上述的这种要求称为Copyleft ,GPL 由此而被称为 “被黑的版权法”。因为 GPL 的法理基础是承认软件是拥有版权的,即作品在法律上归版权所有。由于软件的版权由发行者所有,所以发行者可以对软件的发行规定进行设罝,GPL 就是发行者对版权进行上述规定,放弃一定的版权。如果某个再发行版本不遵循 GPL 许可证,因为原作者对作品拥有版权,这样就有可能被原作者起诉。
GPL 的 copyleft 仅仅在程序的再发行时发生作用,如果受权人对软件进行修改后没有进行发行,是可以不开放源代码的。Copyleft 只对发行的软件本身起作用,对于软件的输出或者工作成果不起作用。
GPL 软件的发行方法都是把源代码和可执行程序一同发行,一般提供例如 CD 等。目前通行的发行 GPL 软件的方法是将软件放置到互联网上,由用户来下载,例如 HTTP、FTP 等方式。
五、关于 GPL 许可证的争议
使用 GPL 的许可证造成了很多争议,主要是对软件版权方面的界定、GPL 的软件传染性、商业开发方面的困扰等。
比较有代表件的是对 GPL 软件产品的链接库使用的产品版权界定,即非 GPL 软件是否可以链接到 GPL 的库程序。
对于 GPL 开放源代码进行修改的产品遵循 GPL 的授权规定是很明确的,但是对于使用 GPL 链接库的产品是否需要遵循 GPL 存在很大分歧,但是其他专家并不认同这种观点,分成了自由和开放源代码社区两派。这个问题其实不是技术问题,这是一个法律界定的问题,需要法律的案例来例证。
由于 GPL 许可证需要授权人对再发行产品按照 GPL 许可证发行,所以在使用许可证软件的时候需要注意。有很多协议是 GPL 兼容的,即这种协议和 GPL 协议的软件共同使用,并且将开发完毕的软件产品作为 GPL 来发行是没有问题的,例如 MIT/X 许可证、BSD 许可证、LGPL,它们和 GPL 许可证兼容;有一些许可证是 GPL 不兼容的,例如某些自由软件的许可证。开发者在开发的时候,要使用 GPL 兼容的许可证,以免引起法律问题。
GPL 再发行软件必须采取 GPL 许可证的问题,被微软的首席执行官 Steve Ballmer 称为“癌症”,认为 GPL 是有“传染性”的“病毒”。由于包含 GPL 代码或动态链接到 GPL 库被理解为“演绎作品”,必须按照 GPL 许可证的强制继承来使用 GPL 分发。微软已经以 GPL 为许可证发行了 SFU ( Microsoft Windows Services for UNIX ) 中所包含的部分组件, 例如 GCC 编译器。
六、Linux 软件开发的可借鉴之处
在 Linux 的发展过程中,形成了一种独特的成功模式,包含软件的开发模式。Linux 操作系统的成功从一个系统工程的角度看有很多值得项目管理人员学习的东西,Linux 的开发模式主要包含如下几个方面:
█ 使用集市模式进行软件开发应该有一个基本成型的软件原型,这样后来的参与者能够对此进行改进,更重要的是能够看到成功的曙光、可以看到不远的将来能够成功,获得参与的动力。
█ 集市模式的开发把软件的使用者作为开发的协作者而不仅仅是一个简单的用户,这样开发者和使用者能够共同对作品进行快速的代码改进和高效率的调试。
█ 集市模式开发使用早发布、常发布的方法,来方便听取客户的建议,对软件进行改进。项目的开发者想出好主意是件好事,而从使用者那里获得的建议是比前者更好的事情。因为从使用者那里提出的建议是有的放矢,更加切合实际的。
█ 集市的开发模式验证了如下一个成功的假设:如果参与软件 Beta 版测试的人员足够多,几乎软件中所有存在的问题都能够被迅速地找出并进行纠正。
█ 对于集市开发模式的项目来说,比技能和设计能力更为重要的是项目协调人员必须具有良好的人际和交流能力。因为为了建造一个成功的开发小组,需要项目的领导人员所作所为必须让参与者感兴趣并能够有参与的动力,使得参与者感到他们正在做的工作十分有趣( 这是因为一般的项目是没有报酬的,大家按照兴趣参加 ),这不仅仅是项目的本身,与领导者的个人素质有很大的关系。
从 Linux 社区中还可以获得更多睿智的经验或者知识,例如 Linux 所持的一种观点: 使用聪明的数据结构和笨拙的代码的搭配方式要比相反的搭配方式更好,可以作为软件开发的一种基本的常识。