在20世纪70年代,UNIX体系的源程序大多是可以任意流传的。互联网的基础协议TCP/IP就是产生于那个年代。在当时,人们在创作各自的“程序作品”中享受着从事科学探索、创新活动所特有的那种激情和成就感。那时的程序员,如同艺术家一样,急于“发表”自己的程序作品,并不专注于保守“机密”,以换取高额利润。
1979年,AT&T宣布了UNIX的商业化计划,随之出现了各种二进制的商业UNIX版本。于是就兴起了基于二进制机读代码的“版权产业”(Copyright Industry),使软件业成为一种版权专有式的产业,围绕程序开发的那种创新活动被局限在某些骨干企业的小圈子里,源码程序视为核心“商业机密”。这种做法,一方面产生了大批的商业软件,极大地推动了软件业的发展,诞生了一批软件巨人;另一方面,由于封闭式的开发模式,也阻碍了软件业的进一步深化和提高。由此,人们为商业软件的“专有权”付出了巨大的代价。
1983年,理查·马修·斯托曼(Richard Stallman)创立了GNU(GNU官方网站:http://www.gnu.org/)计划。这个计划有一个目标,是发展一个完全免费自由的类UNIX操作系统。自20世纪90年代发起这个计划以来,GNU开始大量地产生或收集各种系统所必备的组件,如函数库、编译器、调试工具、文本编辑器、网站服务器等。1990年,GNU计划开始在马赫微核(Mach microkernel)的架构之上开发系统内核,但是这个基于Mach的设计异常复杂,发展进度则相对缓慢。
到了1990年,GNU计划已经开发出的软件包括了一个功能强大的文字编辑器Emacs、C语言编译器GCC及大部分UNIX系统的程序库和工具。唯一依然没有完成的重要组件,就是操作系统的内核。
1991年,李纳斯·托瓦兹(Linus Torvalds)编写出了与UNIX兼容的Linux操作系统内核并在GPL条款下发布。Linux之后在网上广泛流传,许多程序员参与了开发与修改。
1992年,Linux与其他GNU软件结合,完全自由的操作系统正式诞生。该操作系统往往被称为“GNU/Linux”或简称Linux。(尽管如此,GNU计划自己的内核Hurd依然在开发中,目前已经发布Beta版本。)
许多UNIX系统上也安装了GNU软件,因为GNU软件的质量比之前UNIX的软件还要好。GNU工具还被广泛地移植到Windows和Mac OS上。
GNU十几年以来已经成为一个对软件开发主要的影响力量,创造了无数重要的工具,如强健的编译器、有力的文本编辑器,甚至一个全功能的操作系统。这个工程是从1984年麻省理工学院的程序员Richard Stallman的想法得来的,他想要建立一个自由的、和UNIX类似的操作环境。从那时开始,许多程序员聚集起来开始开发一个自由的、高质量的、易理解的软件。
GNU通用公共许可证,通常以GNU GPL称呼或直接简短为GPL。GPL给予了计算机程序自由软件的定义,并且使用了所谓的“Copyleft”来确保程序的自由被完善地保留。GPL目前主要有以下三个版本。
(1)GPLv1。GPL版本 1,即最初的版本,发布于1989年1月,其目的是防止那些阻碍自由软件的行为,而这些阻碍软件开源的行为主要有两种(一种是软件发布者只发布可执行的二进制代码而不发布具有的源代码,一种是软件发布者在软件许可加入限制性条款)。因此按照GPLv1,如果发布了可执行的二进制代码,就必须同时发布可读的源代码,并且在发布任何基于GPL许可的软件时,不能添加任何限制性的条款。
(2)GPLv2。理查德·斯托曼在GPLv2中所做的最大的改动就是增加了“自由还是死亡”这章条款,即第七章liberty-or-death Presentation。这章中声明道,如果哪个人在发布基于GPL的软件的时候,同时添加强制的条款,以在一定程度上保障和尊重其他一些人的自由和权益(也就是说,在一些国家里,人们只能以二进制代码的形式发布软件,以保护开发软件者的版权),那么他将根本无权发布该软件。到了1990年,人们普遍认为一个限制性弱的许可证对于自由软件的发展是有战略意义上的好处的,因此当GPL的第2个版本(GPLv2)在 1991年6月发布时,与此同时第2个许可证程序库GNU通用公共许可证(LGPL,the Library General Public License)也被发布出来,并且一开始就将其版本定为第2版本以表示其和GPLv2的互补性。这个版本一直延续到1999年,并分支出一个派生的LGPL版本号为 2.1,并将其重命名为轻量级通用公共许可证,又称宽通用公共许可证(Lesser General Public License),以反映其在整个GNU哲学中的位置。
(3)GPLv3。2005年,GPL版本3正是由斯托曼起草的,由伊本·莫格林和软件自由法律中心(Software Freedom Law Center)提供法律咨询,2007年3月28日正式启用。斯托曼在2006年2月25日自由及开源软件开发者欧洲会议的演讲上说在GPL所有的改动中,最重要的包括以下四点。
· 解决软件专利问题。
· 与其他许可证的兼容性。
· 源代码分割和组成的定义。
· 解决数字版权管理问题。
DRM是Digital Rights Management(数字版权管理)的缩写,DRM指的是出版者用来控制被保护对象的使用权的一些技术,这些技术保护的有数字化内容(如软件、音乐、电影)及硬件,处理数字化产品的某个实例的使用限制。本术语容易和版权保护混淆。版权保护指的是应用在消费电子产品上的数字化媒体内容上的技术,版权保护技术使用以后可以控制和限制这些数字化媒体内容的使用权。
GPL不会授予许可证接受人无限的权利,再发行权的授予需要许可证接受人开放软件的源代码及所有修改,且复制件、修改版本,都必须以GPL为许可证。这些要求就是“copyleft”,他的基础就是作品在法律上版权所有。由于版权所有,许可证接受人就无权进行修改和再发行(除合理使用),除非有一个“copyleft”条款。如果某人想行使通常被法律所禁止的权利,只需同意GPL的条款。相反地,如果某人发行软件违反了GPL(如不开放源代码),他就有可能被原作者起诉。“copyleft”利用版权法来达到与其相反的目的:“copyleft”给人不可剥夺的权利,而不是版权法所规定的诸多限制。这也是GPL被称为“被黑的版权法”的原因。许多GPL软件发行者都把源代码与可执行程序捆绑起来。另一方式就是以物理介质(如CD)为载体提供源代码。在实践中,许多GPL软件都是在互联网上发行的,源代码也有许多可以FTP方式得到。“copyleft”只在程序再发行时发生效力。对软件的修改可以不公开或开放源代码,只要不发行。“copyleft”只对软件有效力,而对软件的输出并无效力(除非输出的是软件本身)。
GNU宽通用公共许可证(GNU Lesser General Public License,LGPL)是一个自由软件许可证,由自由软件基金会发布,被用于一些(但不是全部的)GNU程序库。这个许可证以前被称为GNU库(Library)通用公共许可证。此许可证最新版本为“版本 3”,2007年6月29日发布,较早的版本有 2.0版和 2.1版。
GPL和LGPL的主要差异为,后者允许LGPL的代码被连接入(作为一个库文件)一个非GPL的程序,而不考虑是自由软件还是商业软件。