[转载] 开源代码的范式转移

💡 这篇文章是 Tim O’Reilly 的演讲稿。我最早是在字节社上看到这篇文章的,后来字节社下架,电子书文件被我导出来放到了其它阅读器上。 这篇文章深入分析了开源代码的价值链,对于理解软件工作的价值非常有启发。

🗓2004年6月

这篇文章是基于我2003年5月在华平投资集团(Warburg-Pincus)的年度技术会议上的演讲。之后,我已经就此做过超过20次不同版本的演讲,足迹踏遍O’Reilly开放源码大会、英国Unix用户组、英国微软研究院、IBM赫斯利实验室、英国电信、Red Hat的内部「全体」会议,以及BEA的eWorld大会。最后,为了一本即将出版的关于开源的书籍《免费和开放源码的前景》,我将此演讲写成了文字。此书由J. Feller, B. Fitzgerald, S. Hissan,以及K.R. Lakhani编辑,将由麻省理工学院出版社在2005年出版。

1962年,Thomas Kuhn出版了一本突破性的书,叫做《科学革命的结构》。在书中,他提出科学的发展不是渐进的,而是(像今天我们认为生物进化那样)一种间断平衡(Punctuated Equilibrium),其中有很多划时代变革的时刻。当哥白尼提出行星围绕太阳而不是地球运动的假说来解释行星运动的时候,或者当达尔文提出物种起源的想法的时候,他们所做的超越了仅是在过去的发现上有所创造,或是解释新的实验数据。Kuhn指出,一个真正深刻的科学突破,「很少是,或根本不是在已知之上的增量。吸收他们需要对之前的理论进行重构,并对之前的事实进行重新评价。这个从本质上就很革命性的过程很少能够被一个人完成,一夜之间更是不可能。」

Kuhn把这些科学中的革命性过程称作「范式转移」,这个术语现在用来描述在我们参考系中的一切深刻变化。

范式转移在商业中和在科学中都经常发生。就像科学革命一样,它们也要经历复杂的斗争,其下隐含的观念要在提出很久后才被广泛接受。更重要的是,它们的深刻意义通常远超过其创造者的理解。

一个范式转移就发生在1981年引入IBM个人电脑标准化体系结构的时候。和之前的工业实践大相径庭,IBM选择用市面上的现成部件来建造自己的计算机,并公开其设计以便其他制造商复制。结果,IBM个人电脑体系结构成为了标准,随着时间演进,它们不仅取代了其它个人电脑设计,后来二十年里还取代了小型机和大型机。

然而,IBM的经理们却没能理解他们的决策的全部后果。当时,IBM在计算机市场上的份额远超过微软公司在今天的桌面操作系统市场上的统治地位。软件只是当时计算机产业的一小部分,是一台集成的计算机的不可缺少的部分,常常被捆绑销售而非单独销售。很明显,当时的独立软件公司都是围绕着它们选定的硬件平台而生产。所以到了要给一台新机器提供操作系统的时候,IBM决定从一家叫做微软的小公司获得许可,把在不受自己控制的一小部分市场上出售软件的权利让了出去。随着上千家大大小小的制造商开始克隆个人电脑,IBM丧失了在新市场里面的领袖地位。软件成为了整个行业围绕转动的新的太阳;微软,而不是IBM,成为了计算机产业中最重要的公司。

但这不是这个故事给我们上的唯一一课。在最初的争取个人电脑市场领袖地位的竞争中,各个公司争相「改进」个人电脑标准,增加对新的周边设备、更快的总线、以及对其它专有技术创新的支持,经理们在之前由硬件主导的计算机产业中接受了训练,从旧的范式得来的经验教训指导着他们的行动。

其中最不妥协者,比如Digital的Ken Olson,嘲笑说PC不过是一个玩具,并拒绝进入市场,直到为时已晚。但是即使像康柏这样的先行者──它的早期成功源于发明「可打包(luggable)」计算机,也就是今天的笔记本的祖先──也被那些在新的范式下不再适用的旧经验误导。最后还是得靠一个外来者,Michael Dell(迈克尔·戴尔)──他的公司是从大学宿舍里面邮购销售电脑开始的──来意识到标准化的PC是一种商品,市场优势并不是来自于制造更好的电脑,而是制造足够好的电脑,并通过全力贴近市场标准来降低生产成本,并在市场、铺货、以及后勤等领域寻找优势。最后,是戴尔,而不是IBM或者康柏,成为了最大的PC硬件制造商。

同一时刻,Intel,另一家在新的商品平台上豪赌了一把的公司,放弃了它认为站不住脚的内存芯片业务,全力争当新的设计中的更复杂的大脑。今天制造的大部分PC上面都带有「Intel Inside」标志这一事实,提醒着我们即使在商品的体系结构中也是有专有技术优势的机会的。

这些和开放源码软件都有什么关系呢?你可能会问。

我的前提是,免费和开放源码开发者在今天的境地,正如IBM在1981年改变了计算机行业的规则,却没能理解这一变革的后果时一样,让别人收割了果实。大部分现存的专有软件生产商境况也没好到哪去,在新的规则开始重塑它们周围的行业的时候,它们还在遵循着老的规则。

