书 · 1999-10 · 埃里克·S. 雷蒙德(Eric S. Raymond)

《大教堂与集市》

计算机与 AI书单第 35 名

一句话结论

开放协作之所以可能产出好软件,在雷蒙德看来,是因为它能把分散的需求、知识和贡献组织起来,而声誉、社区规则与商业利益让这种合作持续下去。

值不值得读完整本?

值得读完整本,尤其是在计算机与 AI 学科书单中:同名文章只解释了开发方式,全书还解释人为什么贡献、项目如何维持秩序,以及开放代码怎样获得经济支持。

  • 重点细读第二至第四章,把开发反馈、贡献动机、社区规则和商业模式连起来,避免只记住“人多好找错”这一句。
  • 第二章的邮件程序技术细节可以略读,但要看懂作者怎样接收用户建议、修改设计,以及他为集市模式设置了哪些前提。
  • 第一章和第五章帮助理解黑客文化与开源推广的历史背景;后记适合带着“这些机制能否推广到软件之外”的问题读。
  • 附录中的入门建议和项目统计可按兴趣阅读。下文章节编号采用资料卡提供的2001年修订版目录,不视为1999年初版逐项目录。

核心观点

1. 尽早发布,把用户变成共同开发者

集市式开发让尚未完善的软件尽早接受实际使用,再通过频繁发布吸收反馈。用户既是产品的使用者,也可能成为发现问题、提出设计和提交修补的人。

为什么:开发者独自设想需求,很容易漏掉真实使用中的问题。尽早发布能把这些问题提前暴露,缩短从发现问题到验证修改的时间。及时吸收贡献,又让参与者看见自己的工作确实产生影响,增加继续贡献的动力。因此,频繁发布的价值来自反馈被持续处理,而不只是版本数量增加。

2. 多人调试的优势来自知识和使用环境的差异

雷蒙德提出,足够多的测试者和共同开发者能使许多难题更快被识别,并让修复办法对某个人变得清楚。这是他所谓“林纳斯定律”的核心。

为什么:同一个故障,对不同背景的人可能有完全不同的难度。更多用户带来更多运行条件,也更容易触发少数开发者没有遇到的问题。发现症状、明确问题和理解修复办法还可以由不同的人完成,不必由一个人包办。作者认为,这类调试可以较多地并行进行,再由协调者汇总结果,因此不必承受所有人彼此密切沟通的全部成本。

3. 合作需要可运行的起点,也需要会识别好主意的协调者

个人想解决的实际问题,是项目的重要起点;复用现有成果通常比凡事重写更有效。集市式改进仍需要可运行的基础,以及能够判断、整合他人贡献的协调者。

为什么:自己真正需要的软件,会给开发者持续投入的理由,也让他能够判断改进是否有用。复用已有代码能减少重复劳动,让精力集中在尚未解决的问题上。但陌生贡献者需要看见一个可以运行、值得继续改善的东西,才能决定如何参与。贡献增加以后,协调者还必须辨认好设计并保持沟通,否则许多建议无法组成一致的软件。

4. 赠与代码可以换来同行声誉

作者把黑客社区解释为一种礼物文化:参与者通过贡献有用的成果获得同行认可。编程乐趣、解决自身问题和获得声誉,可以同时推动贡献。

为什么:代码可以复制,贡献者不必靠限制别人使用,才能从自己的劳动中获得回报。高质量成果被同行采用和认可,会给贡献者带来满足、信任和影响力。声誉又能帮助他吸引合作,使后续项目更容易开展。作者并不要求每个人都自觉追逐名声,而是认为,即使个人主要享受编程,社区评价仍会塑造哪些贡献受到鼓励。

5. 代码可以自由修改,项目仍有维护权和署名规则

开放许可之外,社区还形成了关于项目维护、交接、署名和分支的惯例。作者所说的项目“所有权”,主要涉及社区承认的维护与发布地位,不能直接等同于排他的法律产权。

为什么:如果任何人都能随意夺取功劳,贡献者就难以稳定获得声誉回报。如果修改版引入错误,却仍被归咎于原维护者,原维护者也会承受无法控制的声誉损失。尊重署名、公开交接和谨慎建立独立分支,可以使责任与认可更清楚,并减少争夺维护地位的冲突。因此,允许复制的代码与相对稳定的社区秩序能够同时存在。

6. 开放代码不等于没有经济价值

雷蒙德区分软件的使用价值与出售软件副本所获得的价值。开放代码可能削弱部分销售收入,却仍可支持共同出资开发、服务以及相关产品等商业活动。

为什么:企业需要软件,往往是因为它能支持业务,而不是因为企业打算出售代码。多个使用者共同维护一套软件,可以分担各自独立开发和维护的成本。公开代码并形成跨组织的维护社区,也能降低对单一供应商或原始开发者的依赖。服务和互补产品还可能从更广泛的采用中获利,所以判断是否开放,应比较这些收益与保密带来的收益,而不能只看副本售价。

反对意见

集市也会被讨论和协调成本拖垮(Alan Cox)

Cox 在《Cathedrals, Bazaars and the Town Council》中回顾 Linux 8086 项目:开放讨论可能被缺乏实际贡献的争论占据,使核心开发者退回小圈子。他强调及早拿出代码、培养贡献者,以及承认文档等非编程工作。这说明扩大参与只有配合实际组织工作,才可能增加有效产出。

集市隐喻把共同体说得过于简单(Nikolai Bezroukov)

Bezroukov 在《Open source software development as a special type of academic research: Critique of vulgar Raymondism》中主张,以学术研究共同体理解开源,更能看见其历史来源和组织限制。他在后续文章中进一步讨论地位竞争,反对过分和谐的社群图景。这些批评挑战的是雷蒙德模型的解释范围;雷蒙德也发表回应,反对批评者对其观点的概括。

只谈效率,会漏掉软件自由的价值(Richard Stallman)

Stallman 在《Why “Open Source” misses the point of Free Software》中认为,用户使用、研究、修改和分享软件的自由,本身就是应当维护的目标。如果主要用效率、可靠性和商业收益为开放辩护,那么当某种专有方案表现更好时,这套理由就不足以继续捍卫自由。这是对雷蒙德实用主义路线的价值批评,并非逐章反驳本书。

两种开发方式已经相互吸收(Terhi Kilamo 等)

Kilamo 等人在《How the Cathedral Embraced the Bazaar, and the Bazaar Became a Cathedral》中回顾开源与闭源开发的共同演化,认为二者在工具、实践和组织上的共同点已经多于差异。这提醒读者:两种隐喻有助于识别开发特点,但不足以把现实项目分成两个互斥阵营,也不能直接与开源、闭源许可一一对应。

相关推荐

导读由 AI 根据公开资料整理,没有读取原书全文,一切以原著为准。导读 Primer 首页