《大教堂与集市》自由软件的开发模型

选书

开源世界的影响和发展已经成为不可忽视的领导力量,故有必要重温下开源里最著名的《大教堂和集市》。

看完这本书,看了一个TED上Linus的访谈,在一个TED以梦想为主题的会议上,他直言不喜欢仰望星空,而更喜欢脚踏实地的填坑解决问题,自己不善交往,是一个“Nerd”;喜欢独立工作,开发Linux和Git,正是满足自己独立工作的需求。

对比特斯拉和爱迪生,Linus更加喜欢爱迪生这句“天才就是1%的灵感加99%的汗水。”;就是这样一个朴实无华、脚踏实地的人,改变了开源世界,影响了科技走向。

很喜欢作者Raymond的名言:“足够多的眼睛,就可让所有问题浮现。”

Raymond(ESR)的书《Unix编程艺术》也是一部研发同学经常买的程序设计书籍。

人类世界的知识及系统已经在指数级的增长,面对《复杂》世界的系统的开发,如何让系统发展更快、更鲁棒,从这本“开源圣经”里的经典案例:linux及fetchmail的发展是可以找到一些自下而上的解决方案。

知识界也在做开源,将来的知识自由也包括三个方面:知识持有的自由、知识接收的自由与知识传播的自由,例如自由期刊。

读书

大教堂与集市

Linux是颠覆性的,在发布后的2年,其稳定性和生态已赶超发展十多年的Unix系统,没有商业公司自上而下的大教堂开发模式;而是关注用户、尽早尽快的发布,像集市一样生长,结果却取得了惊人的效果,这背后是什么样的机遇或者原则支撑了Linux的快速发展,有没有模式可以复制,Raymond正是基于这样的疑问开始升级自己的开源之路。

邮件问题

早期的邮件客户端是很不成熟的,当服务端收到邮件后,没有成熟的客户端进行下载提醒,而当时几个类似的客户端软件也不是很完整,于是作者就从解决自己的邮件问题开始接手开源软件。

这个问题带给Raymond几个启示:

  • 软件的每一项出色工作都始于开发人员的个人追求。
  • 好的程序员会写什么,优秀的程序员知道要重写(和重用)什么。
  • “计划扔掉一个;无论如何你都会扔掉一个的。”(弗里德.布洛克 《人月神话》第11章)
  • 如果你态度正确,就会发现有趣的问题。
  • 对某个程序失去兴趣时,你对该程序最后的职责是将其移交给有能力的继任人。

拥有用户的重要性

  • 将你的用户视为共同开发者是你快速进行代码改进和有效调试的最简单方法。

提前发布、经常发布

早期频繁发布是Linux开发模型的关键部分。大多数开发人员过去都认为这对大型项目而言是不明智的选择,因为从定义上讲,早期版本几乎是错误的版本,并且你不想消耗用户的耐心。

  • 提前发布、经常发布。并倾听你的客户。

Linus的创新并不在于发布包含大量用户反馈的快速更新版本(这种东西在很长一段时间内都是Unix的传统),而是将其扩展到与复杂程度相称的强度。在早期(大约1991年),他每天不止一次地发布新内核!他培养了自己的共同开发者基础,并且利用互联网比其他任何人都更努力地进行协作,这很奏效。

  • 有了足够多的Beta测试人员和合作开发人员,几乎每个问题都能快速定位,并且解决方案对于开发者来说显而易见。

足够多的眼睛,就可让所有问题浮现

传统软件开发组织要解决的基本问题是布鲁克定律:“在一个较晚的项目中添加更多的程序员会使它变得更晚。”更普遍地,布鲁克斯定律预测,项目的复杂性和通信成本会随着项目的平方而增加。开发人员的数量,而完成的工作仅呈线性增长。

布鲁克斯定律是建立在以下经验之上的:错误往往会强烈聚集在不同人编写的代码之间的接口上,并且项目中的通信/协调开销会随着人与人之间接口数量的增加而增加。因此,问题随着开发者之间的通信路径的数量而缩放,该比例随着开发者数量的平方缩放(更确切地说,根据公式N *(N-1)/ 2,其中N是开发者的数量)。

什么样的玫瑰不是玫瑰?

在研究了Linus的行为并形成了成功的理论之后,Raymond做出了一个有意识的决定,在Raymond的新项目上对该理论进行测试。

  • 智能数据结构和哑代码比其他方法要好得多。
  • 如果将Beta测试人员当作最有价值的资源来对待,他们将成为你最有价值的资源来做出回应。

Raymond对fetchmail客户端使用Linus方法落地:

  1. 经常发布(几乎从来不比每隔十天发布;在紧张的发展时期,每天一次)。
  2. 通过增加与fetchmail有关的所有与我联系的人,我增加了Beta版列表。
  3. 每当我发布时,我都会发送到Beta列表中,以鼓励人们参与。
  4. 而且我听了我的Beta测试人员的意见,就他们的设计决策向他们轮询。

Popclient成为Fetchmail