在我的演讲中,我用一个简单的测试,来检测我的计算机产业专业人士听众是在用旧的还是新的范式在思考问题。「你们有多少人用Linux®?」我问。依场合不同,20~80%的观众可能会举手。「你们有多少人用Google?」房间里的每个人都举手了。这时就看出端倪来了。他们中间每个人都在使用Google的巨大的100 000台Linux服务器的复合体,但是他们却觉得「你用的软件」就是你面前那台电脑运行的软件,而对答案视而不见。因特网上的绝大部分「杀手级应用」,那些被上亿人使用的应用程序,都在Linux或者FreeBSD上面运行。但是操作系统,如前所定义,对于这些应用程序而言只是更大的系统中的一部分。互联网才是真正的平台。

只有研究这些下一代应用,我们才能开始理解开放源码范式转移的真正长期重要性。

如果开放源码的先锋们要从我们刚刚释放出来的革命中获益,我们必须看透自由和开放源码运动的表面元素,更深刻地理解这一革命的原因和后果。

人工智能的先锋Ray Kurzweil曾经说过,「我是一个发明家。我对长期趋势更感兴趣,因为一项发明的意义存在于它结束的那个世界里,而不是它开始的那个世界里。」

我发现把开放源码表述成三个深刻、长期的趋势很有用:

  • 软件的商品化
  • 基于网络的协作
  • 软件的定制性(作为服务的软件)

像上面「3C」这样的长期趋势,而不是《自由软件宣言》或《开放源码定义》,才应该成为我们理解正在释放的诸多变革的透镜。

作为商品的软件

在《软件商品化的一些含义》一文中,Dave Stutz写道:

商品一词今天用来代表工业过程中的基本材料:即那些有价值的、多用途的基本构件。因为它们非常通用,它们经常以各种方式被大量使用。商品总是被超过一家生产商供应,消费者能用一家生产商的产品来替代另外一家的而不蒙受任何损失。因为商品的这种可替代性,它们都由其必须遵守的一致的质量标准来定义。这些质量标准有助于避免掺假,也有助于快速、简易的价值估算,进而促进了生产力的提高。

软件商品化是由标准驱动的,尤其是随着像互联网这样的面向通信的系统的兴起,其依赖于共享的协议,并定义了合作部件之间的而非内部的共享界面和数据类型。这样的系统必然由可替换的部件组成。像Apache或者微软的IIS这样的web服务器,或者像Internet Explorer, Netscape Navigator®,或Mozilla这样的浏览器,都是很容易相互替换的,因为要让它们能够工作,它们必须实现HTTP协议和HTML数据格式。Sendmail可以由Exim、Postfix或者微软Exchange替代,因为它们都必须支持像SMTP、POP、以及IMAP这样的邮件交换协议。微软Outlook®也能很容易地被Eudora®,或者Pine,或者Mozilla Mail,或者一个像Yahoo! Mail那样的web邮件客户端所替代。

(在这点上,值得一提的是Unix®,这个Linux®所基于的系统,也有一个以通信为中心的体系结构。在《Unix编程环境》一书中,Kernighan和Pike生动地描述了应该怎样把Unix程序写成一条「流水线」里面合作的小模块,读写ASCII文本文件,而非专有数据格式。Eric Reymond在他的《Unix编程艺术》一书中就此主题也给出了当代的表述。)

要注意,在一个拥有标准协议的以通信为中心的环境中,专有的和开放源码的软件都成为了商品。微软的Internet Explorer web浏览器和Apache web服务器一样都是商品,因为它们都受web开放标准的制约。(如果微软设法在web浏览器和web服务器之间协议流水线两端都获得了统治性的市场份额,那就是另外一个问题了!请参看我在tim.oreilly.com上《How the Web Was Almost Won》(《Web如何差点取胜》)一文中就此问题的讨论。这个例子清楚地表明了开放源码在「保持标准诚实」中扮演的重要角色。这个角色得到了像W3C这样的机构的认可,它们变得越发不愿意为专有的或者受专利所困恼的实现方式而背书了。)

更重要的是,即使是那些一开始就是专有的软件后来也变得标准化,并最终商品化了。Dave Stutz在一篇题为《软件平台的自然史》的文章中生动地描述了这个过程:

它发生在由平台提供的外壳的随着时间推移逐渐固化的过程中。随着一个平台在市场上成功,其API、用户界面、功能组、文件格式、和自定制界面开始固化并越发难以改变。(实际上,它们可能固化到一定程度以至于真的变成了硬件装置!)这一固化的过程使得成功的平台很容易成为复制者的目标,而复制也就吹响了平台利润开始终结的号角。

和这个观点一致,对微软的Windows®和Office产品的复制也是免费和开放源码社区的主要目标。在过去,微软通过不断修订其API和文件格式成功地挫败了一些复制企图,但是不祥之兆已经很明显。普及性带动了标准化,为了维护垄断而进行的无理由的发明只会被用户抛弃。

软件商品化到底意味着什么?有些人可能容易看到一些曾经有着巨大价值的核心的东西贬值了。于是,Red Hat®创始人Bob Young曾经评论道,「我的目标是缩小操作系统的市场。」(然而,Red Hat自己却准备在这个小市场里面占有一大块地盘!)现状的维护者,比如像微软公司的副总裁Jim Allchin,曾发表过像「开放源码是知识产权的破坏者」之类的言论,把前景说得一片荒凉,在那里一个伟大的产业被破坏了,而且还没有什么东西替代它。

从表面上看,Allchin似乎是正确的。Linux现在正创造着上百亿美元的和服务器硬件相关的收入,而软件上的收入却只当它的零头。虽然Linux在服务器市场的统治地位已经初露端倪,Red Hat,最大的Linux发行公司,年收入却只有1.26亿美元,相比之下,微软有320亿美元。软件价值的很大一部分似乎都蒸发了。

