通往开源之路

《大教堂与集市》读书笔记

从自由软件到开源软件

在计算机时代的上古年代,软件是作为计算机硬件的附属而存在,而且一般是附带源码,便于用户做修改或定制。而且在学术界和黑客社区,分享源码并在此基础上修改、添加功能是非常自然的事情。可以说,自由软件是计算机行业的传统,一直到1970年代中期前,软件是被鼓励自由拷贝的。这一切到了1970年代末,形式开始变化,比尔·盖茨的一封《致爱好者的一封信》标志着软件开始走向商业化和专有化。1978年,施乐公司提供给 MIT 人工智能实验室的打印机没有像往常一样附上源码,这个举动让当时在 MIT 工作的 Richard Stallman (以下简称 RMS) 愤怒了,同时他也感叹“一个时代结束了”。但他并没有对此妥协,在1984年 RMS 辞去 MIT 的工作,发起了 GNU (GNU’s not Unix) 计划,并成立了自由软件基金会(FSF),开启了他对抗专有软件之路。RMS 提出了自由软件的概念,并定义了四种自由(参见《若为自由故》)。RMS 还提出了 Copyleft 的授权方法,也也就是我们所熟知的 GPL 协议。除了这些概念上的创新,RMS 开始打造完全自由的软件系统 —— GNU: 从 emacs 编辑器,到 GCC 编译套件,以及各种软件工具和开发库,GNU 将 Unix 系统上的专有软件替换的差不多了,唯独还缺少了操作系统内核 —— Hurd.

而到了1991年,一位芬兰的大学生 Linus Torvalds 开始基于教学用的操作系统 Minix 打造他自己的玩具操作系统 —— Linux, 这一切都是为了好玩(参见《最著名的黑客》)。在发布了第一个版本0.01后,Linus 决定接受 RMS 的建议,采用 GPL 协议授权发布 Linux, 使它成为一个自由的操作系统软件。Linux 受到自由软件社区的追捧,而另一方面,以 Linux 内核制作发行版的商业公司也如雨后春笋般出现,这里面最知名的是红帽 Redhat 公司,他们发行了 Redhat Linux 并出售商业版及服务,取得巨大成功,公司于1999年上市。

相对于 RMS 对于自由软件哲学的执着,Linus 本人并不关心自由软件运动,而他管理下的 Linux 社区却日益发展壮大,Linus 本人也成为了新的黑客领袖。老牌黑客 Eric Raymond (以下简称 ESR) 在研究了 Linux 的开发过程后,发现 Linux 的成功并非是所谓的自由软件哲学,而是 Linus 采用了一套与以往软件开发都不同的模式 —— 无论是专有的 Windows 或 Unix, 还是自由的 GNU emacs 或 GCC, 都是由一个人或一个团队控制着整个软件的开发过程,这种模式 ESR 称之为大教堂模式;而 Linux 则是更加开放并借助互联网协作的集市模式。ESR 将此总结成《大教堂与集市》文集并发表,在社区得到了极大的关注,网景公司因此将他们的主要软件代码开放,也就是今天的 Firefox; 而 ESR 又与他的同伴们一道,发起了对计算机行业影响重大的“开源软件运动”。

the cathedral and the bazaar

大教堂与集市

《大教堂与集市》探讨了两种软件开发模式 —— 大教堂模式和集市模式。因为当时还没有“开源软件”这个名词,文集中写的是自由软件,但现在大家一致认为这本书就是开源软件运动的“圣经”。在此之前,研究软件工程的圣经当属《人月神话》,特别是《人月神话》Brooks 定律 —— “延期的软件项目中添加人手,只能让项目更延期。”成为了形容软件开发过程极其复杂的经典定律。不过 ESR 指出《人月神话》中的这句定律在传统的开发团队中成立,而在互联网沟通的时代,加上类似 Linus 这样的权威仲裁者,那么开发人力应该是越多越好。他也因此总结了一个 Linus 定律:只要眼球足够多,所有 bug 都好捉。

ESR 在研究 Linux 项目的同时,还在他的新项目 fetchmail 上付诸实践了这种集市开发模式,并总结的19条经验之谈。以下直接摘抄翻译原文,我将自己觉得更有价值的条目加粗标识:

  1. 所有好的软件都源于解决开发者本人的痛点问题
  2. 好的程序员知道要写什么,伟大的程序员知道要如何重写与重用。
  3. “计划好抛弃一个,无论如何,你总会扔掉一个。” (摘自《人月神话》)
  4. 如果你有正确的态度,有趣的问题自然就来了。
  5. 如果你对一个项目失去了兴趣,你最后的职责就是把它交给一个称职的继承者。
  6. 把用户当做合作开发者是快速改进代码和有效调试的最佳方法。
  7. 尽早发布,经常发布,并听取用户意见。
  8. 如果 beta 测试者和合作开发者的群体足够大,几乎所有的问题都会快速现形,也会被人快速解决。
  9. 优秀的数据结构和丑陋的代码远比反过来的组合好。
  10. 如果你以“最有价值的资源”来对待你的 beta 测试者,那么他们就真的成为你的“最有价值资源”。
  11. 仅次于拥有好点子的就是识别出来自于用户的好点子,有时候后者更好。
  12. 最有突破和创新的方案往往来自于你意识到把问题的概念弄错了。
  13. “完美的设计不是不能再增加什么东西,而是不能再减少任何东西。” (摘自《小王子》)
  14. 任何工具都应达到预期的用户,但真正伟大的工具会带来从未预想到的用处。
  15. 在写任何网关软件的时候,尽量不要干扰数据流 —— 除非用户强迫,否则不要扔掉任何信息。
  16. 当你的语言不像是图灵完备时,语法糖是个好东西。
  17. 所谓安全的系统,只有在其不为人知的时候才是安全的。当心伪安全。
  18. 要解决一个有趣的问题,首先得找到有趣的问题。
  19. 如果开发的协调者有至少跟互联网一样好的沟通媒介,以及懂得不通过强迫方式去管理的领导,那么人力越多越好。

