苏荣 2009年06月22日 星期一 14:57 | 1545次浏览 | 3条评论
自由软件
我到这里跟大家谈论自由软件,首先是讨论它在伦理,社会以及政治方面的意义,其次讨论它将带给经济的影响。
自由软件事关自由, 英文"Free"没有清楚地表达这个意义,因为这个词有两个含义。很幸运,在你们的语言里,你们有两个不同的词。所以如果你说“自由”,很清楚你没有在谈论价格问题,而是在谈论“Freedom”。所以,我强烈要求各位,当你们在日本谈论自由软件的时候,用你们自己的没有歧义的语言,而不要用英文的含混不清的词句。
译者注:这是Richard Stallman在日本的演讲,所以谈论到日本(本来要到中国来的,因为非典,没来成。其实像Stallman这样的人,根本不用怕非典——菩萨会保佑他的,呵呵。)。
使用自由软件的原因很简单:自由地生活,特别是:高尚地对待他人。非自由软件说你们是没有用的一盘散沙。它说你甚至不能告诉程序应该干什么;你被认为只能是听命于开发者,他们一般不会告诉你程序是怎么干的。并且,如果你觉得你不喜欢这个程序,你也不能去修改它。即使开发者进了全力去使程序更有用,但没有人能够做到完美,我可以写个程序,你可能会发现它有一部分和你的想法对路。也许我是为了一个不同于你的目的来写这个程序。没有人可以预测所有的事。可能我只是按照自己的思路去做事,但你有一个更好的想法,没有人永远正确。
用了非自由软件你就被束缚住了,你不得不听从它,忍受它。更加重要的是:用了非自由软件,你被禁止和他人分享。一个社会的基础是人与人之间的相互帮助。与一个愿意帮助你的人做邻居是非常好的一件事。当然,不是一直,没有人应该被强迫去帮助他人,不过,如果你对他人友善,他人也经常会乐于帮助你。因此如果我们希望得到帮助的话,最好先去帮助别人。
假如有人说:“禁止你帮助别人”,那会怎么样?你有些有用的知识,你想通过共享这些知识来帮助他人,但是你被禁止与他人共享。这是在攻击社会的纽带,将社会瓦解成孤立的不能相互帮助的个体。
与之形成鲜明对照的是,自由软件意味着你有四项基本自由。自由0是(译者注:呵呵,程序员文化,排序要从0开始):你可以出于任何目的,以任何方式去运行程序。自由1是:自助,即通过学习源代码,研究程序的运行机理,进而修改它以适合你的需要。自由2是:助他,即将程序的拷贝发布给你的朋友。自由3是:通过发布改进的版本来帮助你的社区,使他们可以从你的改进中受益。有了以上这些自由,用户就可以控制自己使用的软件。如果没有这些自由,软件的拥有者就会控制软件,进而通过软件来控制用户。
众所周知,计算机其实自己没有什么思想,无非人叫它怎么做它就怎么做罢了。但是有个问题我们要考虑一下:到底是谁在告诉它该怎么做?当你在用计算机的时候,是你在告诉计算机怎么做?还是有其他人在告诉计算机怎么做?到底是谁在控制你的计算机?这是自由软件的一个问题:自己定义软件的自由,自由0,1,2,3,之所以这些问题事关自由,是因为这些是一个公民要控制他们的计算机所必备的自由。你需要自由0来让你的计算机做任何工作,你需要自由1来让软件按照你的想法来做事情。如果你没有自由1,你就被困住了,你就变成了你的软件的奴隶。
不是所有人都是程序员。如果我们只有自由1,那么程序员可以按照自己的想法去修改软件。但是如果所有程序员都各行其事地来修改软件,那软件就会失去控制。非程序员就根本得不到好处了。这就是为什么自由2和自由3也很关键了,自由2和自由3允许用户结成社群共同工作,来把软件改造成大家都想要的。你作为个体对软件的修改是不被限制的,假如你和另外50个人有共同的想法,你可以把这些想法汇总起来。如果你们中的两三个人是程序员,那就可以对软件进行修改,然后发布给其他人。你们也可以集资来请一个程序员,让他来替你们改软件。你的公司也一样,可以出钱请程序员来按照公司的意图去改软件。如果你们发布了改进的版本,所有人都可以去使用。这样全社会都可以控制软件。
自由软件是一种方法,一种决定软件开发的民主的方法。但这是一种不一般的民主方法,因为我们不是先进行投票表决,然后告诉所有人该做什么。在自由软件社群里,没有人告诉大家应该做什么。每个人都自己做决定。不过一般来说会是这样:如果许多人希望在某个方面对软件进行改善,就会有许多人愿意在这个方面进行努力,这样软件就会在这个方面得到快速提升。如果只有很少的人想在某个方面进行改进,那么在那个方面进行开发的人也会比较少,进展也就会相对缓慢。如果没有人想在这个方面进行改进,这个方面就不会改进。通过我们每个人的决策,我们都会为软件的演进贡献力量,从而最终决定软件将会如何发展。
这样,社会从整体上来控制软件的开发走向。不过你个人,以及任何一个团体和公司都可以自行决定如何来发展一个软件。其结果就是:软件趋向于按照使用者的意愿做事,而不是按照开发者的意愿做事。
许多人会问:“如果所有人都有改变软件的权力,那兼容性怎么办?” 事实上,用户喜欢兼容性。只不过这不是他们唯一喜欢的东西,有时候,有些的用户也会因为另一个好处而想做一个不兼容的变化,如果他们能办到的话。话又说回来,大多数用户还是想要兼容性的,结果就是绝大多数自由软件的开发者都进行艰苦的努力来做到兼容。试想一下,如果我在我的程序里面作了一个用户不喜欢的不兼容的东东。其他人就会修改这个程序让它变得兼容,然后大多数用户都会喜欢他的版本。于是他的版本就会越来越流行,而我的将被人们遗忘。我当然不想发生这种事,我想大家都喜欢我的版本,所以我会在早先就认识到这一点,我会让我的版本从一开始就保持兼容性,因为我想大家喜欢它。因此在我们的社区,开发者不能不顾用户的需要。我们都必须跟着用户走,否则用户就会把我们抛在后头,径自去他们想去的地方。
让我们再来看看非自由软件的开发者,尤其是那些强有力的,他们可以有意制造不兼容。他们太强了,用户对他们无可奈何。微软就是其中的“杰出代表”。他们在协议上制造不兼容,用户就被困住了。还不止是微软,比如WAP,WAP包含了对于普通Internet协议的修改版本,这些修改版本是不兼容的,这个想法使他们可以在电话上实现,他们会说“人们可以在Internet上面通话”,但是由于他们没有使用普通的Internet协议,这个不兼容性会强加给用户,这就是他们的计划。很幸运,这玩艺儿没有成功。但是这表明了,当用户没有真正掌握控制权的时侯,将会面对多大的危险:有人会试图将不兼容强加给用户。
自由软件首先是一个政治、伦理和社会问题,我已经在这个层面解释过了。自由软件在经济层面上也有影响。比如,非自由软件可以被用来创造非常富有的公司,在那里少数人从全世界搜刮金钱,成为巨富,而其他人被盘剥。在许多国家(我相信日本是其中之一),人们买得起电脑,却买不起非自由软件。因此在这些国家,非自由软件成为一个巨大的剥削机器。在任何国家,通过非自由软件,金钱从大多数人那里压榨出来,汇集到极少数人手中。你不能用自由软件达到同样的目的。你不能从人们身上压榨许多的金钱,不过只要你为人们提供了真正的服务,你一样可以和人们做生意。
自由软件的生意现在已经有了。实际上,我在1985年就开始做一个自由软件的业务——销售GNU Emacs的拷贝。那时候我正在寻找通过自由软件赚钱的途径。我说:“给我150美元,我就寄给你一个GNU Emacs文本编辑器的磁带。”人们开始付钱给我,我就寄磁带给他们。我赚的钱足够维持生活。后来我停止了这项业务,因为我开创了自由软件基金会,而由自由软件基金会来发布GNU Emacs显得更加适合,因此我不得不找其他的方法。有许多年,基金会靠这个方法赚钱来雇俑一些人员,包括程序员。因此实际上,如果我自己来做这个业务,我可能靠卖自由软件就可以过得很舒坦。
打那儿以后,我开始了另一项自由软件业务————收取佣金替别人修改软件。
对非自由软件,你不能够去修改它。你是软件的囚犯。所以你要么全盘接受它,要么压根儿就不要用它。对于自由软件,你有这两种选择,但是你还有其他的选择,实际上是有许多不同的选择。你可以或多或少修改它,使用修改后的程序。
现在,如果你是一个程序员,你自己就可以(对软件)进行修改。假设你不是程序员,你也可以付钱给一个程序员来为你修改软件。比方说,一个部门在用一个程序,而人们一致认为这个程序不是他们真正想要的,你就可以很容易地去付钱请一个程序员来把程序改成你想要的样子。这就是我早在80年代干了好些年的自由软件营生。(我本可以接着干,但是我得了一个大奖,此后我就不需要再干这个营生了)
现在不少人用这个办法谋生。我最近听到有从南美来的人说他知道在那里有30个人靠这种生意赚钱。南美并不是科技最发达的地区,但是在那里已经开始了这种业务。我相信早在1989年或是1990年,有一个公司已经开始做这项业务了。那个公司由3个人创建,几年之内就发展到50个人,而且每年都有盈利。他们本来可以继续沿着这条路发展下去,但是他们变得贪婪起来,因此开始开发非自由软件,最后他们被红帽子公司收购了。
不过,在私有制软件的社会里自由软件业务还是一个新生事物。所以很多人都在疑惑:自由软件怎么可能成为一项职业?想想看假如所有的计算机用户都有自由,所有的软件都是自由软件,换句话说,如果你有这个程序,你有自由去运行它,学习它,修改它,再次发布它。那么信息技术领域里的专业职员们又该做什么呢?
其实在这个领域里的所有雇员中,只有一小部分是在编程,而大部分的编程工作是在为客户做定制,也就是说为单个客户做软件。这相当不错,只要客户付一次钱,就可以得到源码,同时获得修改源码的权利,这是法律问题。实际上,这才是客户所真正拥有的自由软件。【因此只有不能做客户化定制的软件才真正是非自由的】
所以在编程工作中,绝大多时都是定制软件;真正出版的软件只是所有软件中的很小一部分。
那么,自由软件会起什么作用?它可能会减少这一小部分的就业量,但也可能不会。因为一方面通过雇佣这些程序员来限制用户的可能性不存在了。然而另一方面会有一种新的可能性取而代之,那就是会有更多的程序员被雇用来改进和扩展自由软件。所以我们将会失去工作机会还是会获得更多的工作机会?这谁也说不准。我们所能确切知道的就是仅有开发通用软件的这一极小部分工作将会缩减,所以不会带来什么就业问题。
让我们来看看人们经常会想到的另一个问题:我们是否能够开发出足够的自由软件来?回答是显而易见的,因为我们已经有了非常多的自由软件。问这个问题的人就好像在问:飞机是不是飞的起来?好,我就在一架飞机上飞行过。也许你们所有人也都乘坐过飞机。我想这些飞机都飞起来了。在现在,我们有成百上千的的人因为开发自由软件而得到报酬。不过我们还有50万以上的的志愿开发者,他们无偿地利用业余时间为许多自由软件进行开发。
所以实际上,自由软件业务不是必须要免费工作的。自由软件业务很有吸引力。如果我们能够建立更多的组织来将资金从用户那里汇集到自由软件开发者手中,我们就可以生产更多更好的自由软件。因此这一定是非常有吸引力的,但还不是关键。我们已经开发了两个完整的操作系统两个图形用户界面的桌面,以及两个办公软件套装,这些统统是自由软件。
人们想了种种富有想象力的方法来创建自由软件,就想你所预料到的,其中一些方法成功了,另一些失败了。比如,去年夏天有这么一件事,有一个大家都很喜爱的非自由软件叫Blender。它的原厂商觉得再继续销售和支持它划不来。他们就不再管这个软件了。但是开发者不想就此放弃,他们就去和厂商谈判,达成了一个协议:如果他们可以募集到10万美元,他们就可以卖下这个软件的权利,把它变成自由软件。然后他们来到社区募捐,短短几个星期就筹到了这笔钱。Blender现在是自由软件了。这个故事说明我们同样可能从社区筹到钱来进行特定的扩展。
一个有名望的程序员可以到社区里宣布:“如果有人出这么多钱,我就做这件工作。”他不需要完全自己来做,他可以雇佣其他的程序员来一起工作,这其实就是你可以起步的方法:在你成名之前,在你在社区里建立威望之前,你可以给其它程序员当学徒,由他们来募集款项和掌控工作。通过这么做,你也可以逐步建立自己的信誉,然后你就可以拥有自己的客户。
一直以来,一些用于社会公众的科学研究,甚或一些仅仅为了满足人类好奇心的科学研究都能够得到政府的资助。基于同样的道理,政府在开发有用的软件方面也应该扮演适当的资助者的角色。政府应该像它在科学研究领域里所作的那样,资助那些可以被公众所使用的软件的开发工作。当开发完成的时候,把它提交出来说:“所有人现在都可以使用它,改进它,这是整个人类的知识。”因为这正是自由软件的本质之所在。它是人的知识,属于全人类。非自由的程序禁锢了知识,知识被少数人所控制,其他人实际上不能够得到它。他们只能够从表面上来肤浅地使用,他们永远也得不到这些知识。
正因为如此,学校使用自由软件就非常关键了。我讲一下学校应该只使用自由软件的三个理由。最浅显的一个理由是:可以省钱。即使在发达国家,学校的钱也从来没有够用过,所以在学校里使用计算机是受限的。现在,如果使用自由软件,学校就有复制和分发软件的自由而不必为此付费。这样学校就可以装更多的计算机,添置更多的设施。并且,GNU加Linux操作系统比Windows更高效,所以你可以用更老,性能更低的廉价电脑。这样学校又可以再省一笔钱。这个理由是不是很浅显啊?
学校使用自由软件的更加重要的一个原因是因为对学习有益。大家都知道,青少年时期,一些学生有很强的求知欲,他们想学习计算机系统里面的所有的东西。在这些人当中,有优秀程序员的苗子。如果你想练就超强的编程能力,你就不能只是在一个大团队里面做一些机械的工作,你应该掌握主动,做大事,开发功能强大,激动人心的程序。对于一个小孩儿,你需要鼓励他去做这件事。所以提供基础设施和社会环境来鼓励这种学习就非常重要了。通过使用自由软件,学校可以做到这一点。当一个小孩儿好奇地问:“这玩艺儿到底是做么做的?”教师就可以说了:“这是Fubar 程序做的,可以在这里找到Fubar程序的源代码,你可以自己去读懂那些代码,搞清楚它是怎么工作的。” 如果有个小孩儿说“你看,我有一个想法,可以使这个变得更好。”教师就可以说:“为什么不试试看呢?把它写出来,修改Fubar程序的代码,改变这个特征(功能)。”
要想成为一个好的作家,你必须大量阅读和大量写作。写程序也是一样:你要阅读大量的软件,写大量的软件。要学习理解大程序,你必须在大程序中工作。但是你怎么才能迈出第一步?刚开始的时侯,你写不出一个大程序,也做不好工作。那你该怎么学习呢?答案是你必须读现有的大程序,并且努力做一点点修改。因为在这个阶段,你自己还写不出一个大程序,但是你可以在大程序里面完成一点改进。
这也是我如何学习编程的方法。我曾经有一个特殊的机会在麻省理工。那儿有一个实验室,他们写了自己的操作系统来用。我到那儿的时候他们说:“我们想雇你。”他们雇我来改进这个操作系统。这是我读大二时侯的事,那时候我自己还不能写出一个操作系统。我没有能力从零开始,但是我可以读代码,然后一个一个地添加新特性。每个星期我都会加入一些新特性。这样做了很多次以后,我的技能提升了。70年代,只有很特殊的地方你才能得到这样的机会。但是现在我们可以给所有的人这种机会,所有你需要的东西仅仅是一台可以跑GNU/Linux的PC。所以,你们可以很容易鼓励日本那些对计算机着迷的孩子,去成为一个优秀的程序员。
我有一个朋友,80年代在一所中学当老师,他在学校里装起了第一台Unix机器。他指导那些高中生,培养他们成为好程序员。他们中的几个成长为非常优秀的程序员,并以从那所学校毕业为荣。我能肯定地说,任何一个高中里都不乏天才程序员的好苗子,他们只是需要一个机会。所以这就是学校要使用纯粹的自由软件的第二个原因。
第三个原因更加根本。当然,我们希望学校教授科学和技能,但是也希望学校能塑造高尚的,随时准备帮助他人的精神。也就是说,学校应该跟孩子们说:“所有的软件都在这儿,你们可以拷贝它,可以把它们带回家,这正是它们所希望的。如果你把任何软件带到学校,你应该和其他的孩子进行分享。如果你不愿意分享,你就不要把它带来,它不属于这儿,因为我们教育孩子互相帮助。”高尚的人格在任何社会都是非常重要的。
自由软件的想法不是我发明的。只要有两台同样的电脑,自由软件就存在了,因为使用一台电脑的人会写一些软件,用另一台电脑的人会说:“你知不知道这个问题怎么解决?”,对方会回答:“哦,我们写了一些程序来解决这个问题,这是拷贝。”这样他们就开始互换自己开发的软件,这样他们就能开发更多的软件。不过到了60年代,出现了用非自由软件取代自由软件的趋势,一个压倒和禁锢使用者的趋势。
我大一的时候,一件体现了高尚精神的事给我留下了深刻的印象。当时我正在用一个计算机设备,在那儿他们说:“这是一台教学设备,我们在这里的本意是让大家学习计算机科学,所以我们要定一个规矩:任何时候安装软件到这台机器上,都必须公开源码让大家可以阅读,并以此学习这个软件是如何运作的。”一个雇员写一一个工具软件,并且开始作为非自由软件进行销售。他卖拷贝的方式和我不同,他限制用户。但是他给学校提供了一个免费的拷贝。掌管那台设备的人说:“不,我们不会把它装在这儿,因为我们的规矩是源代码必须公开,如果你不让我们公开这个程序的源码,我们就不会运行你的程序。”这件事激励了我,因为它体现了为了坚持学校的根本目标--教育,而断然舍弃实际利益的坚决态度。
Zeuux © 2024
京ICP备05028076号
回复 夏思兰 2009年06月22日 星期一 15:14