但这是价值还是额外开销?开放源码的支持者喜欢说他们没有破坏真正的价值,而是把低效挤出了系统。当竞争使得价格降低的时候,效率和平均财富水平就会提高。那些不能适应新的价格水平的公司就会遭受经济学家E.F. Schumpeter所称的「创造性破坏」,但是那些「损失」却以更高的生产力和新机遇的形式带来了数倍的回报。

微软公司和消费者们都从上一轮PC硬件商品化的「创造性破坏」中得到了好处。而这一次,微软却认为操作系统、数据库、web服务器和浏览器以及相关软件的商品化对其核心业务是破坏性的。但正是这一破坏给互联网时代的杀手级应用程序的创造了机遇。Yahoo!®,Google™,Amazon®,eBay®──要说几个的话──都是受益者。

所以,我倾向于采用Clayton Christensen的观点,他是《创新者的窘境》和《创新者的解答》两书的作者。在《哈佛商业评论》的一篇文章里,他清晰地讲述了「吸引性利润守恒定律」如下:

当在价值链中的某一阶段,因为某种产品变得模块化和商品化而使得吸引性利润消失的时候,通过专有产品获取吸引性利润的机遇通常就会出现在下一阶段。

在我讨论的范式转移中,我们清楚地看到了Christensen的理论发挥作用。就像IBM的个人电脑的基本设计的商品化,带来了获取位于「堆栈上层」的软件中的吸引性利润的机遇一样,新的财富正在作为互联网基础的商品开放源码软件之上累积,以一类我在别处称之为「信息件」的新的专有应用程序的形式被创造出来。

像Google、Amazon和salesforce.com这样的网站给对于自由和开放源码软件的传统理解带来了最严重的挑战。它们都是一些建造在Linux上面的应用程序,但它们也是非常专有的。更有甚者,即使是在使用和修改在最具约束性的GPL自由软件许可下发行的软件的时候,这些网站也不受其任何条款的约束,这些条款全都是在旧的范式下斟酌出来的。GPL的保护是由软件发行触发的,然而基于web的应用程序提供商根本不会发行任何软件:它只是在互联网的世界性舞台上出现,作为一项服务来提供,而不是一个包装好的软件应用程序。

但是还有更重要的,即使这些网站给出了它们的源代码,用户也不太容易复制出来一整套能够运行的应用程序!这个应用程序是一个不断动态更新的数据库,其用途来源于它的完整性和并发性,并且在很多时候,来源于参与其的用户的网络效应。

(当然,如果Google的部分算法是公开的而非隐秘的,或者说Amazon的一键下单功能人人都能使用,用户肯定能从中获益良多,但是道理还是一样:一份Google的源代码不会给你整个Google,除非你有足够能力像Google一样爬下整个Web并创造其镜像。)

而且,机会不只是在堆栈上层。在系统内部也有巨大的专有产品的机会。Christensen指出:

有吸引力的利润……会移动到价值链的其它地方,这经常是那些组装模块化产品的子系统里面。这是因为,正是这些子系统里面的改进,而不是模块化产品的架构的改进,提高了组装者向高端市场移动并增加吸引性利润的能力。因此,这些子系统开始去商品化,并变得有利可图。

我们在PC市场里面观察到了这个模式,大多数PC现在都带有「Intel Inside」的标志;互联网也可以很容易地打上「Cisco Inside」的商标。

但是这些「Intel Inside」的商机并不总是那么明显的,它们也不一定是在专有的硬件或是软件里。曾经运营域名服务系统(DNS)的开放源码的BIND(Berkeley Internet Name Daemon,伯克莱互联网名称精灵)就是一个很重要的例子。

互联网上大部分商品软件的商业模型都不是销售那个软件(虽说也有来自像NetManage或者Spry这样的供应商也卖包在塑封盒子的软件的反例,不过它们早就消失了),而是提供基于该软件的服务。这中间的大部分业务──比如互联网服务提供商(ISP),它们本质上就是销售对于TCP/IP协议套和电子邮件的访问以及web服务器──现在都变成了低利润率业务。不过,还是有一个值得注意的例外。

BIND可能是互联网上面最关键的程序,但是它的维护者在过去二十年却完全靠捐献和提供咨询勉强度日。同时,域名注册──一项基于该软件的服务──却成为了一项每年创造上亿美元产值的业务,它基本上由Network Solutions一家垄断。它在任何人意识到这会是多么有价值之前,就通过政府合同得到了生意。DNS上的「Intel Inside」机遇从根本就不是一个软件上的机遇,而是一项管理软件所使用的名空间的服务。因为历史的机缘巧合,它的商业模型和软件分离开来了。

基于软件的服务会成为开放源码软件的主导的商业模型这一事实,也得到了Eric Raymond关于此运动所著影响深远的《大教堂与市集》一书的认同。但是在实际中,大部分早期的开放源码创业者都把精力集中在和软件的维护与支持相关的服务上,而非真正的作为服务的软件。(也就是说,作为服务的软件不是支持软件的服务,而是用以支持面向用户的服务的软件!)

戴尔给我们上了关于今天的软件产业的最后一课。PC硬件的商品化减小了IBM的大幅度优势,却极大地扩展了市场的尺寸,给用户创造了极大价值,给新的计算机生产商生态系统带来了无尽的机遇。这里,更低利润的PC仍然在商业上有利可图。与此相同,软件的商品化实际上也会扩展软件的市场。如Christensen所指出,在这种类型的市场里,成功的动力「变成了进入市场的速度以及为顾客及时地、舒适地、在准确的时间为其提供准确所需的能力。」

