自由软件运动能长久发展下去吗?(上)
中科红旗软件技术有限公司 孙玉芳
一、众多议题
19世纪80年代初,美国微软等公司聪明地将专利法的概念应用于软件产品之上。“版权所有(Copyright)”使软件产业的生产力得到革命性的解放,软件产品从此摆脱了硬件厂商的束缚,出现了真正意义上的独立软件产品供应商,也成就了微软那样的庞大帝国。然而,微软等软件帝国在软件领域的垄断之举充分显示了专利法的滥用已经开始阻碍人类知识的积累、进步与传播,从而导致了旷日持久、规模空前的美国20个州政府、众多公司及传媒告微软公司垄断案,并以联邦法官宣告分拆微软帝国为二暂告一段落。今天,软件产业正在经历一次新的生产力解放——自由软件运动。其标志是共享的、开放的源码使应用软件产品和软件服务摆脱以操作系统为核心的公共基础软件供应商的垄断束缚,出现真正意义上的独立应用软件供应商和软件服务供应商。自由软件运动也带来了自由、共享、奉献的思想和全新的软件开发模式。
自由软件运动的“红旗”能够打多久?自由软件是否反对知识产权?自由软件是否可以盈利?自由软件生存的基础是什么?自由软件能否在我国发展?……。2000年6月24日,一个星期六的下午和晚上,来自不同领域的专家学者一起探讨了有关自由软件生存与发展的种种问题,进行了一次“自由”的思想交流与碰撞。本人有幸参加了这次研讨,受益匪浅,也发表了自己的一些观点,但意犹未尽,现整理成文,供大家讨论。有一些问题本专题前面已有所涉及,本文将集中围绕“自由软件”这一论题,力求反映本人及他人的一些观点,欢迎批评指正。
二、何谓自由软件及其它
在讨论这一问题之前,我们先把涉及自由软年相关议题、术语理一下,这样会对下面的讨论有所帮助。必须说明,这里用到了网上的许多资料(尤其是AKA的文件)。
1.自由软件(Free software)
有关此术语,自由软件基金会(Free Software Foundation)的创始人理查德•斯托曼先生(R. Stallman)有过非常精辟的说明。他说:“‘free software’这种术语有时会被误解——事实上它和价格毫无关系。它的涵义是自由。这是自由软件的定义所决定的。对于你,某个特定的用户来说,如果某个程序称为自由软件,那么:
你拥有运行该程序的自由,而且可以用于任何目的。
你拥有修改该程序适应你个人需要的自由。(为了在实践中使这一自由成为可能,你必须能够获得源码,因为没有源码而试图修改程序是极端困难的。)
你拥有再发行拷贝的自由,可以是无偿的,也可以收费。
你拥有发行该程序修改后版本的自由,从而使社团可以从你所作的改进中获益。
因为这里‘free’的涵义是自由而非价格,自由软件和销售拷贝之间并没有矛盾。事实上,销售拷贝的自由是至关重要的:把自由软件收集到CD-ROM上出售对整个社团都很重要,而销售它们又是为开发自由软件筹集资金的重要手段。因此,如果人们无法将某个程序自由地收集到这些集合中时,这个软件就不是自由软件。
由于‘free’一词具有歧义,人们长久以来都在寻找另外的词来替代它,但直到现在还没有找到其合适的替代词。英语的单词与单词之间的细微差别比世界上其他的语言更多,然而它却缺少了一个简单明了、没有歧义的单词表示自由(freedom)中的‘free’。
再明确地说,自由软件是指允许任何人使用、拷贝、修改、分发(免费/少许收费)的软件。尤其是这种软件的源码(通常是指用C、Fortran、C++等高级语言书写,程序员容易看懂的程序代码)必须是可得到的。从某种意义上说,“没有源码,就称不上是(自由)软件。”
如果一个程序是自由的,则它可以被像GNU/Linux这样的自由操作系统所包含。
有许多方法可以使一个程序变成自由的。具体而言,有许多决定性的因素,下面列出了一些:
自由软件实质上是免费的,不标价出售。但有时软件公司在提及价格时使用“free software”这个字眼,他们的意思可能是你可以免费获得一份二进制码(相对于源码来说,这是源码经过编译、装配而得到的“0101…”的符号串,人们根本不可理解)的拷贝,也可能是在所你购买的机器中已经包含了一份拷贝。但是,这种说法与下面所说的GNU计划中的 “free software”的意义不同。
由于在操作中极易混淆,因此一旦软件公司说他们的软件是自由软件,您一定要检查您是否得到了自由软件所应包括的一切。有时,您得到的是自由软件,有时却不是。
在许多语言中,“free”一词有两种意义:一是自由,二是免费。如法语的“libre”和“gratuity”,英语的“gratis”都明白无误地指价格(免费),但没有明白无误地说明“自由”的意义,这很不幸的。
通常自由软件都比非自由软件更加可靠。
2.开放源码软件(Open Source software)
“开放源码”软件或多或少有些自由软件的味道,但“开放的源码”不等于“自由”软件。
历史的发展进程是,向新用户传授自由的概念在1998年变得更为困难了,因为GNU社团的一部分决定停止使用“自由软件”,而代之以“开放源码软件”。
理查德•斯托曼在《GNU操作系统与自由软件运动》一文中说道,“倾向于这一说法的有些人希望能避免free的歧义性,即避免将‘自由’与‘免费’相混淆——这是一个合理的目标。但是,另一些人的目的则是把激励自由软件运动与GNU工程的原则精神搁置一旁,转而去吸引公司经理们和商业用户们,他们中许多人所持的意识形态置利润于自由之上、社会之上、原则之上。因此,‘开放源码软件’的词义着重于创造强大的、高质量软件的潜力,而回避了自由、社会和原则这些概念。”
“来自公司的支持可以在很多方面为社团做出贡献,如果其他条件不变,那么是大有裨益的。然而,通过少提自由与原则以获取它们的支持将会是灾难性的,它会使在自由软件外延的影响对自由软件内涵的认识之间已存在的不平衡进一步恶化。
‘自由软件’与‘开放源码软件’多多少少描述了软件的同一范畴,但强调了软件的不同侧面和价值观。GNU工程继续使用‘自由软件’这一名词,以表示自由、而不仅仅是技术,才是重要的。”
3.自由软件基金会(Free Software Foundation)
随着人们使用Emacs(是理查德•斯托曼自1984年开始开发的用以在UNIX机器上进行编辑工作的软件,因为他没有兴趣使用复杂难用的vi或ed。现在Emacs的功能已非常强大,而且不局限于编辑文件了)的兴趣日益增加,其他人也开始参与GNU工程,为了抓住再次寻求资助的时机,以理查德•斯托曼为首在1985年创办了自由软件基金会(FSF),这是一个完全致力于自由软件开发的免税福利机构。FSF同时也接管了Emacs磁带发行业务,接着FSF在磁带上增加了GNU的和其他非GNU的自由软件,并出售自由软件的使用手册,FSF的业务得到了进一步的扩展。
FSF接受捐赠,但它的绝大多数收入来源于销售自由软件拷贝以及其他服务。今天它销售的产品包括含有源代码的光盘,可执行程序的光盘、印制精美的使用手册(全都包括修改和再发行的自由)及其豪华版(FSF为客户指定的平台制作完整的软件包)。
FSF的雇员编写了并维护着数量相当多的GNU软件包。其中值得一提的两种是C库和shell(命令解释器)。任何运行于GNU/Linux系统之上的程序都用GNU C 库作为与Linux内核通信的中介。它是由FSF的一位工作人员Roland McGrath开发的。绝大多数GNU/Linux系统上使用的shell都是BASH(Bourne Again Shell,是对UNIX上最早也是最常用的Bourne Shell开的玩笑),它由FSF雇员Brian Fox开发。
GNU资助了这些程序的开发,因为GNU工程的注意力并不只局限于工具和开发环境,而是一个完整的操作系统,而这些程序是实现这一目标所必需的。
4.公共软件(Public domain software)
公共软件就是没有版权的软件。它是非copyleft自由软件(non-copylefted free software)的一种特殊情况,意味着某些拷贝或修改版不再是自由的。
有时人们很随便地使用“公共(public domain)”这个字眼来表示“自由(free)”或“免费获得(available gratis)”。然而,“公共(public domain)”本身有非常精确的含义——“无版权(not copyrighted)”。为清楚起见,建议尽可能使用“公共(public domain)”一词来表示这种含义。
5.Copylefted软件(Copylefted software)
GNU的目的是给用户以自由,而不仅是为了争取大量用户。因此FSS使用了某种发行条件,以避免将GNU软件变成专有软件。这种方法称为 “Copyleft”(版权所有)。
Copyleft利用了版权法,但反其道而行之,以达到与通常相反的目的:将一种将软件私有化的手段转变成了保持软件自由的手段。
Copyleft的中心思想,是给予任何人运行、拷贝、修改以及发行改变后程序的许可,但不准许附加他们自己的限制。从而保障了每个人都有获得“自由软件”的软件拷贝的自由,它们成为了不可异化的权力。
要保证Copyleft的有效性,那么修改后的版本出必须也是自由的。这保障了在大家工作的基础上所完成的效果一旦公布后,也能为GNU社团所用。当专业编程人员自愿帮助改进GNU软件时, “Copyleft”可以防止他们的雇主声称:“你不能和人共享这些改动,因为我们会用它创建我们自己专有软件的版本。”
所以为确保程序对每位用户都自由,那么所作改动也必须保持自由这个前提是必不可少的。将X Window系统私有化的那些公司通常对程序做了某些修改,以便将X Window系统移植到他们的系统和硬件上。这些改动与整个X Window系统的广泛内容相比并不算大,但并非微不足道,如果这些修改可以作为拒绝给用户以自由的借口,人们都会轻而易举地利用这一借口。
一个相关的问题涉及到将自由的程序与不自由的代码相结合。这样一个组合将不可避免地失去自由性;无论不自由的部分缺乏何种自由,都会使整个程序丧失自由。因此,“Copyleft”的一个关键要求是封堵这一漏洞:任何添加或者组合到自由软件上的部分都不允许附加其他限制,从而保证其结果的整体是自由的、“版权所无”的(Copylefted)。
作为Copyleft的一种特定实现形式,GNU社团用“GNU公众许可证(简称GPL)”来标明绝大多数GNU软件的许可证。在特殊情况下使用的其他类的 “Copy-left”许可证。GNU的使用手册也采取了Copyleft许可证,但使用的一种大大简化的方式,因为手册不需要GNU GPL那样的复杂度。
Copyleft软件是一种自由软件,它的分发条款不允许分销商在分发或修改软件时增加任何额外的限制。这意味着,无论是否修改过,该软件的每个拷贝都是自由软件。
Copyleft软件是一种自由软件,它的分发条款不允许分销商在分发或修改软件时增加任何额外的限制。这意味着,无论是否修改过,该软件的每个拷贝都是自由软件。
在GNU计划中,执行者对所写的所有软件都实行copyleft,因为其目标就是使每个用户得到“自由软件”所体现的自由。
Copyleft是一个通用的概念,实际上它也是一个程序,需要有一套具体的分发条款。
6.非Copylefted自由软件(Non-copylefted free software)
非Copyleft自由软件是指作者允许对其进行分发、修改、及增加一些附加限制的软件。
如果程序是自由的但非Copyleft的,那么它的拷贝或修改版本可能就不再是自由的了。软件公司可能对该程序进行了修改,也可能没有,但都可以将它进行编译,然后作为私有软件产品进行分发。
X Windows系统是一个极好的例子。X 联盟在发布X11时的分发条款中指明该软件是一非Copylefted自由软件。只要你想要,你就可以免费得到带有分发条款的拷贝。然而,它还有一个付费版本,主要用于流行的工作站及PC。如果你恰好在使用这种硬件(工作站或PC),那么对你来说,X11就不是自由软件。
7.GPL(GPL-covered software)
GNU GPL(General Public License)是一个针对免费分发程序的具体分发条款。GNU工程使用GPL作为分发大部分GNU软件的分发条款。这一条款的核心思想体现在三个方面:一是有复制程序并且把它送给你的朋友或者同事的自由;二是有通过获取完整的代码,按照你的意愿修改程序的自由;三是有发布软件的改进版并且以此创建自由软件社团的自由。
8.GNU 软件(GNU software)
GNU软件是在GNU计划赞助下发行的软件。大多数GNU软件是免费分发的(copyleft),但不是所有的都这样;然而,所有的GNU软件必须是自由软件。
有一些GNU软件是由FSF成员编写的,但大多数GNU软件是志愿者捐献的。有些捐献软件是由FSF免费分发,但有一些软件由作者享有版权。
9.GNU系统(The GNU system)
GNU是“Gnu not UNIX”(GNU不是UNIX)的递归同义词,主要是UNIX后来成为了商业软件,且不公开源码,所以不可能成为自由软件,虽然有些版本(如FreeBSD)是开放源码的。
GUN系统是一个完全免费的、类Unix操作系统。一个类Unix操作系统由许多程序组成。以理查德•斯托曼为首的自由软件运动先驱们从1984年开始为这个系统累积构件;“完整GNU系统”的第一个测试版本在1996年发布。他们曾经希望这个系统在一年左右的时间就可以完全成熟以推荐给普通用户使用,但没有成功。
GNU系统不等价于所有GNU软件的集合,GNU系统中包括所有的GNU软件,也包括如X Window和TeX等非GNU软件。由于GNU的目的是自由,因此在GNU系统中每一个构件都是自由软件。然而它们并不都是免费分发的,任何一种自由软件都可以被吸收进来,只要它们能帮助系统达到技术目标。许多人能够也确实在使用一些非Copyleft软件,如X Window系统。
10.准自由软件(Semi-free software)
准自由软件不是免费的,但允许个人出于非盈利性地使用、拷贝、分发及修改(包括分发修改版本)。PGP是一个准自由程序的例子。准自由软件比私有软件好得多;但是还有问题,为此,GNU计划不在自由操作系统中使用它。
copyleft中所做限制的目的是为了保护所有用户的自由。对GNU计划来说,对使用程序加上的限制的目的是防止其他人附加上其他的限制。准自由程序存在一些限制,但决非单纯出于自私的目的。
不可能在自由操作系统中包含准自由软件,其原因在于操作系统的分发条款是其中所有程序分发条款的总和。增加一个准自由程序到操作系统中就使整个系统变成准自由的。GNU计划不那样做是出于以下两个理由:
· GNU计划坚信自由软件是为了每一个人——不仅为了学校和业余爱好者们,也包括商业单位。GNU计划邀请商业单位使用GNU系统,因此不能在里面包含准自由软件。
· 商业公司分发自由操作系统,包括基于Linux的GNU系统,是非常重要的;而且用户也乐于能买到商业CD-ROM发行版本。在操作系统中包含准自由软件会剥夺商业发行版本的权利。
FSF本身是非商业性的,因此被获准“在内部”合法使用准自由软件。但GNU计划并没有那样做,因为如果获得这种一个准自由程序并把它包含在GNU中,那么可能会破坏GNU计划的努力。
如果有一个工作需要某软件来完成,而GNU中并没有一个自由程序来完成它,那么GNU计划就存在这么一个缺口,此时GNU计划不得不对志愿者说,“GNU计划中目前没有一个程序来做这件事,因此希望你们能写一个。”若不是这样,而是使用了一个准自由程序来做这件事,则执行者就自食其言,也(使GNU计划执行者和听信于GNU计划执行者的人)丧失了编写一个完成这一功能的自由软件的动力。因此,GNU计划执行者不能这样做。
11.私有软件(Proprietary software)
私有软件不是自由及非自由软件,对它的使用、传播或修改是被禁止的,要么需要你申请许可,要么它限制你不能充分自由地使用它。
自由软件基金遵守规定,不在计算机中安装任何私有软件,除非为了编写那个程序的替代品而暂时安装到计算机上。除此之外,找不到其他借口要安装私有程序。
例如,在80年代,FSF认为在计算机安装Unix是正当的,因为当时要编写一个Unix的免费替代品。现在,由于有了自由操作系统,因此这个借口就不再使用了;GNU计划执行者消除了所有的非自由操作系统,任何新计算机上安装的都是自由操作系统。
GNU计划不能强迫GNU的用户或GNU的贡献者必须依此规则行事;它是给GNU自己制定的规则,但GNU执行者希望你能下决心遵从它。
12.免费软件(Freeware)
“freeware”没有一个清晰的定义,但是它通常指那些允许分发不允许修改的软件包(不提供源码)。这些软件包不是自由软件,因此不要用“freeware”来指自由软件(自由软件)。
13.共享软件(Shareware)
共享软件允许用户分发该软件,但是任何人想继续使用它需要支付一笔许可费。
共享软件不是自由软件,也不是准自由软件。有两个原因:
· 对大多数共享软件而言,不提供源码,因此,你不可能修改程序。
· 共享软件不允许在不支付许可费的情况下进行拷贝和分发,即使出于个人的非盈利性的目的(实际上,用户经常忽视分发条款而这样做;当然,分发条款是不允许这样做的)。
14.商业软件(Commercial Software)
商业软件由商业公司开发,通过收取使用费而牟利。“商业”和“私有”不是一回事!大多数商业软件是“私有的”,但也有商业自由软件,也有非商业、非自由的软件。
一个例子是,GNU Ada 永远在GNU GPL条款下进行分发,而且,每一个拷贝都是免费的,但它的开发者却有付费支持合同。有时用户会说,“我们觉得商业编译器比较安全一些。”,推销员则回答,“GNU Ada是商业软件,只不过碰巧它也是一个自由软件。”
对GNU计划来说,它的重点是另一个顺序:重要的是GNU Ada是一自由软件;至于它是否是一种商业软件不是至关重要的。然而,商业公司在此基础上进行的额外开发则有明显的牟利目的。
发布人:Crystal 来自:计算机世界