该项目真正的转折点是当Harry Hochheiser向Raymond发送了他的临时代码以将邮件转发到客户端计算机的SMTP端口时。我几乎立刻意识到,此功能的可靠实现会使所有其他邮件传递模式过时。

  • 拥有好主意的第二件事就是识别用户的好主意。有时后者更重要。
  • 通常,最引人注目的创新解决方案来自意识到你对问题的理解是错误的。
  • (设计上的)完美不是在没有其他要添加的东西时实现的,而是在没有其他要去除的时候实现的。

Fetchmail的成长

Andy Tanenbaum最初的想法是为IBM PC构建一个简单的本机Unix,用作教学工具(他称为Minix)。Linus Torvalds将Minix的概念推到了Andrew可能无法想象的范围之内,并且这个概念变得很棒。以同样的方式(尽管规模较小),我接受了卡尔·哈里斯(Carl Harris)和哈里·霍赫海瑟(Harry Hochheiser)的一些想法,并将其推向顶峰。在我们认为天才的方式中,我们俩都不是“原创”。大多数科学,工程和软件开发不是由天才完成的《黑客神话》。

  • 任何工具都应该以预期的方式使用,但是真正出色的工具使你用到从未曾想到的用途。
  • 在编写任何形式的网关软件时,请尽力减少对数据流的干扰- 除非接收者强迫你这么做,否则切勿丢弃信息!

Fetchmail的教训

  • 当你的语言离“图灵机完全”还差得 很远的时候,语法糖可以成为您的朋友。
  • 一个安全系统的安全性取决于它保守的秘密的安全性。

使用集市模式的前提

当开始社区建设时,您需要展现的是一个合理的承诺。您的程序不必运行得特别好。它可能是原始的,有缺陷的,错误的,不完整的,并且记录不充分。它必须做的是(a)运行,并且(b)说服潜在的联合开发人员,它可以在可预见的将来演变成真正整洁的东西。

我认为协调员能够发起出色的设计并不是至关重要的,但是协调员能够从他人那里认识好的设计思想绝对至关重要。

Linus是一个好人,让人们喜欢他并想要帮助他,这并非巧合。Raymond是一个精力充沛的外向型人,喜欢在人群中工作,这并非偶然。要使集市模型发挥作用,如果你对人有一点技巧,那么它将大有帮助。

开源软件的社会环境

最好的hack最初是针对作者日常问题的个人解决方案,并开始传播,因为该问题对于大多数用户来说都是典型的。

  • 要解决一个有趣的问题,请先找到你感兴趣的问题。

Linux是第一个有意识并成功地尝试利用整个世界作为其人才库的项目。Raymond认为Linux的孕育期与万维网的诞生恰逢其时,Linux在1993年至1994年离开了婴儿期,这是一个偶然的巧合。Linus是第一个学习如何通过普及互联网建立规则的人。

  • 只要开发协调员的沟通与Internet一样好,并且知道如何领导而不强迫,那么许多负责人要比一个负责人更好。

论管理与马奇诺防线

Raymond认识的一位件开发经理认为她很擅长这项工作,她说软件项目管理具有五个功能:

  1. 明确目标,并保持每个人都方向一致
  2. 监控并确保关键的细节没有被忽略
  3. 引导人做无聊的而且是单调乏味的工作
  4. 要发挥人的最佳生产力
  5. 为了维持项目需要调动资源

所有这些目的明确的目标;在开源模式及其周围的环境下显得毫无意义。我们将按相反的方向进行处理。

Raymond的朋友报告说,大量的资源编排基本上是防御性的。一旦有了人,机器和办公空间,就必须捍卫它们,以防同行经理争夺相同的资源,也要抵御上级企图分配有限池的最有效使用。

开源社区的例子再次使这个问题变得更加尖锐,因为我们乐于做我们所做的事情。我们的创造力一直在以惊人的速度赢得技术,市场份额和思想份额方面的成功。我们不仅证明我们可以做更好的软件,而且证明快乐是一种资产。

恐惧和厌恶自己的工作过程,本身就应被视为软件过程失败的标志。欢乐,幽默和嬉戏确实是财富。这并不是主要是因为我在上面关于“快乐的大群”的写照,Linux吉祥物是一只可爱的新企鹅也不是开玩笑。

Netscape拥抱集市

开源理念影响Netscape, Netscape宣布使用集市模式。

用书

大教堂和集市,充分对比了自底向上和自顶向下,对Linux的成功模式进行了分析。

  • 要解决自己的问题,才会有兴趣。
  • 要找到自己感兴趣的问题,才能对解决问题感兴趣。
  • 快速发布、经常发布。
  • 把合作者看成用户,把用户看成合作者。
  • 经常合作,并听取用户的建议。
  • 完美的设计不是无可添加,而是无可删除(精简之美)。
  • 否定一个方案,因为第一次的认识深度和完整度都无法不升级为另一个方案。
  • 当你不感兴趣的时候,梳理好并交给有能力的继任人。

想起了华为的轮值制度,达利欧的原则,每个人的认知是有限的,我们只能追求并接近事实,却无法完全认识事实。

在工作中提升每个人的认知和软技能,形成big brain,我深信没有完美的个人,可以打造完美的团队。

附录

埃里克·斯蒂芬·雷蒙

《大教堂与集市》英文原版

您的支持是我最大的动力!