Linus Torvalds与Linux贡献者的开源协作关系
群体的智慧林纳斯·托瓦兹与Linux贡献者的开源协作表明,分散式社群如何利用广泛分布的知识,同时又不放弃协调。托瓦兹公开了Linux源代码供公众查阅,并邀请他人提交可自由分发的贡献;世界各地的程序员回应这一邀请,提供修复和功能,而包括托瓦兹在内的一小群程序员则在改动进入系统前进行评估。这种安排容纳的方案远多于传统公司通常能够提出的数量,但其成功有赖于一个汇总环节——分散化带来备选方案,审查则使这些方案能够共同发挥作用。
起源与邀请
1991年,芬兰黑客林纳斯·托瓦兹创建了自己的尤尼克斯操作系统版本,并将其命名为Linux。他公开了源代码,以便懂得计算机代码的人检查他的成果。他的邀请直截了当:“如果你的成果可以自由分发,我希望听到你的消息,这样我就能把它们加入系统。”这一条件为协作划定了框架——贡献可以来自任何正式组织之外,但提交这些贡献,是为了让它们有机会并入一个共享系统。
最初的回应迅速表明,开放代码可以调动多少专业知识。最先下载Linux的十个人中,有五个人寄回了错误修复、代码改进和新功能。这种交流并未停留在一阵非正式的活跃状态。随着时间推移,这一过程逐渐制度化,数千名程序员无偿工作,提供了数以千计的大大小小的改动。他们持续投入,使Linux变得更加可靠、稳健。
没有企业组织架构的工作
Linux没有所有者,也没有正式组织。本书将它与由微软拥有、由微软员工开发的视窗系统作对比——Linux没有分派任务的老板,也没有划分职责的组织架构。出现问题时,只有在某个人主动提出良好解决方案时,问题才会得到修复。贡献者可以选择自己感兴趣的工作,也可以对其他工作置之不理。这种过程看起来杂乱无章,但本书认为它极为有效;Linux成为微软最重要的挑战者。
没有任务分派,也改变了系统能够吸引的工作范围。传统公司雇用员工、支付全职薪水,并引导他们解决选定的问题。这种结构可以集中精力,帮助企业擅长处理熟悉的任务,但它限制了参与人数、可投入的时间,以及组织政治允许浮现的解决方案数量。Linux没有受到同样的限制。大量程序员愿意贡献力量,他们各异的视角拓宽了可能的修复方案范围。是否有人能发现错误并设计补救办法,取决的不是某位指定专家,而是参与观察者的数量和多样性。
这种广度也带来了显而易见的代价。数百或数千名程序员可能花时间探索只有少数人能找到的解决方案,而这些时间原本可以用于其他工作。本书把这一过程比作蜂群派出大量采集蜂——并行搜索不如选定一条自认为最佳的路线,或派出一只自认为最优秀的采集蜂来得有效率。然而,冗余也是力量的来源。就像市场会产生备选方案、再逐步筛选一样,Linux也可以先让许多方案涌现,再从中择优。开源格言“只要有足够多的眼睛,所有错误都浅显易见”概括了这一原则。
审查与汇总
分散式社群并不会自动产出明智的结果。贡献和观察必须以某种方式汇集起来,否则,系统某处发现的有用知识可能永远无法惠及其他部分。本书指出,Linux的汇总机制是由少数程序员组成的小组,其中包括托瓦兹;他们会审查针对操作系统源代码提出的改动。程序员或许在世界各地独立工作,但决定哪些内容进入Linux,最终仍要回到托瓦兹和他的其他审查者手中。
本书质疑,代码筛选是否必须掌握在如此少数人手中。规模更大的群体,即使技术水平不如托瓦兹及其核心助手,也可能同样能够评估贡献。但本书的核心观点是,某种判断程序不可或缺。如果没有汇集贡献者评估结果的办法,一群自主程序员所能取得的最佳成果,就只能是其中最聪明的个人所提出的成果;而且,无法保证这个群体一定能找到此人的方案。有了汇总机制,社群的综合判断就可能胜过其中最聪明的成员。
在这一论述中,汇总是一种有限而又矛盾的集中化形式,并不等同于中央计划。小规模审查小组既不指挥每位贡献者的工作,也不抹去促成贡献多样性的独立性。它提供了一种途径,使独立形成的判断能够影响共享代码。因此,Linux依赖于一种平衡——贡献者保有发现并开发本地解决方案的自由,同时,审查过程将这些努力连接成集体成果。
意义与局限
这种协作展现了一个更广泛的问题——如何将本地知识与整个系统的运用结合起来。与个人经验或工作相关的知识可能难以传达,但它的价值恰恰可能在于贴近某个特定问题。分散化鼓励人们专门钻研并形成这类知识,从而扩大系统可利用的知识范围。它的弱点在于,若没有传播和评估发现成果的途径,这些成果可能彼此隔绝。Linux公开源代码,邀请人们作出贡献;其审查程序则帮助将各自独立的贡献整合成一个能运作的整体。
这种区分也限定了这个例子能够证明什么。Linux的成功并不能说明所有分散式安排都会成功,也不能说明每项选择都应在本地作出,或每项审查职能都应交给一个小组。按照本书的论述,分散式倡议能够创造可能性,但它本身无法保证信息得以传播,也无法保证最有力的方案会被选中。Linux的成就在于将广泛参与与有选择的汇总结合起来——没有中央组织分派工作,但各项贡献也没有仅仅停留在一系列彼此独立的个人努力上。独立创造与决定保留哪些成果的机制相结合,使代码成为共享系统。