2.11 开源软件的社会语境
此言不虚:最好的程序一开始只是作者对自己每天遭遇问题的个人解决方案,程序流传开来则是因为作者遇到的问题成了一大类用户的典型问题。这将我们带回规则 1,并以一种可能更有用的方式来重申:
18.想要解决一个有趣的问题,先去找一个让你感兴趣的问题。
Carl Harris 和先前的 popclient 是这样,我和 fetchmail 也是这样。这个道理已经早为人知,而 Linux 和 fetchmail 的发展历史让我们关注到更有趣的一点,那就是下一阶段——由用户和共同开发者们组成庞大而活跃的社区,共同促进软件的进化。
在《人月神话》中,Fred Brooks 发现程序员的时间是不可替代的,增加开发者进入一个已经延迟的软件项目,只会让项目更加延迟。像我们前面看到的那样,他指出,项目复杂度和沟通成本与开发人员数目的平方成正比,与此同时,工作完成量只会随人数线性增长。Brooks 定律已经被广泛地视为真理,但在本文中我们已经通过多种方式论证了开源软件的开发过程不满足这个定律背后的一些假设——并且从实践上看,如果 Brooks 定律普适于所有开发项目,Linux 是不可能完成的。
作为一种后见之明,Gerald Weinberg 在经典之作《程序开发心理学》(The Psychology of Computer Programming)中提出了对 Brooks 定律的重要修正。在他关于“无私编程”(egoless programming)的讨论中,Weinberg 观察到,在某些工作场所,开发人员不将代码看作是自己的“领土”,而是鼓励别人发现其中的 bug 和潜在改进点,这些场所中软件改善速度之快,与别处相比是不可同日而语的。(最近,Kent Beck 在其“极限编程”(extreme programming)技术中提出的结对编程——两个程序员肩并肩共同完成编程——可以看作是一种效仿。)
也许是 Weinberg 在用语选择上的问题,导致他的分析未能获得应有的认可——用“无私”来形容互联网上的黑客,这可能会让某些人感到可笑。但我认为他的论点在今天看起来比以往任何时候都更有信服力。
集市模式,运用“无私编程”效果的充足能量,强有力地化解了 Brooks 定律的影响。Brooks 定律背后的原理没有失效,但如果有一个大规模的开发群体和一个低成本的沟通机制,Brooks 定律的效果将会被其他非线性因素带来的效果淹没,而后者是大教堂模式下看不到的。这很像是物理学上牛顿理论和爱因斯坦理论的关系——在低能量条件下,老的系统仍然有效,但如果把质量和速度推进到足够大的地步,你就会震惊于核爆炸或 Linux。
UNIX 历史为我们从 Linux 中获取经验早已做下了铺垫(为验证其有效性,我专门在一个较小规模的项目上拷贝了 Linus 的方法 9),那就是,当编码在本质上仍然是个体行为时,真正了不起的作品来自于对整个社区注意力及脑力的有效利用。一个在封闭项目中只靠自己的开发者,将远远落后于这种开发者:他们知道如何创建一个开放的、有改进能力的环境,在这个环境中,上百人(甚至上千人)反馈并提供设计空间拓展、代码贡献、bug 定位以及软件的其他改进。
传统的 UNIX 世界中,有一些因素阻止了把这种方法推进到极致。一方面是各种许可证(license) 的法律限制、商业秘密和市场利益,另一方面(现在看来)是当时的 Internet 还不够好。
在互联网变得便宜之前,有一些地域性的协作社区,他们在文化上鼓励 Weinberg 的“无私编程”,开发人员可以很容易地吸引到很多高水平的评论者和合作开发者。如 Bell 实验室、MIT 的 AI 实验室和 LCS 实验室、UC Berkeley 大学——这些地方都是创意的家园,它们充满传奇并依然强劲有力。
Linux 是第一个有意识并成功将整个世界作为其人才库的项目。Linux 孕育之时万维网(World Wide Web)刚刚诞生,Linux 蹒跚学步之时(1993-1994)ISP 产业开始起飞,与此同时,主流对 Internet 的兴趣也开始爆发,我认为这都不是巧合,Internet 普及之后,Linus 是学会如何运用新规则的第一人。
廉价的 Internet 是 Linux 模式得以发展的必要条件,但我认为它还不足以成为充分条件。另一个非常重要的因素是领导风格的形成和协作机制的建立,这是吸引合作开发者加入项目的关键,也是充分利用互联网媒介作用的关键。
但应该是什么样的领导风格和协作机制呢?它们不应建立在权力关系上——即便可以这样,强制型的领导风格也无法产生我们今天所见的成果。
Weinberg 引用了 19 世纪俄国无政府主义者 Pyotr Alexeyvich Kropotkin 所著《一位革命家的回忆》(Memoirs of a Revolutionist)中的一段,很好地诠释了这个问题:
“我成长于一个农奴主家庭,在投入积极生活之时,像那个年代所有年轻人一样,我非常相信命令、指示、斥责、惩罚等行为的必要性。但当我早期不得不管理重要事业并和(自由)人打交道时,在任何错误都会立刻导致严重后果时,我开始感悟到按“命令与纪律原则”行事和按“共识原则”行事之间的重要区别。前者在军队检阅时的作用令人钦佩,但在真实生活中却一文不值,想要达到目标,必须要靠众人的齐心协力。”
“齐心协力”正是 Linux 这种项目所需要的——对 Internet 上(可以看成是无政府主义者的天堂)的志愿者们使用“命令原则”是根本行不通的。如果某个黑客想领导一个协作项目,想要项目有效地运作和竞争,他就不得不学会如何施行 Kropotkin 所提出的“共识原则”,招募和激励有兴趣的成员形成有效社区。他还必须学会如何使用 Linus 定律。 10
前面我提到的“德尔菲效应”也许可以解释 Linus 定律。但我常常注意到,生物学和经济学中的自适应系统是更好的类比,Linux 世界的运转,在很多方面像一个自由市场,或者像一个由很多利己个体组成的生态系统,系统中每个个体都追求自身效用的最大化,在其共生的过程中,能够自然建立起一种具备自我纠错能力的秩序,这种秩序比任何集中式规划都要精妙和高效。这里,正是“共识原则”达成的地方。
Linux 黑客们致力于最大化的“效用函数”,其目的并不是经典意义上的经济价值,而是自我满足和黑客声望这些无形的东西。(有人把这种动机称为“利他”,但他们忽视了一个事实,即“利他”本身是“利他者”自我满足的外在表现。)按这种方式运转的志愿者文化其实很常见,除了黑客圈,我还长期参与在科幻迷圈子中,不像黑客,科幻迷们早就清楚认识到“egoboo” [5] (个人在团体中声望的提升)是志愿者活动背后的基本驱动力。
Linus 成功地将自己置于项目看门人的地位——大多数开发工作是他人完成的,他不断培养大家对这个项目的兴趣直到它能够自我维持下去,这表现出他对 Kropotkin“共识原则”的敏锐领会。用这种“准经济”(quasi-economic)视角来观察 Linux 世界,有助于我们理解“共识原则”是如何应用的。
可以把 Linus 方法看成是创造一个有效率的“egoboo”市场——把一个个黑客的利己动机尽可能牢靠地牵系到一个艰巨的任务目标上,而这个目标只有在众人持续的合作之下才能达成。正如我在 fetchmail 项目上所展示的(虽然项目小了点),Linus 方法可以被复制并取得很好效果。也许我做得比他更有意识和更有计划一些。
很多人(尤其是那些在意识形态上不相信自由市场的人)把个人导向为主的利己主义文化看成是碎片化的、本位主义的、浪费资源的、不共享和不友善的。这里仅给出一例,就能很有力地证伪这个认识,那就是 Linux 文档有着令人震惊的广度、深度和质量。程序员痛恨写文档似乎已经成为一个不争的事实,那为什么 Linux 黑客们还要写出这么多文档?很明显,Linux 自由的“egoboo”市场比那些有重金投资的商业软件公司,能够产生更有道德、更利他的行为。
fetchmail 和 Linux 核心项目都表明,如果对参与者的“自我”做适当奖赏,一个优秀的开发者或协调者可以利用 Internet 获取多开发者的好处,而不会让项目陷入混乱不堪。所以对 Brooks 定律,我有如下的对立意见:
19.如果开发协调者有一个至少像 Internet 这样好的沟通媒介,并且知道如何不靠强制来领导,那么多人合作必然强于单兵作战。
我认为开源软件的未来会越来越属于那些懂得如何玩转 Linus 定律的人,属于那些离开大教堂并拥抱集市的人。这不是说个人眼光和远大志向不再重要,相反,我认为冲在开源软件最前沿的人,正是凭借自己的眼光和才华而发起项目,并通过构建有效的志愿者社区将之发扬光大。
可能这不只是开源软件的未来。但没有任何闭源开发者可以发动像 Linux 社区那样庞大的人才库来解决一个问题,也很少有人能雇得起对 fetchmail 做出贡献的那 200 多人(1999:600,2000:800)!
可能最终导致开源软件取得胜利的,不是因为“合作是道德正确的”或“软件闭锁 [6] 是道德错误的”(也许你相信后者,但 Linus 和我不这样认为),而仅仅是由于闭源世界不能赢得一场与开源社区之间的不断演化的军备竞赛,因为后者可以在一个问题上投入比前者多几个数量级的熟练技术工时。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论