大教堂与集市
The Cathedral and the Bazaar
Eric S. Raymond 对 Linux 历史的观察,颠覆了传统软件工程的认知,揭示了两种截然不同的开发哲学。
两种模式的对决
大教堂模式
集中式、预先规划、保密开发
- ▸ 由少数天才巫师在与世隔绝的环境中精心构建。
- ▸ 严格的中心化控制,发布周期长。
- ▸ Bug 被视为深奥、隐匿的难题。
- ▸ 在发布前,版本严格保密。
集市模式
分布式、演进式、开放协作
- ▸ 在混乱喧嚣的合作中,由众人共同演化而成。
- ▸ 早发布、常发布,最大程度地授权。
- ▸ 相信“只要眼球足够多,所有 Bug 都显而易见”。
- ▸ 从一开始就将用户视为共同开发者。
一个故事的开始:Fetchmail 的诞生
个人之痒
1996
作者需要一个更好的 POP3 客户端来解决邮件回复地址的问题。“每个好的软件都始于一个开发者的个人之痒。” (法则 1)
重写与复用
重构
作者没有从零开始,而是选择了一个有潜力的项目 `popclient` 进行重写和改进。“伟大的程序员知道要重写(和复用)什么。” (法则 2)
项目交接
社区精神
原作者欣然将项目移交给更有热情的继任者。“当你对一个程序失去兴趣时,最后的责任是把它交托给一个称职的继任者。” (法则 5)
`fetchmail`诞生
质的飞跃
在采纳了用户关于 SMTP 转发的建议后,项目被重构并更名为 `fetchmail`,找到了自己真正的身份。
顿悟时刻:Linus 定律
"Given enough eyeballs, all bugs are shallow."
只要眼球足够多,所有 Bug 都显而易见。
发布周期的对比
集市模式的 19 条实践法则
项目启动与动机
万事之始
1. 每个好的软件都始于开发者的个人之痒。
4. 如果你有正确的态度,有趣的问题会自己找上你。
18. 要解决一个有趣的问题,先找到一个让你自己感兴趣的问题。
设计与开发哲学
建造之法
2. 好的程序员知道写什么,伟大的程序员知道重写和复用什么。
3. "准备好扔掉一个版本,你终将为此。"
9. 聪明的数据结构和傻瓜式的代码,远胜于反之。
12. 最具创新性的解决方案,往往源于你意识到自己对问题的看法是错的。
13. "设计的完美,不是无可增加,而是无可删减。"
14. 一个真正伟大的工具,会以你从未预料到的方式被使用。
15. 编写网关软件时,尽可能少地干扰数据流。
16. 当你的语言远非图灵完备时,语法糖可以是你的朋友。
17. 安全系统与其秘密一样安全。警惕伪秘密。
社区与协作的力量
众人拾柴
5. 当你对程序失去兴趣时,将它交托给称职的继任者。
6. 将用户视为共同开发者,是快速改进和高效调试的捷径。
7. 早发布,常发布,并倾听你的用户。
8. 只要有足够大的测试和协作基础,几乎所有问题都会被快速定位。
10. 如果你视测试者为最宝贵的资源,他们会真的成为你最宝贵的资源。
11. 识别用户的“好点子”,有时比自己拥有好点子更重要。
19. 只要有好的协作媒介,并且领导者懂得无为而治,众人拾柴必然火焰高。
背后的驱动力:Egoboo 经济学
开源社区并非纯粹的利他主义,而是由一种非物质的“效用函数”驱动:黑客们的自我满足和在同行中的声誉 (Egoboo)。
集市模式成功地将个体黑客的“自私”动机与只有通过持续合作才能实现的宏大目标紧密相连,形成了一个高效、自发、自我纠正的良性循环。
历史的回响
1991
Linux 诞生
Linus Torvalds 开始以“早发布、常发布”的集市模式开发 Linux 内核,颠覆了操作系统开发的世界。
1997.05.21
《大教堂与集市》发布
Eric S. Raymond 首次公开发表本文,系统性地总结了集市模式的理论与实践。
1998.01.22
网景拥抱集市!
Netscape 宣布开源其浏览器源代码,并明确表示此决策深受《大教堂与集市》的启发。这是开源思想在商业世界的一次里程碑式胜利。