依此逻辑,我相信构造定制发行版的过程将会成为一项让Linux供应商分出高下的关键竞争领域。就像戴尔需要从竞相以最低价格生产可替换部件的各合同生产商的竞争中获利一样,Linux的供应商也需要管理随时变化的一群软件供应商,他们在不同时间发布的发行版正是Linux发行版的原材料。比如,Debian公司的创始人Ian Murdock的Progeny系统已经把这个当成了他们业务的核心,更老的一些像SUSE之类的Linux供应商,以及像Sun这样的新进入行业者,甚至以把他们在软件发布上的专门工程技术当成了主要的竞争优势来招徕顾客。

但是,即使是最成功的Linux发行版供应商也永远达不到今天像微软或者甲骨文这样的软件巨额的收入或者利润率,除非它们吸取一些别的历史教训。如同PC硬件市场和ISP行业(如上所述,这是一项建造在互联网商品协议和应用程序之上的服务行业)所展示的一样,商品业务对于绝大部分参与者来说利润率都很低。除非这些公司能在堆栈上层发现价值或者找到一种「Intel Inside」之类的机遇,它们都必须通过速度和应变性来竞争,在商品市场里面这是一项很具有挑战性的保持价格优势的方式。

早期观察到Linux的商品特性的那些人,比如Red Hat的创始人Bob Young,坚信优势来源于创立有力的品牌。显然,这是很必要的,但是这还不够。甚至有可能,像Flextronix这样身居幕后为行业提供产品的合同生产商,而不是那些打着商标面向客户的公司,会成为Linux供应商中的戴尔。

总而言之,软件本身不再是计算机产业价值的核心。软件的商品化把价值带向了软件造就的服务。我们需要一个新的商业模型。

网络化的协作

要理解新范式下的竞争优势的本质,我们不应该看Linux,而应该看互联网,它已经展示了迹象,表明开放源码的故事会如何演绎。

自由软件历史最常见的一个版本是从Richard Stallman在1984年对专有软件充满道德动机的反叛开始的。这是一个以一位富有魅力的人物为中心的引人入胜的故事,它直接把我们带进了一份以他写的许可文书──GPL──为核心的记述。大多数开放源码的支持者会讲一个范围更大的、关于通过透明性和代码重用来建造更好的软件的故事,我却倾向于从早期的计算机行业和学术界常见的软件开发的风格开始来讲述这段历史。因为那时,人们并不认为软件是主要的价值来源,在早期的计算机行业,源代码都是自由共享的。

Unix软件传统提供了一个很好的例子。Unix是在贝尔实验室开发出来的,并免费共享给了大学的软件研究者,他们贡献了许多我们今天习以为常的工具和功能。Unix后来通过许可证来提供,后来ATT决定商业化UNIX,结束这场欢宴,最终它导致了免费的替代品BSD Unix和Linux的崛起。这件事情不应该让我们忘记,在采用开放源码许可模型之前,人们都是协作开发的。开放源码许可开始是为了保存共享文化,只是在后来它才让人意识到共享本身的价值。

要探寻Unix社群里的开放源码的根源,你可以看看很多早期参与者的研究倾向。如Bill Joy在1999年奥莱利开放源码大会上的主旨发言中所指出:在科学中,你需要分享你的数据以便他人能够重现你的结果。在伯克莱大学,他说,我们认为自己是计算机科学家。

但是还更重要的东西可能是早期的Unix硬件市场的四分五裂的状态。因为有数百种相互竞争的计算机体系结构,发布软件的唯一方式就是源代码!没人能够得到所有的机器来生成必须的二进制文件。(这也展示了Christensen的另一条「法则」的适应性,即模块性守恒定律。因为PC硬件已经标准化及模块化,于是有可能把价值和独特性集中在软件里。但是因为Unix硬件都是独特的以及专有的,软件则需要具有更多的开放性和模块性。)

这种交换软件源代码的文化是从其早期的研究性工作中成长起来的,但是因为计算机网络的崛起,它成为了很大一部分软件工业的印记。

互联网发展过程中的绝大部分开放源码角色都是为众人所熟知的:使用最广泛的TCP/IP协议实验就是作为Berkeley网络的一部分而开发的;BIND运营着DNS域名解析系统,没有它,我们依赖的网站一个也访问不了;sendmail是互联网电子邮件的支柱;Apache是占统治地位的web服务器;Perl则是创建动态网站的主要语言;不一而足。

较少为人所知的则是Usenet在哺育我们所知晓的网络中所担任的角色。带动公众接受互联网的主要功臣实际上是Usenet,这个庞大的分布式讨论组。你只要找到一个愿意给你新闻馈源的邻居就能「加入」Usenet。这是一个真正的协作式网络,邮件和新闻从一个传递到又一个协作网站,常常用数天从网络的一头传递到另外一头。中心网站形成了一种特别的骨干节点,但是这一切都是自愿的。

UUnet的创造者Rick Adams,作为最早的主要商业ISP,也是一个自由软件作者(虽然他从来没有认同任何自由软件的理想──这只是他用来发布他想用的软件的权宜之计)。他是B News(当时占统治地位的Usenet新闻服务器)以及SLIP(Serial Line IP,拨号线路上的TCP/IP的最早的实现)的作者。但是对于互联网的历史更重要的是,Adams也是世界上最大的Usenet核心的站长。他意识到自愿的Usenet开始变得不再可行,而且人们愿意为一个稳定的、连接良好的访问而付费。UUnet开始也是非营利性的,几年来,它大部分的业务都是基于早期的UUCP(Unix-Unix复制协议)拨号网络而非TCP/IP。随着互联网开始变得流行,UUnet和其它类似的东西帮助把互联网介绍给了大众。但是最终,商业互联网产业却是从为完全协作性的UUCPnet和Usenet提供基础设施的需求中开始的。