第14条也让我印象深刻,比如 Git, 就是一款带来远超预期想象的伟大工具,有机会后面我再写它。《大教堂与集市》是一本理解开源软件的必读之书,可以说是通往开源之路的指南针,它揭示了 Linux 等开源软件的成功秘诀。在 ESR 的网站上可以阅读全文。1

魔法大熔炉

《大教堂与集市》集结成书时,包含了五个章节:

  1. “黑客文化简史”: ESR 以黑客视角讲述黑客文化和历史。
  2. “大教堂与集市”: 对 Linux 开发模式的探索和用集市方式实践 fetchmail 的社区协作开发。参加本文上一部分。
  3. “开拓智域”: ESR 结合社会学、经济学理论,研究黑客们参与开源贡献的动机。ESR 发现,与 Locke 土地产权理论所代表的“交换文化”所不同的是,黑客参与开源社区的背后是“礼物文化”。在这种文化下,黑客们更加关注“声望”(reputation), 这是参与开源贡献的精神动力。
  4. “魔法大熔炉”: ESR 探讨了开源软件的商业模型,给出了一些开源软件的赚钱模式:如通经过广告、服务、附加产品、内容等方式获取利润。
  5. “黑客的反击”: 在这个章节里,ESR 则吹响了《共产党宣言》式的革命号角,号召黑客们采取自上而下的战略方针,通过游击战的市场策略,通过开源认证等实施方式,夺取财富500强,让开源软件攻占工业界。回头看,二十年前的星星之火,现在已成燎原之势。

ESR 在二十多年前写的这些文章,现在看来很有先见之明。与 RMS 对于自由软件的狂热近乎原教旨所不同的是,ESR 对于自由软件理念的那套理论并不认同,他认为如果想要让自由软件/开源软件获得更广阔的发展空间,需要拥抱商业公司。因此他在“魔法大熔炉”中总结了商业公司利用开源软件可能的获取利益的多种方式,这也为接下来二十年开源软件的繁荣发展奠定了理论基础。黑客精神结合商业价值,用魔法大熔炉烹制出美味的软件盛宴。

但实际上,现在开源软件的商业价值已超出了他当年的预计,越来越多的大公司不仅仅因为贩卖服务、内容来获取开源软件的价值。在十年前,参与开源社区(特别是 Linux 社区)的大公司多为硬件产品为主公司,如 IBM、Intel 等,其目的很明显,为了在内核中预埋特性来提升他们的硬件竞争力。而近十年,我们看到越来越多的软件及互联网巨头参与开源,如微软、Google、Facebook 等。这些软件巨头根本就没想利用开源软件来卖硬件或服务,而是利用开源来构筑事实标准,从而建立生态甚至垄断行业,比如 Google 的 Android、kubernetes;而微软的 VSCode 更是吸引了大量的开发者用户,这跟微信免费是类似的道理。

对于个人来说,黑客或者说开发者在开源社区的贡献也不单单是义务的付出,开发者获得的“声望”是个人在社区建立的影响力和个人品牌。而开源对于个人开发者的更大的好处在于:如果把软件技术和知识看作是软件劳动者的生产资料的话,那么开源正是打破了软件巨头垄断,让生产资料真正掌握在劳动者的手里。因此,从某种意义上说,开源也是一场“共产主义”运动(虽然 ESR 曾经在采访中驳斥了开源是共产主义的说法)。2


  1. The Cathedral and the Bazaar: http://www.catb.org/~esr/writings/cathedral-bazaar/ 

  2. 本文最早于2020年8月18日发表在公司内网 Hi3ms 社区和心声社区,为给 CodeConf 大会做广告宣传。 

开源 大教堂与集市 读书 书评

知识共享许可协议 本文采用「CC BY-SA 4.0」知识共享许可协议,如果还喜欢其他文章, 欢迎订阅“胡涂说”博客
公众号
微信公众号同步更新,欢迎关注😊
对我博客最大的鼓励来自于你的评论,欢迎选择 来回复, 也可以在 GitHub discussion 留言。