—–摘自埃里克·雷蒙《大教堂与集市》

  • 黑客们则可以在不同机器上使用相同的工具,而不是每次都去做类似发明轮子和钻燧取火的事。

  • UNIX和C还有其他的重要优势,它们都是KISS(Keep It Simple, Stupid)哲学下的产物。程序员可以很容易地在脑海中记忆并掌握整个C语言的逻辑结构(这可不同于之前或之后的大多数语言)

  • 与LISP和ITS具有巴洛克式令人着迷的复杂性相比,UNIX使用的工具看上去原始得可笑,“就像拿着石刀和穿着兽皮!”他们嘟囔道。

  • 他们的语言是BASIC,这种语言是如此简陋,以至于PDP-10信徒和UNIX爱好者都认为这简直不值得去蔑视。

  • Richard M. Stallman本人则毋庸置疑地成为了整个黑客文化部落的唯一精神领袖

  • 从来没有稳定到可以发展出俚语、传说和轶事这类的公共传统文化。另外,由于一直没有出现类似UUCP或互联网这种真正能流行起来的网络技术,他们也没能发展出自己的网络部落

  • 技术上的个人英雄主义时代已经终结,软件工业和新生的互联网,将会越来越多受微软这类大型企业控制。第一代UNIX黑客看上去已经垂垂老矣,多么令人沮丧的时光

  • Linux最重要的特点不是技术上的,而是社会学上的。在Linux被开发出来之前,所有人都认为,如果软件复杂到操作系统这样的程度,就必须要有一个精心协作的团队,团队要比较小,而且紧密互动,不管是以前还是现在,这都是很典型的开发模式。

  • 达尔文“物竞天择”的选择机制,被选择对象则是开发者们所做的种种软件修改。让所有人吃惊的是,这种方式工作得很好

  • Linux是颠覆性的,就在5年前(1991年),谁能想到,几千名散布在全球各地的开发者们,利用业余时间,仅仅是通过Internet这种脆弱的合作,就鬼斧神工般地造就了一个世界级的操作系统

  • 我一直在宣扬“小工具”、“快速原型法”以及“演化式编程”等UNIX信条。

  • 早发布、常发布、委托所有能委托的事、开放到几乎是混乱的程度,这些都令人感到惊讶不已。在Linux社区里,没有建筑大教堂那样的安静和虔诚,倒更像是一个乱糟糟的大集市,充满了各种不同的计划和方法,而既稳定又一致的一个操作系统就这么诞生了,这真是奇迹中的奇迹

  • 好的软件作品,往往源自于开发者的个人需要。

  • 优秀的程序员知道写什么,卓越的程序员知道改写(和重用)

  • “建设性懒惰”,他们知道人们要的是结果而不是勤奋,而从一个部分可行的方案开始,明显要比从零开始容易得多

  • 虽然Linux中所有Minix代码最终都被移除或重写,但它在Linux成长初期确实起到了类似脚手架的作用

  • 如果你有正确的态度,有趣的事情自然会找到

  • 当你对一个程序不再感兴趣时,你最后的责任就是把它交给一个可以胜任的接棒者

  • 拥有用户是一件很美好的事,这不仅表明你正在服务于某种需要,表明你做对了某些事,如果发展得当,他们还会成为你的开发合作者

  • 给他们一点点鼓励,他们就会帮你查找问题、给出建议并帮助改善代码,这些比你自己做要快得多得多

  • 这种做法的效力很容易被低估,事实上,连我们这些在开源世界里的人,都极大低估了这种做法的效力,也就是用户越多就越能有效对抗系统的复杂性

  • 我想,Linus最聪明和最有价值的成就其实不是构建出一个Linux内核,而是他发明的这种Linux开发模式。有一次我当面向他表达了这个看法,他笑了,平静地重复了他常说的话:“我基本上是个很懒的人,别人做事,我得名誉。”像狐狸那样懒,或者像Robert Heinlein曾经描绘的一个很有名的角色,太懒以至于无所不能。

  • 内核使用大教堂模式开发,工具箱(toolbox)使用集市模式开发,比如数据分析和可视化展现的商业化工具MATLAB就是这样

  • Linus比其他任何人都更在意如何利用Internet杠杆促进合作,而且他真的做到了

  • 他具备一种避免bug和防范开发走入死胡同的第六感,而且有一种能发现从A点到B点最省力路径的真本事,事实上,Linux的整个设计,都透露着这种特质,并反映了Linus那种本质上保守而简洁的设计

  • Linus在持续不断地激励和回报着他的黑客/用户,用自我满足感激励他们,用持续改进(甚至每天都有改进)回报他

  • 如果有足够多的beta测试者和合作开发者,几乎所有问题都会很快显现,然后自然有人会把它解决

  • Linux模式下排错的两个部分(发现问题和修复问题)通常都很快

  • 对集市模式而言则完全不同,在上千名合作开发者热切钻研每个新发布版本的情况下,你可以假定bug是浅显易找的,或者至少可以很快变得浅显易找。所以你会频繁发布以获取更多的修正,其副作用是良性的:即便发布中有些小问题,你也不会损失太多。

  • 他们有很大的兴趣使用软件、了解其工作原理、尝试解决遇到的问题并实际给出一个明显合理的解决办法。具备这些特点的人很有可能贡献出有价值的东西

  • Linus定律也可被表述为“排错可以并行”

  • 但调试人员之间并不怎么需要协调,也就是说,增加调试人员并不会带来增加开发人员那样的二次方复杂性和管理成本

  • “用户越多,bug越多”是因为增加用户就会增加程序检验的方式。当用户是合作开发者时,这种效应会被放大

  • 潜在用户要么选择上一个被标识为“稳定”的版本,要么冒着有bug的风险使用最新版本以获取新特性。这种策略还没有被Linux黑客们系统性地加以模仿

  • 如果报告bug的用户对源码不关心,则其报告通常不会很有用。对源码不关心的用户,往往报告的都是表面症状,他们把自己的运行环境当成是理所当然的,他们不仅省略了重要的背景数据,而且很少给出重现bug的可靠方法。

  • 这里隐含的问题是开发者和测试者对程序有着不匹配的思维模式,测试者是从外往内看,程序员是从内往外看。对于不开放源码的软件开发,开发者与测试者往往局限于自己的角色,各说各话,都对对方倍感沮丧。开源开发打破了这种困境,由于大家都有真实的源码,开发者和测试者很容易发展出一个共享的表达模式并进行有效的交流。事实上,一个仅描述外部可见症状的bug报告,和一个直接关联到源码的分析型bug报告,对开发者而言简直是天壤之别。

  • 核心人员通常很少,最常见的是一个人,典型情况是一到三人

  • 外围人员通常由beta测试者和潜在的贡献者组成(通常会达到数百人)。

  • 经延期的项目上增加人手,只会让项目更加延期。”更为一般地讲,Brooks定律指出,随着开发人员数目的增长,项目复杂度和沟通成本按照人数的平方增加,而工作成果只会呈线性增

  • bug很容易集中在不同人写的代码的交互接口上,沟通/协调的开销会随开发者间接口数的增加而增多,也就是说,问题规模和开发人员间的沟通路径数相关,即和人数的平方相关(更精确地讲,应该是N (N-1)/2,N代表开发者数目)

  • 外围开发者实际工作在分散而并行的子任务上,他们之间几乎不交流;代码修改和bug报告都会流向核心团队,只有在那个小的核心团队里才会有开销

  • 对于复杂的bug,重点就要放在“随机”上了,这种情况下多人共同追踪bug远比少数几个人循序追踪要有效得多——即便这几个人的平均技能要高很多

  • 聪明的数据结构配上愚笨的代码,远比反过来要好得多

  • 让我看你的流程图但不让我看表,我会仍然搞不明白。给我看你的表,一般我就不再需要你的流程图了,表能让人一目了然

  • 如果你把beta测试者当做最珍贵的资源对待,他们就会成为你最珍贵的资源。

  • 有趣的是,如果你发自内心地谦逊,并承认你欠别人很多,你将很快发现世界会这样对待你:他们认为是你发明了整个软件,而且你对自己的天赋有着得体的谦虚。我们可以看到这一点在Linus身上体现得有多好!

  • 通常,那些最有突破性和最有创新力的解决方案来自于你认识到你对问题的基本观念是错的

  • 因为也许问题本身需要被重新定义

  • 你的代码变得既好又简单,你就知道你做对了

  • 开发和改进过程就可能成为排错过程的一个特例——修复软件原先在功能或概念上的“疏漏型bug”

  • 我们都不是那种有浪漫原创精神的天才式人物,但是,大多数科学、工程以及软件开发都不是天才完成的,在青史上留名的往往是黑客

  • 开发网关类软件时,尽可能不要干扰数据流,而且绝不要扔掉信息,除非接收方强迫你这么做

  • 英语大约有50%的冗余度,很不适宜作为控制语法的模型。

  • 是否便于人类使用要比是否节省计算资源更重要。

  • 语法糖是指为计算机语言添加某种不会影响语言功能的成分,但却使其更易用一些,目的是增强代码可读性

  • 显然,你不可能从零开始实施集市模式。可以用集市模式测试、排错和完善项目,但以集市模式从零开始一个项目是非常困难的。Linus没有这么试过,我也没有。开发者社区从成立伊始,就需要一个可以运行和测试的东西

  • 当开始建设社区的时候,你需要拿出一个像样的承诺。程序此时并不需要特别好,它可以简陋、有错、不完整,文档可以少得可怜。但它至少要做到:(a)能运行,(b)让潜在的合作开发者相信,这个软件在可预见的未来,能演变成一个非常棒的东西

  • 一个协调者是否拥有卓越的原创设计能力,并不是项目成败的决定性因素,但他是否能识别出别人的优秀创意,则一定是最关键的

  • 在应该保持软件健壮性和简单性的时候,你往往下意识把它弄得既华丽又复杂

  • fetchmail项目之所以能成功,相信部分原因是我限制了表现自己聪明的倾向。

  • 为了建立一个开发社区,你需要吸引人们,让他们对你做的事感兴趣,让他们乐于看到自己的贡献。一些技巧可能有助于实现这些,但远远不是全部,你的人格特征也很重要

  • 为了让集市模式运转,哪怕有一点点的人格魅力,都会对你大有裨益

  • 最好的程序一开始只是作者对自己每天遭遇问题的个人解决方案,程序流传开来则是因为作者遇到的问题成了一大类用户的典型问题

  • 想要解决一个有趣的问题,先去找一个让你感兴趣的问题。

  • 一个在封闭项目中只靠自己的开发者,将远远落后于这种开发者:他们知道如何创建一个开放的、有改进能力的环境,在这个环境中,上百人(甚至上千人)反馈并提供设计空间拓展、代码贡献、bug定位以及软件的其他改进。

  • Linux是第一个有意识并成功将整个世界作为其人才库的项目

  • Internet普及之后,Linus是学会如何运用新规则的第一人

  • 另一个非常重要的因素是领导风格的形成和协作机制的建立,这是吸引合作开发者加入项目的关键

  • Internet可以看成是无政府主义者的天堂

  • Linux世界的运转,在很多方面像一个自由市场,或者像一个由很多利己个体组成的生态系统,系统中每个个体都追求自身效用的最大化,在其共生的过程中,能够自然建立起一种具备自我纠错能力的秩序,这种秩序比任何集中式规划都要精妙和高效。这里,正是“共识原则”达成的地方。

  • Linux黑客们致力于最大化的“效用函数”,其目的并不是经典意义上的经济价值,而是自我满足和黑客声望这些无形的东西

  • 即“利他”本身是“利他者”自我满足的外在表现

  • 个人在团体中声望的提升是志愿者活动背后的基本驱动力。

  • Linus成功地将自己置于项目看门人的地位——大多数开发工作是他人完成的,他不断培养大家对这个项目的兴趣直到它能够自我维持下去,这表现出他对Kropotkin“共识原则”的敏锐领会。用这种“准经济”(quasi-economic)视角来观察Linux世界,有助于我们理解“共识原则”是如何应用的

  • 为什么Linux黑客们还要写出这么多文档?很明显,Linux自由的“egoboo”市场比那些有重金投资的商业软件公司,能够产生更有道德、更利他的行为

  • 如果开发协调者有一个至少像Internet这样好的沟通媒介,并且知道如何不靠强制来领导,那么多人合作必然强于单兵作战。我认为开源软件的未来会越来越属于那些懂得如何玩转Linus定律的人,

  • 我认为冲在开源软件最前沿的人,正是凭借自己的眼光和才华而发起项目,并通过构建有效的志愿者社区将之发扬光大。

  • 不是因为“合作是道德正确的”或“软件闭锁是道德错误的”(也许你相信后者,但Linus和我不这样认为),而仅仅是由于闭源世界不能赢得一场与开源社区之间的不断演化的军备竞赛,因为后者可以在一个问题上投入比前者多几个数量级的熟练技术工时

  • 软件开发真正需要的是持久的努力和客户预期在产品上持续投资的程度,而不是到底有多少人在锅中扔入一块骨头然后让它慢慢炖着

  • 马其诺防线用来形容表面看似坚固而实际没有价值的东西

  • 开源开发者是志愿者,是因为兴趣和能力(能否对项目有所贡献)自主选择的(即便他们因开源工作领取薪水,这也依然适用),志愿者精神倾向于自发去关心资源问题的“解决”,他们会把自己的资源带到工作中,这里几乎没有传统意义上“防守”的必要

  • 无论如何,在一个廉价PC和快速Internet连接的世界里,我们发现始终如一真正有限的资源是技术人员的关注,开源项目如果失败了,根本不会是因为机器、网络或办公场地,它们死掉的唯一原因就是开发者们不再感兴趣了

  • 开源之所以成功,部分原因是开源文化只接受编程人员中那最有才华的5%。她将自己的大部分时间都花在了组织部署其他的95%,并因而第一手见证到那广为人知的差异:最有才华的程序员和那些刚刚及格的程序员之间,生产率能相差100倍。

  • 开源社区最强大的一个长项就是非中心化的同行评审,所有致力于细节不被疏漏的传统方法,都无法和它相比。

  • 我们创造性的游戏已经在技术上、市场占有率上、观念认同上以令人震惊的速度获得了增长,我们不仅证明了我们可以做出更好的软件,而且证明了快乐也是一种资产。

  • 我能提供用来作为结束语的最激进的观点,已经不再是“开源统领软件世界”这样的愿景了,毕竟那些很严肃的西装革履的人,也认为这种观点有些道理了

  • 乐趣预示着效率

  • 快乐、幽默和玩兴是真正的资产,前面我之所以写“快乐部落”(happy horde)并不是为了首字母押韵,而用一只憨态可掬的企鹅作为Linux吉祥物也绝不仅仅是为了搞笑。

  • 网景的执行副总裁和首席技术官Eric Hahn给我发了一封电子邮件:“我代表网景公司所有员工,感谢您帮助我们走到这一步,您的思考和写作,对我们的决定有着至关重要的启发意义。

  • “玩”是创造性活动中最具经济效能的工作模式