1、GPL协议诞生的时代背景

1970年在贝尔实验室诞生了伟大的操作系统:UNIX。在UNIX发展初期,当时的UNIX版权归AT&T公司所有。为了促进UNIX的发展,AT&T公司以低廉甚至免费的许可将UNIX源码授权给学术机构做研究或教学之用,许多机构在此源码基础上加以扩充和改进,形成了所谓的UNIX衍生版,这些衍生版反过来也促进了UNIX的发展。
后来AT&T公司意识到了UNIX的商业价值,不再将UNIX源码授权给学术机构,并对之前的UNIX及其变种声明了版权权利。这对UNIX的发展产生了很大的影响,从此之后UNIX成为一个对源代码实行知识产权保护的传统商业软件。

随着时间的发展,人们发现如果软件源码作为个人或公司的私有财产受到严格的保密,长期以来则很难做到像文学艺术作品一样地进行公开的交流,很大程度上造成软件的低水平,重复劳动严重,在一定意义上制约了软件的发展。

1985 年由 MIT 教授理查德·斯托曼(Richard Stallman)提出应将软件源码看成人类共同拥有的知识财富,应该公开地自由交换、修改,提出了 GNU 计划(名称来自GNU's Not Unix!的递归缩写,因为GNU的设计类似Unix,但它不包含具著作权的Unix代码),并建立了自由软件基金会。同时,发布了一份举足轻重的法律文件,GNU 通用公共授权书(GNU GPL, GNU General Public License)。

该授权书主要有以下几点:

  • 自由软件(free software)指的是源码自由,不是价格;
  • 自由软件必须附带程序源代码,但可收取费用;
  • 任何人都可以自由分发自由软件并收取费用,但必须列明原创者姓名;
  • 任何人都可以修改源代码,但必须列明修改人名字,以保护原创者名誉;
  • 任何人都可以采用源代码中的某一段,但其开发之软件必须也为自由软件(例如,如果 Netscap 是自由软件,而 IE 采用了其中的部份源代码,则 IE 也必须成为自由软件);
  • 任何自由软件的衍生品也必须是自由软件;
  • 自由软件没有担保,以保护分发者。

GPL 协议的核心就是要对源码进行公开,并且允许任何人修改源码,但是只要使用了 GPL 协议的软件源码,其衍生软件也必须公开源码,准许其他人阅读和修改源码,即 GPL 协议具有继承性。

另一个问题就是 GPL 软件并非就是免费软件,这里所说的自由软件是指对软件源码的自由获得与自由使用、修改,软件开发者不但可以通过服务来收费,而且还可以通过出售 GPL 软件来获利。

1991 年,Richard Stallman 对授权做了微小的修改,即所谓的通用公共授权第 2 版。同时,他也推出了更宽松的通用公共授权,用于自由程序库。这一系列的授权有效地保护了自由软件不受商业软件的非法侵犯。

至此,在 GPL 下人们就可以自由交流、修改软件源码了,这一协议极大地推动了整个计算机软件行业的发展,并带来了以下明显的益处:
对于广大计算机软件的学习者来说,可以直接从源码中吸取营养,缩短学习的时间,提高学习的效率,少走弯路,再也不必花大量时间去看那些不知正确与否的“未解之谜”了,学习在某种程度上变成了一件轻松愉快的事情了。

可以集中大家的智慧发展软件,避免重复劳动。一个软件只有公开源码,通过很多人的研究才有可能发现其中深藏的错误,大家才能公开探讨相关的问题,并进行改进,在大家的共同“挑剔与监督”下才有可能编写出尽善尽美的软件来。

2、GPL协议的理解(开源与商用、免费与收费的理解)

看过GPL协议的人应该都会觉得一头雾水,究竟GPL在讲些什么。我看过好几遍,英文的原版、中文的各种译文,都没能真正理解,后来是从软件行业的 历史等等方面综合考虑,才算是理解了。

先总结一下我对GPL的理解,我认为GPL的精髓就是开源,和是否商用,是否收费完全没有关系。

GPL(General Public License), 其实从字面上就可以理解为公共许可证,也就是说遵循GPL的软件是公共的,其实不存在什么版权问题,或者说公众都有版权,GPL提出了和版权 (copyright)完全相反的概念(copyleft)。而我经常听到的说法是如果你的程序或系统引用了别的GPL软件,并且向用户收费,那么你就需 要向引用的GPL软件购买版权。听上去很合理,如果你用我的软件赚钱,那你当然应该向我支付一定的费用。但其实是错误的,正确的概念是如果你用了我的 GPL软件,那么必须你的软件也要开源,如果你不开源,那么就不能使用我的软件,你是否把你的软件商用和我没关系,如果你不能遵循GPL协议来开源,那么你付再多的钱也不能用GPL的软件, 事实上很多GPL软件是很多人共同完成的,每个人在前人的基础上做出自己的贡献,如果收费的话你把钱交给谁?提出 GPL协议的GNU希望做到的是通过开源来使软件行业得到一个好的发展,试想如果你要做一个大型的软件,不在前人的源码基础上开发,那必然会是旷日持久 的,也会有很多重复劳动,显然不利于软件技术的发展。所以理解了GNU的精神,也就能理解GPL在说些什么,其实就是开源。在现实生活中,我们受益于 GPL的地方,其实很多,几乎所有的操作系统,除了windows,其他的几乎都是基于linux开源代码改写的。

3、自由软件的理解

自由软件的重点在于自由,而非价格。要了解其所代表的概念:你应该将“free”想成是“free speech”(言论自由)中的“free”(自由),而不是“free beer”(免费啤酒)中的“free”(免费)。更精确的说,自由软件代表电脑使用者拥有选择和任何人合作之自由、拥有掌控他们所用的软件之自由。自由软件是指对软件源码的自由获得与自由使用、修改,软件开发者不但可以通过服务来收费,而且还可以通过出售 GPL 软件来获利。