UUCPnet和Usenet本是用来发送电子邮件(互联网最早的杀手级应用程序)的,但是他们也用来发布软件和提供协作式的技术支持。当Larry Wall(后来以Perl的作者而出名)在1984年发明了补丁程序,原来到处发送存着源代码的9音轨磁带的笨重过程就被传递「补丁」──用来更新代码文件的编辑脚本──所替代了。加上Richard Stallman的GNU C编译器(GCC),以及像RCS这样的早期的源代码管理系统(RCS被后来的CVS以及今天的Subversion取代),你就进入了一个人人都可以共享以及更新免费软件的局面。早期Usenet既是一个对话的地方,也可以看成是一个共享软件的「Napster」。

早期开发者用来传播和支持他们的作品的机制,成为了一种超越技术领域的文化现象的基础。这种现象的核心是通过使用广域网络技术来把人通过兴趣联系起来,而非通过地理位置或者公司关系。这正是我们今天所看到的群众性文化转移的开始。

这种文化转移最早可能是在开放源码软件上面开花,但是它本质上并没有和使用自由或开放源码许可的信条绑在一起。

在1999年,和Apache项目的Brian Behlendorf一起,奥莱利成立了一家叫做CollabNet的公司来商业化Apache过程,而非Apache产品。和其它很多OSS项目不同,Apache不是由一个富有远见的开发者创立的,而是由一群被他们本来的「供应商」(NCSA)抛弃且一致赞同共同工作来维护一个他们所依赖的工具的用户创立的。Apache给我们上的一课就是,国际广域协作软件开发可以由尚未完全拥抱开放源码软件许可实践的公司来进行。比如,在大公司内部也可以实施开放源码协作的原则,即使公司不准备把最终的软件发布到外部世界。

CollabNet以主持像OpenOffice.org这样的知名的、由公司赞助的开放源码项目而著称,它最大的客户实际上却是惠普的打印机部门。那里,CollaNet的SourceCast平台被用于帮助超过3000名内部开发者在防火墙内部共享他们的代码。其它客户也在使用受开放源码启发的产品来和他们的客户或者商业伙伴共享代码,或管理分布在世界各地的开发组。

但是一个更有说服力的故事来自专有软件的代表──微软。很少人知道ASP.NET起源的故事。根据它的创造者──Mark Anders和Scott Guthrie──告诉我的,他们两人想重新设计微软的ASP产品并让它们懂得XML。他们被告知,如果这么做就会破坏向前兼容性,于是他们决定坚持原有的体系结构。但是当Anders和Guthrie有了一个月的项目间的空闲时间的时候,他们还是把自己的想法攒了出来,就为了看看能走到什么地方。微软的其他人听说了他们的工作,发现它很有用,并采用了其中的一些部分。过了大概六个还是九个月,他们接到了比尔盖茨的一个电话:「我想看看你们的项目。」

简而言之,微软的一个旗舰产品就是以内部「代码分支」的方式诞生的,两个开发者「挠自己的痒」的结果在微软公司内部传播了,还作为开放源码项目在开放的互联网传播开来。开放源码看起来就是联网社群的「自然语言」。只要有足够的开发者和把他们连接起来的网络,开放源码式的开发行为就会产生。

如果你同意开放源码许可制度是一种鼓励基于互联网协作的手段这一观点,且把注意力集中在目标而非手段上,那你就会开启一个更大的世界的大门。你会看见线条不仅系紧了传统的开放源码项目,也系紧了像SETI@home这样的协作式「计算网格」项目,还有amazon.com上的用户评论,协作式过滤,以及像那些在《线车宣言》中所描述的市场营销新思路,博客,以及互联网消息板现在能够影响股市这一现象。开始只是作为一种软件开发方法的东西,现在却随着网络化的对话成为了新思路的主要载体,它也逐渐成为了所有领域的一个方面。

协作成为了互联网应用成功和分化的中心,这一点让我尤其震惊。

Ebay®就是一个很明显的例子,它几乎是「网络效应」商业的定义。它的竞争优势是通过买家和卖家的临界人数获得的。拍卖行业的新进者很难与之竞争,因为买家和卖家都没有什么理由要去二线选手的网站。

Amazon可能更有趣。不像eBay的大批商品都由它的用户提供且每天都在动态变化,和Amazon卖的商品一样的东西在别的商家也能买到。但是Amazon的优势还是比别的商家高一个数量级。为什么?也许只是因为更好的执行能力,更好的价格,更好地服务,更好的品牌推广。但是一个明显的区分点是Amazon优秀的利用其用户社群的方式。

在我们的演讲里,我给出了一个简单的演示。我搜索了我出版领域之一的产品,JavaScript™。在Amazon上,搜索给出来一个含有四个主要区域的复杂页面。在顶上一块显示了三个「最畅销」产品。下面是一个长一点的搜索列表,且允许用户按照诸如畅销度、评级、价格、或者字母顺序排序。在右边和左边则有用户生成的「ListMania」列表。这些列表允许用户共享他们自己推荐的和特定主题相关的其它书籍。

