自由1 软件的未来
Richard Stallman 著日本经济产业省经济产业研究所(RIETI)主题演讲记录,2003年4月21日。
Richard Stallman,GNU 工程:我将要谈论自由软件,首先阐述其在伦理、社会及政治层面的重要意义,其次探讨其带来的经济影响。
自由软件关乎自由。英语单词"free"无法明确表达这层含义,因为它有两种解释。幸运的是,您的语言中有两个不同的词汇。因此,当您说"(jiyuna sofuto)自由软件"时,就能很清楚表明您讨论的不是价格,而是自由。所以我恳请各位,当用日语讨论自由软件时,请始终使用您表意明确的词汇,而非我们含义模糊的词语。
开发自由软件的原因非常简单:为了生活在自由之中,尤其是能够自由地以体面的方式对待他人。非自由软件则意味着您处于无助与分裂的状态——它宣称您甚至无权了解程序的运行机制,只能盲目相信开发者的说辞,而他们往往不会透露软件的真实行为。如果您对软件不满,也无法自行修改。即使开发者竭尽全力让程序变得实用,但人无完人。我可能编写了一个程序,而您觉得它勉强符合需求;也许我的开发初衷与您的使用目的并不完全一致。无人能预知所有可能性。或许我按照自认为最优的方式实现功能,但您却有更好的思路。毕竟,没有人能永远做到尽善尽美。
使用非自由软件意味着您将被彻底束缚。您只能被动接受它的现有状态,被迫忍受其所有缺陷。最关键的是,非自由软件禁止您与他人分享。人类社会本就建立在互助基础上——当邻里在您求助时伸出援手,这样的社区才具有真正价值。当然,帮助并非强制义务,但朋友之间往往会相互扶持。因此,若想获得他人的帮助,我们首先应当学会帮助他人。
当有人禁止您向他人提供帮助时,这意味着什么?明明掌握着有用的知识,您本可以通过分享来帮助邻居,却被强行禁止传播——这实质上是在破坏社会联结,将整体社会瓦解为相互孤立、无法互助的个体。
自由软件正是与此形成鲜明对比的存在。自由软件意味着用户享有四项基本自由:自由之零是指无论出于何种目的,皆可按照个人意愿运行程序的自由;自由之一是通过研究源代码了解程序运作机制,并据此修改以满足自身需求的自由,即自助的自由;自由之二是通过分发软件副本帮助他人的自由;自由之三是通过发布改进版本助力社区建设的自由,让他人能使用您的版本并从中受益。拥有这些自由,用户才能真正掌控自己使用的软件。若缺失这些自由,则[软件]所有者将掌控软件,进而控制用户。
众所周知,计算机本身并不会真正做出决策,它们只是执行人类下达的指令。但究竟是谁在向计算机发号施令?当您使用计算机时,是您在掌控它,还是他人在通过软件暗中操控?谁才是您计算机的真正主宰?这正是自由软件运动的核心议题。自由软件定义中的四项基本自由——自由之零至三之所以至关重要,在于它们是确保公民真正掌控自身计算设备不可或缺的权利。您需要自由之零来让计算机执行任意任务;需要自由之一来按自身需求改造软件。若缺失自由之一,您将沦为软件的囚徒,永远受困于他人设定的牢笼。
但并非人人都是程序员。如果我们仅拥有自由之零,那么只有程序员能够按个人意愿修改软件。倘若每位程序员都必须亲自完成所有修改,我们实际获得的控制权将极为有限——个体能力将成为无法突破的天花板。非程序员群体更将完全无法受益。这正是自由之二与自由之三至关重要的原因:它们使得用户群体能够协同合作,共同推动软件实现集体诉求。由此,软件改造不再受限于单打独斗的个人力量。 您与其他50名志同道合者可以凝聚起来。若其中有两三人是程序员,他们便能实施修改,并将改进版分发给其余成员。您可以集资聘请程序员实现共同需求;企业也可付费定制符合自身需求的版本。而通过发布优化后的版本,全社会都将能共享成果——如此,整个社会才能真正掌控软件的行为。
自由软件是一种决定软件发展的民主化方法,但其民主形式独具特色:我们并非通过选举来统一号令,自由软件社区中从无人对他人发号施令,每个个体都自主决策。实际运作机制是:若多数人期望软件朝某方向改进,就会有众多参与者共同推进,该方向的发展将突飞猛进;若仅有少数人期待某个发展方向,少数人的努力会使进展相对缓慢;如果无人关注某个方向,它自然停滞不前。通过每个人自主决定行动方向,我们共同塑造了软件的发展轨迹,集体决定了软件的进化路径。
因此,社会整体能够掌控软件的宏观发展方向,而每个个体、团体或企业也保有自主定制的权利。最终结果是:自由软件始终服务于用户需求,而非开发者的意愿。
人们常问:"如果人人都能随意修改软件,兼容性该如何保障?"事实上,用户确实重视兼容性,但这并非他们唯一的考量。有时部分用户会为了其他优势而接受不兼容的改动,他们确实有权这样做。但绝大多数用户仍倾向于保持兼容,因此大多数自由软件开发者都会极力维护兼容性。试想,倘若我在程序中引入了不被用户接受的兼容性改动,结果会如何? 会有用户修改程序使其恢复兼容性,随后大多数用户将更青睐他的版本。于是他的版本会广泛流传,而我的版本则被遗忘。我当然不愿看到这种结果——我希望人们喜欢并使用我的版本,因此我会提前预见这一点,从最初就确保版本的兼容性,以此赢得用户青睐。在我们的社区中,开发者无法违背用户的意愿。我们必须顺应需求,否则用户将转向满足他们需求的版本,将我们抛弃。
反观非自由软件的开发者,尤其是那些权势滔天的巨头,他们能够强行推行不兼容改动,而用户对此无能为力。微软便是此中典型——他们擅改通信协议制造不兼容,用户只能被动承受。这并非微软独有的行径。以 WAP 为例,它篡改标准互联网协议制造人为不兼容,表面上宣称"支持手机联网",却因不使用标准协议将不兼容性强加于用户。这曾是他们的战略布局,幸而未竟全功。但这正揭示了当用户丧失控制权时面临的危机:总有人试图用不兼容性来束缚用户。
自由软件本质上是关乎政治、伦理与社会的议题。我已阐述了这一层面的意义,而其同样衍生出经济影响。例如,非自由软件能催生极度富有的企业——少数人通过向全球用户收取费用积累财富,导致多数人被剥夺权益。许多国家(日本或许除外)的计算机用户通常无力支付非自由软件的授权费用。在这些国家,非自由软件体系造成了严重的资源剥夺。但无论在哪个国家,非自由软件都在从大众手中汲取财富,将其集中于少数人手中。而自由软件则杜绝了这种可能:您无法借此榨取巨额利润,但通过提供真实服务仍可开展商业活动。
自由软件商业模式早已存在。事实上,我早在1985年就创立了自由软件企业——通过销售 GNU Emacs 副本盈利。当时我在探索通过自由软件谋生的方法,因此提出"支付150美元,即可获赠载有 GNU Emacs 文本编辑器的磁带",用户纷纷付款,我通过邮寄磁带赚取生活费。后来因创立自由软件基金会而终止此项业务,我认为由基金会分发 GNU Emacs 更为妥当。为避免与基金会竞争,我转而探索其他途径。有数年时间,基金会凭借这种模式赚取了足够资金,雇佣了包括程序员在内的多名员工。可以说,倘若当时坚持独立运营,我本可通过销售自由软件副本获得优渥生活。
此后,我开创了另一种自由软件商业模式:通过承接定制化修改项目赚钱。
使用非自由软件时,您无法对其进行修改,只能沦为软件的囚徒——要么全盘接受现有状态,要么彻底放弃使用。而自由软件则赋予您更多选择权:您既可以保留以上两个选择,但是也可以由其他选择,实际上您有了很多选择。您可以对程序进行或大或小的修改,最终使用定制化的版本。
现在,如果您本人是程序员,您可以自己进行修改。但假设您不是程序员,那么您可以付费请程序员为您修改。例如,如果这个部门正在使用某个程序,而大家认为这个程序的工作方式不符合我们的实际需求,您可以轻松地支付一些费用,聘请程序员将其修改成您想要的样子。这就是我在1980年代从事了数年的自由软件业务类型。(我本可以继续做下去,但我获得了一个大奖,无需再从事这项工作了。)
如今已有许多人以此谋生。我最近听一位南美人士提及,他认识当地30人正通过这种方式维持生计。南美虽非全球技术最发达的地区,但此种模式已在那里萌芽。我记得在1989或1990年,有家公司以这类业务起家,创始团队仅三人。数年间员工增至50人,且连年盈利。他们本可继续经营,却因贪念转向开发非自由软件,后来被红帽公司收购。
无论如何,自由软件商业模式是一种专有软件世界不存在的新型商业形态。人们常思考自由软件将如何影响就业:假设每位计算机用户都享有自由,即所有软件都是自由软件——换言之,当您获得程序时,就拥有运行、研究、修改和重新分发的自由。这将给信息技术领域的就业带来怎样的变化?
在该领域的所有就业岗位中,编程只占一小部分;而大部分编程工作属于定制软件,即专为单一客户开发的软件。只要客户获得源代码并在付款后拥有完全控制软件的权利,这就完全合理。实际上,这对拥有该软件的客户而言就是自由软件。[因此,只有非客户专属的编程才真正属于非自由软件范畴。]
因此在这部分编程工作中,大部分属于定制软件;而准备公开发布的软件只占整个[IT 行业就业]中小部分里的小部分。
那么,自由软件会产生什么影响?它或许会消除这极小部分的就业岗位,但也未必。因为当通过限制用户来支付程序员报酬的可能性消失时,将会出现新的可能——转而资助那些通过改进和扩展自由软件获取报酬的程序员。因此,我们会失去更多工作岗位还是创造更多就业机会?无人能知,亦无法断言。但我们确知的是:IT 领域就业岗位的减少仅限于"面向发布的编程"这微小部分中的零星占比,其余领域将维持现状。由此可见,这对就业显然不构成问题。
关于人们有时提出的另一个问题:我们能否开发出足够多的软件并使其成为自由软件?答案显而易见,因为我们早已实现。提出这个问题的人就像在问飞机真能停留在空中吗?我可是坐过飞机的。想必在座各位也都乘坐过飞机。我认为它们确实能停留在空中。如今的自由软件领域,我们有数百人(或许数千人)受雇开发自由软件,更有超过五十万名志愿者开发者利用业余时间无偿贡献,共同开发了大量软件。
因此事实上,自由软件无需依赖商业模式也能发挥作用。但自由软件商业模式确实非常可取。我们越是能建立将用户资金导向自由软件开发者的机制,就能产出越多的自由软件,并使其质量更优。这固然值得追求,但并非关键所在——我们已成功开发出两套完整的操作系统、两款图形用户界面桌面环境以及两套办公套件,它们都是自由软件。
人们正在创造性地探索资助自由软件的途径,正如您可能预料的,有些方法行之有效,有些则不然。例如去年夏天,有一款名为 Blender 的备受欢迎但属于非自由软件的产品,其商业公司认为继续支持或销售已无价值,遂决定停止开发。但开发者们不愿看到项目终止,经过协商达成协议:若能筹集10万美元,他们便可买断版权并将其转化为自由软件。于是他们向社区求助,几周内便筹足资金。如今 Blender 已成为自由软件。这表明我们或许能以同样方式从社区筹集资金,用于开发特定功能扩展。
一位拥有声望和技能认可的程序员,可以向社区提出:"如果大家筹集到足够的资金,我就完成这项工作。"他无需独自承担所有工作,可以雇佣其他程序员协作。这正是起步的方式——在建立个人声誉之前,您可以作为学徒跟随其他程序员工作。他们负责筹集资金、监督项目,通过这样的实践,您最终也能积累声誉,进而独立承接客户项目。
当然,政府资助开发实用软件也具有正当性,正如政府资助旨在服务公民的科学研究——无论是出于满足人类好奇心,还是明确以服务公众为目标。政府资助开发对公众有益的软件同样合理,待软件完成后交付公众使用,并宣告:"现在每个人都可以使用并改进它,这是人类共同的知识财富。"因为自由软件的本质正是如此:它属于人类知识范畴,是全人类共有的智慧结晶。而非自由程序则是受限制的知识,被少数人掌控,他人无法真正接触其内核——他们仅能被勉强允许使用,却永远无法拥有这些知识本身。
因此,学校使用自由软件十分重要。学校只应使用自由软件的理由有三:最浅层的是节约资金。即便在发达国家,学校也始终面临资金短缺,计算机教学因此受限。若学校采用自由软件,教育系统便有权复制并分发给所有学校,且无需支付软件使用许可费。这意味着教育系统能配置更多计算机,提供更丰富的设施。此外,GNU 加 Linux 操作系统比 Windows 更高效,因此可采用更老旧、性能较低、成本更低的计算机型号,甚至使用他人淘汰的二手设备。这又开辟了另一条节约途径。以上理由显而易见,但尚属表层。
学校使用自由软件更重要的原因在于促进学习。众所周知,在青少年时期,部分学生渴望深入了解计算机系统的内部原理——这些人有望成为优秀的程序员。若要培养强大的编程能力,不仅需要能在大团队中按部就班工作的人才,更需要能主动创新、成就大业、开发强大而令人振奋的程序的人才。因此,当孩子展现出这种潜质时,我们必须鼓励其探索冲动。提供相应的设施和社会环境来鼓励这类学习发展至关重要。 实现这一目标的方法是:学校应该运行自由软件。当有孩子开始好奇"这个功能实际是如何实现的?"时,老师可以说:"这是由 Fubar 程序实现的。您可以在那里找到 Fubar 程序的源代码。去阅读并理解它,亲自看看它的工作原理。"然后,如果孩子说:"我觉得这个功能可以改进,"老师就可以说:"为什么不试一试呢?尝试编写代码,修改 Fubar 程序中的这个功能。"
要成为优秀的作家,必须大量阅读和写作。编写软件也是如此:您需要阅读大量代码并编写大量程序。要学会理解大型程序,就必须接触大型程序。但该如何入门呢?初学阶段,您无法独立编写一个完整的大型程序并保证质量,因为您尚未掌握相关技巧。那么该如何学习?答案是:阅读现有的大型程序,然后尝试对其做出小幅修改。因为在此阶段,您虽无法独立编写大型程序,但能够为大型程序实现小型改进。
这正是我成为优秀程序员的途径。我在麻省理工学院获得了一个特殊机会:那里有个实验室自主研发了一套操作系统并投入实际使用。我加入时,他们表示:"我们想聘用您。"于是受雇改进该操作系统的程序。那时我刚读大二,尚无力独立编写操作系统,也无法从零开始构建那些程序,但我能够阅读理解代码,逐步添加新功能,一个接一个地持续完善。 每周我都会为某些程序添加新功能。通过反复实践,我逐渐提升了技能。在1970年代,唯有身处特殊环境才能获得这样的机会。但如今,我们可以将这种机遇赋予每个人——只需一台安装 GNU/Linux 系统及源代码的个人电脑,您便能获得同等机会。因此,我们可以轻松激励那些对计算机着迷的日本青少年成长为优秀的程序员。
我有一位朋友在1980年左右担任高中教师,他在高中配置了第一台 Unix 机器,随后指导高中生学习编程,使他们成长为优秀的程序员。其中几位在高中毕业时已成为享有声誉的杰出程序员。我相信每所高中都有具备这种天赋并渴望发展的学生,他们需要的只是机会。这便是学校只应使用自由软件的第二个理由。
第三个理由更为根本:我们期望学校不仅传授知识与技能,更要培养良好的道德品格——即乐于助人的精神。这意味着学校应当告诉孩子们:"这里的任何软件您都可以复制带回家,这正是它们存在的意义。如果您带软件来学校,必须与其他同学分享。若不愿共享,就请不要带来,因为它不属于这里——我们教育孩子要互帮互助。"道德品格教育对每个社会都至关重要。
我并非自由软件理念的发明者。自由软件始于两台相同型号计算机出现之时——当一方用户编写了某些软件,另一方询问:"您有解决这个问题的方案吗?"时,他们会回答:"是的,我们编写了相关程序,这是副本。"于是人们开始交换各自开发的软件,从而推动共同进步。但到1960年代,出现了一股用非自由软件取代自由软件的趋势,这股趋势旨在奴役用户,剥夺用户的自由。
在我大学一年级时,曾目睹一个令我印象深刻的道德典范。当时我使用一个计算机设施,该设施的管理者宣布:"作为教育机构,我们旨在帮助人们学习计算机科学。因此我们制定规则:任何软件安装到系统时,其源代码必须公开展示,以便人们阅读并了解该软件的运行原理。" 一名员工编写了实用程序后,开始将其作为非自由软件销售。他并非像我那样单纯销售副本,而是在限制用户自由。虽然他向学校免费提供了一个副本,但计算机设施负责人表示:"不,我们不会安装此程序,因为我们的规定是必须公开展示源代码。如果您不允许我们展示该程序的源代码,我们绝不会运行您的程序。"这件事深深启发了我,因为它展现了为更重要目标——学校的教育使命——而放弃实际便利的坚定意愿。
然而,我在麻省理工学院工作的实验室在1970年代是个例外,因为我们使用的操作系统是自由软件。当时大多数计算机都运行着非自由操作系统。但我受到所见典范的启发,并学会了以这种方式生活——我学会了将知识传授给他人,而非据为己有的生活方式。这个社区在1980年代初逐渐消亡,彼时我发起了自由软件运动。我并非自由软件的开创者,而是通过加入一个已践行此道的实验室,学会了自由软件的生活方式。我的贡献在于将其转化为一场伦理与社会运动,旨在阐明:这关乎选择美好社会还是丑陋社会,选择拥有自由的纯净、友善、互助的生活方式,还是选择人人受制于各种统治帝国、认为除了放弃自由别无选择的生存状态。
从理论上讲,一方面人们会说:"又没人强迫您用非自由软件,没人逼您使用 Microsoft Word。"但另一方面,又有人表示:"我别无选择。"因此实际上,这并非个人选择的问题。的确,如果您决心追求自由、坚决抵制非自由软件,确实可以做到,但这需要极大的毅力。20年前我们起步时,要想在不使用非自由软件的情况下操作计算机,需要付出巨大努力——在1983年所有现代计算机的操作系统都是专有的。除非使用非自由软件,否则您根本无法正常使用计算机。为改变这种局面,我们耗费多年心血进行开发,最终成功扭转了困境。
对今天的各位而言,处境已变得更容易。现在已有自由操作系统,您可以购置现代计算机并完全使用自由软件来运行。因此如今无需付出巨大牺牲,只需经历暂时的微小牺牲,便能生活在自由之中。通过共同努力,我们终将消除这种牺牲,让自由生活变得更加容易。但为此我们必须付诸行动,必须将自由视为一种社会价值来珍视。
每个政府都力求以低成本完成工作,每个政府机构也都有其特定的任务要完成。因此,当政府机构选择计算机系统时,他们往往着眼于狭隘的实际问题:成本多少、何时能投入使用等等。
但政府肩负着更重大的使命:引领国家朝着有利于公民福祉的健康方向发展。因此,当政府机构选择计算机系统时,应通过此项选择将国家引向自由软件。这对国家经济更为有利——用户不再仅为软件运行权限付费,而是将资金用于雇佣本地人员改进和适配软件。如此一来,资金不再全部流向华盛顿州雷德蒙德,而是在本地循环流动,为当地创造就业而非填满某些人的口袋。但更重要的是,这将创造一种使国家和人民保持独立自由的生活方式。
译注
- 原文:Jiyuna,为日文,意思是自由。