标有「最畅销」的区域可能一开始不会跳出来。但是作为一个在amazon.com上销售东西的供应商,我知道这是由一项复杂的、专有的算法生成的结果。它不仅考虑了销量,而且合并了用户评论、用户相关产品推荐、来自ListMania列表的链接、「也买了」关联,以及所有其它Amazon称作产品周围的「流」的东西的数量和质量等诸多因素。

我经常喜欢展示的这一搜索的首项结果,一般都是我自己的《JavaScript权威指南》。这本书有192项评论,平均4.5星。这些评论都是亚马逊的客户们贡献的超过一千万条用户评论中的一部分。

现在我们来比较一下网上图书的二号选手,barnesandnoble.com。第一条结果是Barnes & Nobles自己出版的图书,而且也没有什么用户提供的内容迹象。《JavaScript权威指南》只有18条评论,这一用户参与上的数量级的差异也体现了销量上的数量级的差异。

Amazon并没有像eBay那样自然的网络效应优势,但是他们通过为用户参与来构架整个网站来创造了这一优势。每一样东西,从用户评论、替代产品推荐、ListMania、到允许用户通过推荐书籍来获得佣金的合伙计划,都鼓励着用户来为增强这个网站相互协作。2001推出的Amazon Web Service(Amazon Web服务)把故事带得更远,它允许用户以Amazon的数据和商务引擎为后台来创建另外的界面以及专门的购物体验(以及其它预想不到的应用)。

Amazon距离其竞争者的距离,以及它享有的市场领袖的安全地位,都由它的用户增加的价值所驱动。如果,就像Eric Raymond在《大教堂与市集》里面所说,开放源码的秘密之一是「像对待合作开发者一样对待你的用户」,那么Amazon确实学到了这一秘密。但是注意,这和开放源码许可实践完全无关!我们开始发现,曾经给出的作为开放源码的严格受限的模型很可能包含一系列资格,但是它们不总是一起出现。

Google则是网络效应故事的一个更微妙的案例。Google的最初发明是PageRank算法,其利用了web用户,通过他们指向别的网站的超链接体现出来的集体喜好来生成更好的搜索结果。在Google案例中,用户参与对于公司和其产品来说是外在的,所以可以被竞争对手复制。如果这一分析是正确的,Google的长期成功就在于找到利用用户创造的价值的额外方式,并将其作为核心产品。像orkut和Gmail一类的服务显示他们并没有错过这一课。

现在让我们来看一个反例。MapQuest®是一个造了新型web应用的另一位先锋,几乎每个互联网用户都依赖它。然而,这一市场却是在MapQuest(现在被AOL所拥有)、maps.yahoo.com、以及maps.msn.com(由MapPoint驱动)间颇为均匀地被瓜分了。三者都提供了一项由标准化的软件和数据库支持的商品业务。然而它们谁都没有采取一致努力来利用用户提供的内容,或者让用户参与到建设应用程序的活动中来。(请注意,三者也都为像NAVTEQ之类的数据提供商创造了一项Intel-Inside式的机会,NAVTEQ正在准备以几十亿的市值上市!)

用户参与体系结构

我发明了「用户参与体系结构」一词来描述那些为用户参与贡献而设计的系统的本质。Larry Lessig的《代码以及网络空间的其它法则》一书,据他称是对于Mitch Kapor的格言「体系结构就是政治」的扩展思考,并举例说:如果我们想要理解一个系统的效果,我们需要注意它的体系结构。

我立刻就想到了Kernighan和Pike对于前面谈到的Unix软件工具哲学的描述。我还回想起来了我们对Linus Torvalds一段未发表的采访内容,采访本是为1998年的书籍《开放源码》中一篇关于他的文章准备的。Torvalds也表达了体系结构可能比源代码更重要这一意思。「我不能在Windows上面做那些我能在Linux上做的事情,即使我有源代码。它的体系结构就不支持。」Windows的源代码里面有太多的相互依赖,耦合得非常紧的层次,使得单个开发者难以加入替换模块。

当然,互联网和World Wide Web毫无疑问地也具有这种参与性的体系结构。如同我们在《软件的商品化》一节中所勾画出的,任何围绕通信协议设计的系统,本质上都是为参与设计的。任何人都可以创造一个参与其中的一级部件。

此外,IETF互联网标准的处理流程和开放源码软件项目也有很多相似之处。最大的区别是IETF的产品是一个标准文档而非代码模块。尤其是在早年,任何人都可以通过加入邮件列表并发言的方式参与,或者是在每年的三次面对面会议上露面。标准是由参与的个人决定下来的,而非他们的所属公司。人们所提出的互联网标准的名字本身,RFC(评论请求),也展示了互联网的参与性设计。虽然商业性的参与也是受欢迎且受鼓励的,公司,和个人一样,也得以他们的想法和实现来竞争,而非他们的钱财或者不相称的代表人数。IETF的方法正是开放源码和开放标准的交汇之处。

虽然我们有像sendmail那样成功的开放源码项目,它们主要是由个人创造的,且有着庞大的整块体系结构,但那些创造了巨大的开发社群的项目,它们之所以能够成功,则是因为它们有着模块化的体系结构,这允许了独立的或松散协作的开发者能够轻易地参与进来。比如Perl的使用,就随着CPAN而爆炸式发展。它允许任何人通过特殊函数来增强这一语言,并让别的用户也能用到它们。

然而,Web把参与这一想法提升到了一个新高度,因为它不仅把参与开放给了开发者,更开放给了系统的所有用户。

开放源码社群没有把Web当成它的最大成就之一,这一事实总是让我迷惑和失望。如果你问大部分的最终用户,他们很可能会把Web和像微软Internet Explorer这样的专有客户端,而非造就了Web的开放软件体系结构的革命联系起来。这是公关的失败!Tim Berners-Lee最初的Web实现不仅是开放源码的,它还是公有领域的。NCSA的web服务器和Mosaic浏览器从理论上来说也不是开放源码的,但是源代码却免费可得。虽然NCSA的团队向Netscape的转移就是要把web基础设施的核心部分变成专有软件,微软和Netscape之间的争斗也让Web显得主要像是一个专有软件的战场,我们却知道事实还有另一面。Apache,这一从NCSA服务器重生出来的凤凰,一直都保持着开放的视野,维护着标准的诚实,从来没有向专有软件「拥抱且扩展」的战略投降。

但是更重要的是,HTML,网页的语言,把参与开放给了普通用户,而不仅仅是软件开发者。「查看代码」这一菜单选项从Tim Berners-Lee原来的浏览器移植到了Mosaic,然后又到了Netscape Navigator,甚至到了微软的Internet Explorer。虽然没人把HTML当成开放源码技术,但是它的开放性绝对是Web爆炸性扩展的关键。「外行」的进入壁垒很低,因为任何人都可以「透过肩膀」看看任何其他人是如何创建web页面的。用解释型语言创建的动态内容也让走向透明的趋势得以为继。

和我的论点更相关的,是超链接这一根本基础设施保证了Web的价值是由它的用户创造的。

在这个语境里,值得一提的是在奥莱利2001 P2P及Web Service会议(现在改名叫Emerging Technology Conference,新兴技术会议)上,Clay Shirky做的一次题为《聆听Napster》的演讲中提及的一项观察。Clay说,有三种方法来建一个大的数据库。第一种,由Yahoo!所示,是付钱让人来做。第二种,受到开放源码社群的启发,是让志愿者来做同样的事情。Open Directory Project,一个Yahoo!的开源竞争对手,就是其成果。(维基百科则是另一个例子。)但是Napster™展示了第三种方式。因为Napster默认设置就是自动共享任何下载的音乐,每一个用户都自动地为一个共享数据库创造了价值。

对于这一体系结构的理解可能更需要以开放源码的成功为中心,而非经常提到的志愿者精神。在Linux、互联网、以及World Wide Web的体系结构里,都是那些追求自己的「私利」的用户,以自动产生的副产品的方式来创造了集体价值。换一种说法,这些技术仅仅是通过其被设计的方式,就展示了像eBay以及Napster那样的相同的网络效应。

这些项目可以说是天生就拥有用户参与体系结构。但是如Amazon所示,通过一致的努力(以及像合伙计划这样的经济鼓励),完全有可能把这样一个体系结构安放到一个似乎不拥有它的系统上去。

可定制性和作为服务的软件

我的三个C里面的最后一个,customizability(可定制性),是作为服务的软件的一项必要的共生物。强调这个方面尤其重要,因为它说明了为什么像Perl、Python、以及PHP这样经常被老模式的软件开发者诋毁为仅仅是「脚本语言」的动态类型语言对今天的软件图景如此重要。

如我在1997年的《硬件,软件和信息件》一文中所说:

如果你看看像Yahoo!这样的大型网站,你会发现在它背后有一支在不断重建产品的管理者和程序员大军。动态内容不只是自动生成的,它们也常常是手工调整出来的,经常会用到一组快捷且肮脏的脚本工具。

「在Yahoo!我们不创造内容,我们整合它们,」Jeffrey Friedl说。他是《精通正则表达式》一书的作者,也是Yahoo!的一名全职Perl程序员。「我们有来自上千个地方的馈源,每个都有他自己的格式。我们进行大量的『馈源处理』来清理这些东西,找出它们该放到Yahoo!上的什么地方。」比如,要把合适的新闻链接到finance.yahoo.com的股票报价上,Friedl需要写一个能够搜索超过15000家公司名字的程序。Perl的使用强大的正则表达式来分析自由文本的能力,使得这成为可能。

Perl被称作是「互联网的胶带」,Perl这样的动态语言之于Yahoo!、Amazon之类网站,正如胶带之于供暖系统维修工,乃至任何一个需要临时固定什么装置的人一般重要。去任何一个课堂或者舞台表演,你都会发现胶带固定起来的麦克风线和其他的电线。

我们习惯把软件想成一件制品而非一个过程。当然肯定的,即使是在新的范式里面,也有需要按照准确的规格制作的软件制品、程序、日用组件,因为它们会被反复使用。但正是在软件没有被商品化的领域里面,那些把部件连在一起的胶水,那些管理数据和机器的脚本,以及所有需要经常改变以及快速原型化的区域里面,动态语言得以大放光芒。

像Google、Amazon、或者eBay这样的网站──尤其是那些反映了用户参与活力的──就不仅仅是产品,它们是过程。

我喜欢给人们讲土耳其行棋傀儡的故事,这是一个1770年的假装能下国际象棋的机器人的骗局。其中的秘密,当然,是有一个人藏在里面。这个土耳其傀儡还真的在计算的历史里面扮演了一个小角色。当Charles Babbage在1820年和土耳其傀儡下棋(还输了)的时候,他看透了这个骗局,但是他受到打动,开始思考真的计算机器是否可能。

今天,讽刺轮回,应用程序又开始有人藏在里面了。拿一份微软Word软件和一台兼容的计算机,它十年后仍然能够在上面运行。但是如果没有不断的爬取来保持搜索引擎如新,没有Amazon和eBay持续的产品更新,没有编辑和设计人员来把供应商和用户提供的内容整合到界面上,甚至没有投递商品的仓库工作人员,互联网时代的应用程序都无法工作。

即使在十年前,软件业还真不是这样。当然,总是有些企业级软件业务有这种特性。(美国航空公司的Sabre预约系统就是一个明显的例子。)但是只有今天,它们才成为了新的计算相关行业的占统治地位的范式。

任何新技术的第一代总是被看成是对上一代的延伸。这样,整个20世纪90年代,大部分人都觉得互联网是个人电脑的一项延伸或是附加物。电子邮件和web浏览是强大的附加品,毫无疑问,它们给热气开始不足的个人电脑产业带来了新的动力。

(开放源码支持者会讽刺地注意到,微软自Windows 95以来发布的新操作系统,大多数最重要的功能都是设计来追赶本是开放源码开发者设计的互联网功能。)

但是现在,我们开始发现一个完全不同的未来开始成形。Napster给我们带来了点对点文件共享,Seti@home让上百万人知道了分布式计算,现在web service又开始让即使如Amazon或Google这样基于数据库的庞大网站也像是更大的系统的一部分了。像IBM和惠普这样的供应商也为诸如「按需计算」以及「普及计算」这样的用词吵个不休。

手机、无线连接的笔记本、乃至像iPod®或TiVO®这样的消费者设备之间的界线都开始模糊起来了。它们每个的价值都大部分来自软件而非别的地方。Dave Stutz把这个形容为在单一设备层次以上的软件。

建造互联网操作系统

我想说,我们正在进入一个我们能够把互联网看成单独的一台虚拟计算机的时代。要做到这一点,我们需要建造一套互联网操作系统。

在我们面前的大问题是:这是什么样的一种操作系统?微软学到的是,如果你对于新范式有所洞见,你就会找到能够让你控制整个产业的秘密──「至尊戒,驭众戒」㊟,可以这么说。一个又一个的竞争者都想把微软从宝座上拉下来,抢走它的魔戒,但是都失败了。而开放源码和互联网教给我们的,是我们能够建造一个从下而上设计的,由「松散结合的小部件」组成的,其体系结构便于任何人参与创造系统价值的操作系统。

免费和开放源码社区的价值是这个范式中很重要的一部分。如同哥白尼革命是一个让社会远离等级、获取知识,并激发了探索和知识共享精神的更广泛的社会革命的一部分一样,开放源码也是为了最大程度地自由共享通过代码表达出来的思想而设计的通信革命的一部分。

但是自由软件的支持者在回避任何共享限制,并通过坚持一系列严格的软件许可方式来定义这一运动的时候,就已经太过分了。开放源码运动则做了更一致的努力来达到更高的包容性。Eric Raymond把「开放源码定义」描述成「对于思维的挑衅」,一份「社会契约……以及一份参加那些依附者所组成的网络的邀请。」但是即使开放源码运动对于商业更加友好而且支持了开发者选择非自由许可的权利,它仍然使用了确保共享的软件许可来作为试金石。

上一次的范式转移给我们的教训向我们展示了一个更微妙且有力的故事,而非仅仅是赠与文化和金钱文化的对立,或是一个共享者的社群和那些选择不参与的人的斗争。我们看到的是价值的动态迁移,这种价值里面,曾经藏起来用于私利的东西现在被免费地共享了,曾经被认为是偶发的事件现在成了巨大价值的核心。免费和开放源码软件支持者很容易把这个动态变化看成是一种堕落,一种对于本应与所有人共享的价值的囤积。但是历史的视角告诉我们,早期技术的商品化以及新技术的价值结晶,都是促进产业发展,以及为所有人创造更多价值的过程的一部分。最重要的是找到一个平衡点,使得我们作为一个产业,能够创造超过我们作为个人参与者能够捕获的更多的价值,富裕公利,创造他人长期发展的机会。

我说不出来这一切会走向何处。但是正如Alan Kay曾说,「预测未来最好的方式就是创造它。」下一步走向哪里,全看我们自己。

结论

《开放源码定义》以及如同《大教堂和市集》之类的作品都试图法典化开放源码的基本原则。

但是如Kuhn在谈及开辟了新领域学科的科学先锋时所指出:

他们的成就之前所未有,足以从互相竞争的科学活动模式里面吸引出来一批忠诚的追随者。同时,它也足够开放,能留下各类问题来供新出现的这组实践者来解决。同时具有这两种特性的成就,我就会把它称作「范式」。

简而言之,如果开放源码是一种足够强健以致能够被称作新范式的创新,那么它的故事还远远没有结束,它教给我们的东西也还远没有被吃透。与其把开放源码想成只是一组软件许可以及相关的软件开发实践,我们更应该把它想成是一项科学和经济上的探索,它有很多历史先例,也是更广泛的社会和经济故事的一部分。我们必须理解诸如标准以及它们对于商品化,系统体系结构和网络效应的影响,以及和作为服务的软件相关联的开发实践等因素的影响。不管它们是出现在专有软件还是传统开放源码项目,我们都要研究这些因素。我们必须理解软件的发布方式是如何改变其创造和使用方式的。我们也必须看到带来了早期软件代码共享的原则是如何影响其它协作活动领域的。只有不再用「哪些行为在定义之外」来衡量什么是开放源码,并转而研究它在前往未来之路上的旅伴,我们才能理解其真正影响,并为完全拥抱新的范式做好准备。

㊟:《指环王》中镌刻于至尊魔戒上的话。