股资源-股票学习站-学炒股-股票课程-炒股教程-分析选股指标-入门基础知识

 找回密码
 注册昵称

QQ登录

只需一步,快速开始

搜索
发新帖回复
上一主题 下一主题

大教堂与集市(美)雷蒙德(Eric S. Raymond),卫剑钒

 
    [-----复制链接-----]

22万

主题

22万

帖子

14

精华

积分
11042
楼主
2020-4-15 02:55:20
【资料名称】:大教堂与集市    
【资料描述】:

大教堂与集市(美)雷蒙德(Eric S. Raymond),卫剑钒

  Eric S. Raymond,世界著名的计算机程序员,软件开源运动的旗手,黑客文化理论家。他的研究很好地解释了分布式开源开发模式,Linux和互联网的成功已经证明这种模式非常有效。他自己的开源软件项目有多项,其中包括互联网上使用广泛的电子邮件传送程序。 卫剑钒,北京大学信息科学技术学院计算机系理学博士。长期从事软件研发和信息安全工作,有多年开源软件编程经验,曾任UNIX高级编程及信息安全培训讲师,发表过多篇学术论文,著有《安全协议分析与设计》。
  《大教堂与集市》是开源运动的独立宣言,它清晰、透彻和准确地描述了开源运动的理论与实际应用,对开源软件运动的成功和Linux操作系统的广泛采用都起到了至关重要的作用。本书在开源运动中的地位相当于基督教的圣经,用黑客们的话说,这是“黑客藏经阁”的收藏。
  《大教堂与集市》并不只是在讲开源和黑客,所有关心软件开发和IT发展的人都应该花些时间通读全书,书中给出了大量充满智慧的观点和经过验证的概念,如命令体系、礼物文化、以少成多、内部市场、竞次、反公地模型、委员会设计、同侪声誉、模因工程、SNAFU现象、进化不利条件、软件业是服务行业、组织结构决定产品结构、准入门槛越低稳定性越高、程序员是资产而非成本等,这些内容定会给你带来新的启示和思考。
  《大教堂与集市》
  序 1
  前言:为什么你应该关心这些 3
  1. 黑客圈简史 7
  2. 大教堂与集市 21
  3. 开垦心智层 59
  4. 魔法锅 95
  5. 黑客的反击 135
  后记:软件之外 155
  附录A:如何成为名黑客 157
  附录B:fetchmail成长的统计趋势 173
  正文注释 177
  《大教堂与集市(*新版)》是开源运动的独立宣言,它清晰、透彻和准确地描述了开源运动的理论与实际应用,对开源软件运动的成功和Linux操作系统的广泛采用都起到了至关重要的作用。
  这本书作者雷蒙德告诉你开源软件开发模式是如何利用互联网的。如果你想在21世纪做生意,必须要读下这本书。
  1. 黑客圈 简史 本文探索黑客文化的起源,探索那些“真程序员”的史前故事,探索MIT黑客们的光辉岁月,以及早期的ARPAnet是如何孕育了个网络部落。本文描绘UNIX早期的辉煌以及后的停滞,描绘来自芬兰的希望,描绘“后个真正的黑客”如何成为新代开源程序员的领袖,以及Linux和互联网主流如何把黑客文化从公共意识的边缘到如今的显赫地位。 1.1 序:真程序员 初,有种人叫“真程序员”(Real Programmer)。 他们并不这样自称,也不自称为黑客或者别的什么。据他们中的位回忆,“真程序员”这个称呼是在上世纪80年代以后才出现的。自1945年以来,计算机技术吸引了世界上睿智和有创意的人,从Eckert和Mauchly发明的台ENIAC开始,就有批编程爱好者,并或多或少伴随着种他们自己能意识到的技术文化,他们编软件和玩软件只是出于乐趣。 “真程序员”通常具备工程学和物理学背景,并常常是业余无线电爱好者。他们穿着白色袜子、涤纶衬衫,打着领带,带着厚厚的眼镜,使用机器语言、汇编语言、FORTRAN或者其他些已经被人们遗忘了的古老的编程语言。 从二战结束到上世纪70年代初,是批处理操作和俗称“大机”(big iron)的大型机(mainframe)盛行的年代,“真程序员”主宰了计算机世界的技术文化。从这个年代起,些令人敬慕的黑客文化开始流传,包括种种版本的墨菲定律以及仿德语风格的“Blinkenlights”提示语,后者至今还被张贴在很多机房中。 些在“真程序员”文化下成长起来的黑客,直到上世纪90年代都仍然很活跃。Cray系列超级计算机的设计者Seymour Cray就是其中的佼佼者,据说他通过机器的前面板开关将他自己设计的整个操作系统以八进制形式导入他设计的计算机之中,并且没有任何错误,这可真是大师级的神作。 “真程序员”文化和批处理计算(尤其是批处理技术)密切相关,随着交互式计算、大学和网络的兴起,“真程序员”文化逐渐衰落,另个工程师文化诞生并终演化成今天的开源黑客文化。 1.2 早期的黑客 我们今天所了解的黑客文化,其起源时间大致可定位于1961年,那年,MIT(麻省理工学院)有了台PDP-1。MIT技术模型铁路俱乐部(Tech Model Railroad Club)的信号和动力委员会(Signals and Power Committee)把这台机器当作他们喜欢的科技玩具,并由此发明了系列的编程工具、俚语以及直到今天仍然依稀可辨的文化氛围。这些早年轶事可以在Steven Levy写的《黑客》(Hackers)书中觅得踪迹(Anchor/Doubleday 1984, ISBN 0-385-19195-2)。 “黑客”词大约就起源于MIT的计算机文化。技术模型铁路俱乐部的黑客们,大都成为MIT人工智能(AI)实验室的核心成员,直到上世纪80年代早期,该实验室在AI领域的研究都直处于领先地位, 1969年后,他们的影响逐渐扩展开来,因为在那年,APRAnet诞生了。 APRAnet是个横贯美国大陆的高速计算机网络,它从个由国防部出资兴建的实验性数字通信系统,逐渐成长为个连接大学、国防部承包商及研究实验室等数百个节点的大网,使得位于各地的研究者能够以的速度和灵活性交换信息,这极大地促进了合作交流,推动了科学技术的突飞猛进。 ARPAnet的好处远不止这些,这些电子高速公路把散落全美各地的黑客聚集到起,构成了产生黑客文化的关键力量。这些黑客原先只是在各自隔离的小团体内发展他们短暂的局部文化,现在,他们发现自己已经俨然是(或者说他们已经把自己打造成)个网络部落了。 黑客文化的批产物——个俚语列表、篇讽刺作品、次有意识地对黑客道德的讨论——开始在ARPAnet上传播开来,尤其是1973年到1975年间通过网络合作完成的版“黑客行话”(Jargon File,http://www.tuxedo.org/jargon)。这本俚语字典成为黑客文化的个定义性文档,并终在1983年出版为《黑客字典》(The Hacker's Dictionary)。现在版已经停印了,其修订版和增补版是《新黑客字典》(The New Hacker's Dictionary),由MIT出版社于1996年出版(3rd edition,ISBN 0-262-68092-0)。 黑客圈在那些联网的大学中——特别是(虽然不全都是)在计算机科学系中——开始发展壮大,上世纪60年代后期,MIT的AI实验室和LCS实验室首当其冲,斯坦福大学的人工智能实验室(SAIL)和卡内基-梅隆大学(CMU)紧随其后,作为当时繁荣的计算机科学和AI研究中心,这些实验室吸引了大量的优秀人才,不论在技术上还是文化上,这些人都为黑客文化做出了伟大的贡献。 为了更好理解后面发生的事情,我们需要了解下计算机自身的发展,因为AI实验室的兴盛和衰落,都是由计算机技术的发展变革而导致的。 从PDP-1时代开始,黑客文化的命运就和DEC(数字设备公司)的PDP小型机系统交织在起了,DEC率先推出了交互式商业计算和分时操作系统,由于其机器灵活、强大且相对便宜,很多大学都购买了DEC的小型机。 廉价的分时系统成为黑客文化成长的媒介,在整个ARPAnet的生命周期中,大多数时间都是DEC小型机的天下,其中重要的是PDP-10,这款发布于1967年的机器,几乎是这之后15年内黑客圈的爱,TOPS-10(PDP-10的操作系统)和MACRO-10(其汇编语言)至今仍被黑客在些俚语和传说中充满怀旧地提及。 同样也是使用PDP-10,MIT却有些与众不同,他们完全摒弃了DEC为PDP-10写的软件,而是自己写了个操作系统,即传说中大名鼎鼎的ITS。 ITS即“不兼容分时系统”(Incompatible Time-sharing System),这充分体现了MIT黑客们的态度,他们就是要走“自己”的路。好在MIT人的智慧配得上这种自负,虽然ITS古灵精怪,时不时出点bug,但却充满了才华横溢的技术创新,并似乎仍然保持着单个分时系统的长连续使用时间记录。 ITS是用汇编语言写的,其应用大都是用AI语言LISP写的。LISP比当时的任何编程语言都要强大而灵活,事实上,25年过去了,它的设计仍然比如今大多数语言都要好。LISP让使用ITS的黑客能解放出来,以种与众不同和充满创意的方式思考问题,它是MIT黑客们取得成就的主要因素,并且直到现在仍然是黑客圈喜欢的编程语言之。 ITS文化的些技术产物至今仍然被人们使用,EMACS编辑器可能是其中广为人知的。ITS的很多传说仍然活在黑客们心中,感兴趣的话,可以看下“黑客行话”(http://www.tuxedo.org/jargon)。 SAIL和CMU当然不会自甘落后。在SAIL的PDP-10周围成长起来的黑客们,后来大多成为个人计算机及窗口/图标/鼠标软件交互界面的关键人物。CMU黑客们的工作则了专家系统和工业机器人技术的大规模实际应用。 另个重要的黑客文化节点是XEROX PARC,即著名的Palo Alto研究中心。从上世纪70年代到80年代中期,PARC产生了大量极具突破性的软硬件发明,其数量之多令人震惊。目前被广泛使用的鼠标、窗口和图标式软件交互界面,以及激光打印机和局域网,都是在那里发明的。比起80年代才出现的个人计算机, PARC的D系列机器足足早了十年。然而可悲的是,这些天才的先知们,并没有在他们自己的公司内获得荣耀,以至于有个经典笑话说PARC就是专为别人开发绝妙创意的地方。毫无疑问,PARC对黑客圈的影响是普遍而深远的。 ARPAnet和PDP-10文化在上世纪整个70年代得到了迅猛而多样的发展,电子邮件列表(mailing list)除了促进些专题兴趣小组(special-interest group)在全美范围内的合作外,也越来越多地应用于社交和休闲领域。 DARPA对这种“非授权”行为故意睁只眼闭只眼,因为它知道付出这点额外流量,就能吸引整代的聪明年轻人到计算机领域中来,那真是太划算了。 广为人知的社交类ARPAnet邮件列表应该算是科幻迷们的SF-LOVERS列表了,时至今日它仍然相当活跃,当然,现在是在ARPAnet演化而成的互联网上。当时还有其他些开创性的网上交流方式,后来被些营利性分时服务商推向商业化,如CompuServe、 GEnie和Prodigy(后者现在仍被AOL掌控)。 作为这段历史的描述者,我就是通过早期的ARPAnet和科幻迷圈子,从1977年开始接触黑客文化的,我有幸见证和参与了本文所描述的黑客文化的诸多变迁。 1.3 UNIX的兴起 上溯至ARPAnet还远未普及的1969年,在新泽西郊外,股新生力量开始成长并不断发展壮大,终使PDP-10文化变得不再重要。这年,APRAnet刚刚诞生,而贝尔实验室的黑客Ken Thompson,也正在这年发明了UNIX。 Thompson参与了分时操作系统Multics的开发工作,Multics和ITS有着共同的渊源,它是个验证些重要观念的试验床,这些观念的着重点在于如何将操作系统的复杂性隐藏在系统内部,不仅让用户看不到,甚至让大多数程序员都看不到。它使得人们可以更简单地使用Multics(以及为它编程!),可以更多去做那些真正有价值的工作。 当Multics逐渐显露出成为“白象”这种庞大而又无用之物的迹象时,贝尔实验室从这个项目退出了(这个系统后来被Honeywell公司推向市场,但从未获得成功)。出于对Multics环境的怀念,Ken Thompson开始尝试将Multics的些理念和自己的些想法融合起来,在台废置的DEC PDP-7上开发个新的系统。 贝尔实验室另名黑客Dennis Ritchie为还处于雏形阶段的UNIX发明了种新的语言:C语言。和UNIX样,C被设计为好用、限制少和灵活方便的语言,很快,这些工具在贝尔实验室流行起来了,1971年,Thompson和Ritchie赢得了开发个内部系统(类似我们现在所说的办公自动化系统)的投标,更大地刺激了UNIX和C的内部传播,而Thompson和Ritchie的雄心远不止于此。 操作系统在传统上都是用汇编语言精心编写的,目的是充分利用机器的效能。Thompson和Ritchie是早意识到当时硬件和编译技术都已经好到能让整个操作系统用C语言编写的那批人之。到1978年,整个UNIX环境已经可以成功地被移植到多种不同型号的机器上了。 这是和影响巨大的。如果UNIX能够在多种不同型号的机器上提供相同的人机界面和相同的功能,它就能成为个通用的软件环境。机器更新换代时,用户就可以不再购买那些为新机器而重新编写的软件,黑客们则可以在不同机器上使用相同的工具,而不是每次都去做类似发明轮子和钻燧取火的事。 除了可移植性,UNIX和C还有其他的重要优势,它们都是KISS(Keep It Simple, Stupid)哲学下的产物。程序员可以很容易地在脑海中记忆并掌握整个C语言的逻辑结构(这可不同于之前或之后的大多数语言),而不需要去频繁地查看手册。而UNIX则拥有系列灵活方便的工具程序,每个工具都被设计为可与其他工具组合运用,以方便地实现特定目的。 UNIX和C的组合,很快被证明适用于极为广泛的计算作业,其中很多完全超出设计者的预期。虽然缺乏正式的支持和推广,它仍然在AT&T内部迅速传播开来。到1980年,它已经扩散蔓延到很多大学和研究机构,而数以千计的黑客们则开始考虑在家里使用它了。 早期UNIX文化中的主力机器是PDP-11及其后代VAX。但由于UNIX的高可移植性,使得它基本上不用改动就能运行在比整个ARPAnet上范围更广的机器上,没人再用汇编语言了,C语言被迅速移植到了各种机器上。 UNIX甚至有了自己的网络——UUCP:低速、不太可靠但便宜。任意两个UNIX机器可以通过普通电话线路,点对点地交换电子邮件,而且这种功能是系统自带的,不需要额外安装。1980年,批Usenet(Usenet初运行在UUCP上——译者注)站点开始交换广播消息,由此形成了个巨大的分布式电子公告板,并很快在规模上超过了ARPAnet。围绕Usenet,UNIX站点开始逐渐形成自己的网络部落。 由于些UNIX站点运行在ARPAnet上,PDP-10文化和UNIX/Usenet文化开始在各自的边缘交汇,但它们并不能和谐相处,PDP-10的黑客们倾向于把UNIX团体看成是群暴发户,与LISP和ITS具有巴洛克式令人着迷的复杂性相比,UNIX使用的工具看上去原始得可笑,“就像拿着石刀和穿着兽皮!”他们嘟囔道。 除此之外,另外股势力也开始成长,台个人电脑在1975年开始进入市场,苹果公司于1977年成立,技术变革在随后几年以令人难以想象的速度发展,微型计算机的发展势头越来越清晰,并吸引着新代聪明的年轻人,他们的语言是BASIC,这种语言是如此简陋,以至于PDP-10信徒和UNIX爱好者都认为这简直不值得去蔑视。 1.4 远古时代的终结 1980年发生了很多事,三种文化在边缘互相交叠,却各自形成截然不同的技术体系,ARPAnet/ PDP-10文化紧紧围绕着LISP、MACRO、TOPS-10、ITS以及SAIL的发展;UNIX和C主要使用PDP-11、VAX以及慢得让人心烦的电话连接;而群没有组织的微机爱好者则下决心让普通大众都享受到计算机的威力。 这其中,ITS文化仍占据地位,但是MIT的实验室里已乌云密布,ITS所寄身的PDP-10已经开始过时,实验室随着人工智能的首次商业化尝试而四分五裂,受些新成立公司的高薪职位吸引,实验室里优秀的人才正纷纷出走(SAIL和CMU的实验室也样)。 1983年,ITS文化迎来了致命击,DEC取消了PDP-10的后续项目“木星计划”,以集中精力研制PDP-11和VAX系列。ITS没有未来了,因为它没有可移植性,而且也没人能把它搬到新机器上,在VAX上运行的Berkeley版UNIX成为出类拔萃的黑客系统。同时,任何个有点远见的人都能看到,微型计算机风头正劲,看上去似乎要横扫切。 就在这个时候,Steven Levy写就了《黑客》书,其中个重要的受访人是Richard M. Stallman(Emacs的发明人),作为MIT AI实验室的标识性人物,他坚决反对将实验室研究成果商业化。 Richard M. Stallman(人们更熟悉他的名字缩写RMS,这也是他常用的登录名)离开实验室,创建了自由软件基金会(Free Software Foundation),献身于生产高质量的自由软件。Steven Levy称赞他为“后个真正的黑客”,幸好没被他说中! RMS的宏大计划是黑客文化在上世纪80年代遭遇变迁的典型例证——1982年他开始用C语言重新构建整个UNIX的克隆,并免费发布,这就是广为人知的GNU(Gnu's Not UNIX,这是种递归式的缩写)操作系统,GNU迅速成为黑客活动的焦点,而ITS的精神和传统,作为以UNIX和VAX为主的新代黑客文化的重要组成部分,籍此得到了保全。 事实上,在其后大约十多年里,RMS的自由软件基金会在很大程度上定义了黑客文化的公共意识形态,Richard M. Stallman本人则毋庸置疑地成为了整个黑客文化部落的精神领袖。 1982到1983年间,集成电路和局域网技术对黑客圈产生了重要影响,以太网和摩托罗拉68000微处理器成为个很有潜力的组合,些创业公司纷纷成立,设计开发代我们现在所说的工作站。 1982年,批来自Stanford和Berkeley的UNIX黑客创立了Sun Microsystems公司,他们认为,UNIX操作系统配以相对便宜的基于68000微处理器的硬件,将会被证明是个可用于多种场合的无敌组合。他们是对的,他们的洞察力为整个产业提供了范例。虽然工作站的价格对大众个体来说还是太贵,但对企业和大学来说已经很便宜了,工作站之间组成的网络(每个用户台机器),迅速取代了那些过时的VAX机器和其他分时系统。 1.5“专有UNIX”时代 1984年,当Ma Bell被拆分后,UNIX次成为AT&T支持的产品,黑客圈形成了两大阵营,边是围绕Internet和Usenet而形成的相对有凝聚力的“网络部落”(他们中绝大多数使用运行着UNIX的小型机或工作站级别的机器),边则是没有网络的分散在各个角落的微机爱好者。 这阶段,些严重的计算机破坏(cracking)事件开始被主流媒体报道,记者们误用黑客(hacker)词来形容那些破坏者,这种不幸的误用直延续至今。 Sun和其他公司生产的工作站级别计算机给黑客们打开了片新的天地。其设计目的是实现高性能图形运算和共享数据的网络传输。20世纪80年代期间,黑客圈殚精竭虑,开发了系列可以充分利用工作站特性的软件和工具。Berkeley UNIX提供了对APRAnet协议的内置支持,解决了由于UUCP点到点连接较慢而带来的网络问题,促进了互联网的进步发展。 在设法充分利用工作站图形能力的若干尝试中,流行的当属X Window系统,它由MIT开发,吸纳了十多家公司数百名员工的贡献。X Window成功的关键在于其开发者愿意遵守黑客道德免费提供源码,而且是通过互联网发布。X战胜专有图像处理系统(包括Sun公司自己的)成为了这种改变的个重要标志,在几年后,它深深地影响了整个UNIX。 ITS和UNIX之间仍然会时不时爆发些派系之争,且大多数情况下都是ITS方挑起的。但随着1990年后台ITS机器的关机停用,狂热分子们也不得不放下立场,伴随着不同程度的抱怨,他们大多融入了UNIX文化。 在20世纪80年代已经连上网络的那些黑客群体间,大的对立来自于Berkeley UNIX和AT&T UNIX的爱好者。偶尔你还可以发现那个时期的招贴画:卡通化的“星球大战”X翼战机从画着AT&T标识的死星的爆炸中疾驶而出。Berkeley黑客们喜欢把自己比做是反抗军,矛头直指那些没有灵魂的商业帝国,而AT&T UNIX虽然在市场份额上从来没有超过BSD/SUN组合,却赢得了标准之战。1990年,AT&T UNIX和BSD UNIX已经很难区分,因为彼此都吸纳了对方的很多新特性。 随着20世纪90年代的到来,已经有十多年发展的工作站技术,受到了明显的威胁,基于Intel 386系列芯片的廉价且高性能的个人计算机出现了,历史上次,黑客个人有能力购买台家用机器,而且其性能和存储能力可以媲美十年前的小型机!UNIX则有能力提供运行于其上的整个开发环境,并能连上互联网。 MS-DOS世界仍然无知并快乐着,早期的微机爱好者们很快扩张成支庞大的队伍,DOS和Mac黑客们的数量已经超过了“网络部落”,但他们没有产生种有自我意识的文化,其间有五十多种技术如蜉蝣般生死交替,但从来没有稳定到可以发展出俚语、传说和轶事这类的公共传统文化。另外,由于直没有出现类似UUCP或互联网这种真正能流行起来的网络技术,他们也没能发展出自己的网络部落。 CompuServe和GEnie这类商业连线服务此时已经分布很广了,但由于非UNIX操作系统并不会随系统附送开发工具,因此微机爱好者们很少能从网上获取源代码,更不要说发展出合作开发的风气了。 这阶段黑客圈的主流,有组织或没组织地围绕在互联网周围,他们中的大多数认同了UNIX的技术文化。他们不怎么关心商业服务,只希望有更好的工具和更便利的网络条件,这时期的厂商们则承诺便宜的32位个人电脑可以让每个人实现这切。 但软件呢?动辄数千美元的商业UNIX仍然太贵了。20世纪90年代初,很多公司致力于将AT&T或者BSD UNIX移植到PC级别的机器上,但直不太成功,价格也没怎么降下来,而且糟糕的是你拿不到可以修改和重新发布的操作系统源代码,传统商业模式是无法满足黑客这种需求的。 自由软件基金会(FSF)也没有做到,RMS许诺已久的HURD——这个给黑客开发的免费UNIX内核,多年来直停滞不前,直到1996年才拿出个可用的内核(尽管在1990年,FSF就解决了UNIX类操作系统除内核外几乎所有的难题)。 更糟糕的是,20世纪90年代初,人们清楚地看到,十多年来对专有UNIX的商业化努力显然已经失败了。UNIX曾经承诺的跨平台可移植性,在多个专有UNIX版本的争吵声中看不到任何希望,这些专有UNIX商家表现得如此沉闷、盲目和没有市场能力,以至于微软凭借Windows操作系统,从他们手中抢走很多市场份额。 1993年初,对黑客文化不怀好意的评论者,也许有足够理由认为UNIX和黑客部落就要玩完了。计算机行业媒体上更是不乏这种人的言论,自20世纪70年代末以来,他们几乎每隔六个月就会旧调重弹,说UNIX马上就要灭亡了。 那些日子里,种常见的观点看上去好像颇有道理:技术上的个人英雄主义时代已经终结,软件工业和新生的互联网,将会越来越多受微软这类大型企业控制。代UNIX黑客看上去已经垂垂老矣(Berkeley计算机科学研究组已经动力尽失,并于1994年失去了资助),多么令人沮丧的时光。 幸运的是,在行业媒体的视野之外,甚至大多数黑客视野之外,些东西正在慢慢成长,并将在1993年年底到1994年取得令人吃惊的发展,终,它将整个黑客文化进入个全新的方向,并取得做梦也想象不到的成功。 1.6 早期的自由UNIX FSF直未能完成的HURD使得Helsinki大学名叫Linus Torvalds的学生有了施展才能的空间,1991年,他开始为386机器开发自由UNIX内核,使用的正是FSF提供的软件套件。Linus很快获得了成功并吸引了互联网上的黑客们,他们帮助Linus同开发Linux:个全功能的UNIX,源代码完全免费,而且可以再发布。 Linux并不是没有竞争者,1991年,在Linus Torvalds早期尝试的同时,William和Lynne Jolitz正试着把BSD UNIX源代码往386上移植,大多数评论者在比较BSD技术和Linus早期简陋的成果之后,都认为BSD移植将会成为PC上重要的自由UNIX。 Linux重要的特点不是技术上的,而是社会学上的。在Linux被开发出来之前,所有人都认为,如果软件复杂到操作系统这样的程度,就必须要有个精心协作的团队,团队要比较小,而且紧密互动,不管是以前还是现在,这都是很典型的开发模式。商业软件、FSF在20世纪80年代开发的如大教堂般宏伟的自由软件以及从Lynne Jolitz初的386BSD分裂出来的freeBSD/netBSD/OpenBSD这些项目,都是使用这种模式开发的。 Linux几乎从开始就发展出条完全不同的路,其开发更像是仅通过互联网合作的大量志愿者的随意之作。在质量方面,没有严格的标准也没有个强有力的机构来管理,他们只是执行个简单得有点幼稚的策略:每周发布,并在接下来几天内获取数百个用户的反馈。他们创造了种类似达尔文“物竞天择”的选择机制,被选择对象则是开发者们所做的种种软件修改。让所有人吃惊的是,这种方式工作得非常好。 1993年年底,Linux在稳定性和可靠性上已经和很多商业UNIX不相上下,并能支持比商业UNIX要多得多的软件,些商业应用软件甚至开始考虑移植到Linux上。Linux间接导致多数小型专有UNIX供应商的关张——因为再没有开发者和黑客买他们的东西了。BSDI(Berkeley系统设计公司)作为少数几个幸存者之,之所以仍然活跃,是因为他们提供整套的BSD UNIX源代码,并和黑客社团仍保持着紧密的关系。 对于当时的这些新情况,黑客内部并没有做过多评论,外界媒体就更没有什么声音了。黑客文化置那些不断预言自己死亡的言论于不顾,开始以自己的观点重塑商业软件世界,再过五年多,这种趋势会更加明显。 1.7 Web大爆发 和Linux早期发展相互促进的是:公众发现了互联网。20世纪90年代早期,ISP(互联网服务提供商)行业开始逐渐繁荣起来,普通大众个月花不了多少美元就可以连上互联网,WWW发明以来,互联网本来就很快的增长速度更是加速到了不可思议的地步。 1994年,Berkeley UNIX开发团队正式关闭了,若干种不同版本的自由UNIX(Linux和386BSD的后裔)成为黑客活动的主要焦点。Linux开始被商业公司刻录在CD-ROM上发布,并且非常畅销。1995年年底,主要的计算机公司开始大张旗鼓地宣传他们的软硬件可以很好地连接互联网。 20世纪90年代后期,黑客圈的活动中心是开发Linux和宣扬互联网,WWW使互联网成为大众媒体,许多20世纪80年代和90年代早期的黑客,开始收费或者免费向公众提供ISP服务。 互联网成为主流后,黑客文化开始受到尊敬,并有了定政治影响力,1994年到1995年间,黑客的大规模强烈抗议,使得试图将“强加密”算法置于美国政府控制之下的Clipper提案无疾而终。1996年,黑客动员起广泛的同盟,导致所谓的“通信合宜法”(CDA)被废止,阻止了政府对互联网的审查。 伴随着CDA的胜利,我们从历史迈进了现在,接下来,我将更多以行动者而非观察者的身份出现(我自己都没想到),更多的故事将在“黑客的反击”里展现。 2. 大教堂与集市 Linux有套令人吃惊的软件工程理论,fetchmail作为个专门对这些理论进行实验的开源项目,所取得的成功让我感到惊讶。我将在本文讨论这些理论,并对比两种完全不同的开发模式:绝大多数商业公司所采用的“大教堂”模式和Linux世界采用的“集市”模式。两种模式的根本不同点在于他们对软件排错有着完全对立的认识。我从Linux的经验出发,证实了这样个命题:“只要眼睛多,bug容易捉。”这和那些由利己个体组成的自纠错系统有着异曲同工之妙。在本文的后,我探讨了在这种观念的影响下,软件可能拥有的未来。 2.1 集市模式的成功 Linux是颠覆性的,就在5年前(1991年),谁能想到,几千名散布在全球各地的开发者们,利用业余时间,仅仅是通过Internet这种脆弱的合作,就鬼斧神工般地造就了个世界级的操作系统? 我肯定想不到。在1993年初Linux进入我视野的时候,我已经在UNIX和开源领域有10年开发经验了。我是20世纪80年代中期GNU早的贡献者之,当时我已经在网上发布了些开源软件,而且还正在开发或者与人合作开发些程序(如nethack、Emacs的VC和GUD模式、xlife等),这些程序直到现在仍然被广泛使用着,我想我懂这个。 Linux推翻了很多我以为我懂的东西,多年以来,我直在宣扬“小工具”、“快速原型法”以及“演化式编程”等UNIX信条。但我也相信,如果超过了定的复杂度,更集中式的管理和更严格的流程是有必要的。我相信大多数重要软件(操作系统和真正大型工具如Emacs编辑器)需要像建造大教堂那样,在与世隔绝的环境下,由天才式专家或几个行家里手精心打造,不成熟时绝不发布beta测试版。 Linus Torvalds的开发风格是:早发布、常发布、委托所有能委托的事、开放到几乎是混乱的程度,这些都令人感到惊讶不已。在Linux社区里,没有建筑大教堂那样的安静和虔诚,倒更像是个乱糟糟的大集市,充满了各种不同的计划和方法(Linux的文件服务器就是个很好的例子,这里可以接受任何人的代码和文档提交),而既稳定又致的个操作系统就这么诞生了,这真是奇迹中的奇迹。 而事实上,集市模式真的管用,而且非常管用,这让所有人震惊。我开始以自己的方式去了解这种模式,除了在我的个人项目中努力探索外,我也试着去理解为什么Linux世界没有在混乱中四分五裂,反而以大教堂建筑者们难以想象的速度变得越来越强大。 1996年年中,我慢慢开始理解了,而且有幸拥有了个可以测试我的理论的机会,这个机会使我可以有意识地在集市模式下尝试个开源项目,我这么做了,更有意义的是,它成功了。 我要讲述的就是这个项目的故事,通过这个故事,我将引出些在开源开发中很有用的格言警句。虽然对我来说,这些不都是从Linux中学到的,但我们可以看看Linux是怎样淋漓尽致地运用这些理论。如果我是对的,这些格言警句会帮助你准确地理解到底是什么让Linux社区能够源源不断地产生这么多好软件,而且,也许这些格言还能帮助你成为个富有成效的人。 2.2 邮件必达 “切斯特互联”(Chester County InterLink,CCIL)位于美国宾夕法尼亚州(Pennsylvania)的西切斯特郡(West Chester),是家小型的免费互联网服务提供商。1993年以来,作为联合创始人,我曾直负责CCIL的技术部分,并编写了我们独创的多用户论坛程序——你可以通过telnet连到locke.ccil.org来试试看。时至今日,这个程序通过三十多条线路支持近三千名用户访问。这份工作使我能够使用CCIL的56K线路保持每天24小时连在网络上,当然,这是工作需要! 我已经习惯了使用电子邮件,但每过会儿就telnet到locke上查下邮件,是件比较烦人的事。我很希望邮件能够自动地递送到snark(我家里的机器)上,这样,邮件来的时候就会通知我,然后我就能用本地工具来处理它。 互联网原生的邮件转发协议SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)并不适用,因为它适用于机器直在线的情况,而我家里的机器并不总是在线,而且也没有个静态IP地址。我需要这样个程序,它可以在我时断时续的拨号上网期间,把我的邮件取到本地。我知道有这种软件,它们大多使用了应用层协议POP(Post Office Protocol,邮局协议)。现在绝大多数常见邮件客户端都支持POP,但在那个年代,我所用的邮件阅读器并不支持。 看来我需要个POP3客户端。于是我便到网上找了个(事实上我找到了三四个),使用了段时间后,我发现它有个明显的缺陷:它不能正确地解析取回邮件的邮箱地址,导致我不能正确回复。 问题是这样的:比如locke上有个叫joe的人给我写信,我把信取到snark上并试图回复时,邮件程序会傻乎乎地想把它发给snark上并不存在的joe。所以我不得不每次把回复邮件地址修改为@ccil.org的样子,这实在有点痛苦。 很明显这种事应该由计算机搞定,但没有任何个现成的POP客户端能做到这点!这给我们上了课: 1. 好的软件作品,往往源自于开发者的个人需要。 按说这是显而易见的(正如老话说“需要是发明之母”),但太多的软件开发人员并不需要也不热爱他们正在开发的软件,他们把编程当差事,为的只是拿薪酬。Linux世界里可不是这样——也许这可以解释为什么Linux社区里原创软件的平均质量是如此之高。 那么,我是不是应该立即投入到疯狂的编程中,做出个全新的POP3客户端和其他程序较高下?千万不要!我把手头的POP程序看来看去,认真思索“哪个接近我想要的”,因为: 2. 优秀的程序员知道写什么,卓越的程序员知道改写(和重用)什么。 我不敢说自己是卓越的程序员,我只是模仿他们。卓越程序员们有个很重要的特征是“建设性懒惰”,他们知道人们要的是结果而不是勤奋,而从个部分可行的方案开始,明显要比从零开始容易得多。 以Linus Torvalds为例,他并没有尝试从零开始写Linux,而是以重用Minix(个用于PC机的迷你型UNIX类操作系统)的代码和理念作为开始,虽然Linux中所有Minix代码终都被移除或重写,但它在Linux成长初期确实起到了类似脚手架的作用。 基于同样的理念,我试图找到些代码写得还不错的POP程序,作为我开发的基础。 UNIX世界共享源代码的传统使得代码重用变得很便利(这正是GNU选择UNIX作为基础OS的原因,且不论它对UNIX本身的保留意见),Linux世界则把这个传统发挥到了技术上的极限。相比其他地方,从Linux世界多达数T字节的开放源码中,找到些他人写的“足够好”的代码要可行得多。 不出意外,连同上次找到的,我共找到九个备选程序:fetchpop、PopTart、 get-mail、gwpop、pimp、pop-perl、popc、popmail和upop。我首先选择了Seung-Hong Oh写的fetchpop。我给程序加上了“邮件头重写”功能,并做了些其他改进,这些改进被作者接受并在1.9版本中发布。 几周以后,我偶然发现了Carl Harris写的popclient代码,同时带来的是个难题:尽管fetchpop有些很好的创意(比如使用后台进程模式),但只能处理POP3协议,代码也略显业余(Seung-Hong Oh在那时是个聪明但缺乏经验的程序员,这两点都看得出来)。Carl Harris的代码要好些,专业而稳健,但缺乏fetchpop中些重要而精巧的特性(包括我写的那部分)。 继续完善fecthpop还是转换到popclient?如果转换,我写的那些代码就可惜了,但同时能换来个更好的开发基础。 个更实际的转换动机是popclient对多协议的支持。POP3是常用的邮件服务器协议,但并不是的。fetchpop以及其他备选程序并不支持诸如POP2、RPOP或AROP这些协议,而我还有点想加上对IMAP(Internet Message Access Protocol,互联网消息访问协议,这是新设计的、功能强大的邮局协议,http://www.imap.org)的支持,仅仅是为了好玩。 另外,还有个理论上的原因让我决定转换,这可是早在Linux之前我就学到的: 3.“计划好扔掉个吧,迟早你会这么做的。”(Fred Brooks,《人月神话》11章) 或者可以这么说:在你次把问题解决的时候,你往往并不了解这个问题,二次你才可能知道怎么把事情做好。所以,如果你想做对事情,至少要再做次。1 好吧,我对自己说,改写fetchpop是我的次尝试,现在我可以换了。 1996年6月25日,我把自己对popclient所做的批补丁发给Carl Harris,发现他基本已经失去了对popclient的兴趣。由于popclient代码有点陈旧,还有些小bug没有解决,很多地方都值得改进,我和Carl Harris很快达成致:由我来接手这个程序。 项目在不经意间升级了,我不再是对现有POP客户端做些小打小闹的补丁工作,而是开始维护整个程序。新的想法不时冒出来,我意识到自己也许可以对程序做些大改动了。 在个鼓励代码共享的软件文化中,这是种很自然的项目演化方式。我见证了下面这条: 4. 如果你有正确的态度,有趣的事情自然会找到你。 当然,Carl Harris的态度更重要,因为他明白: 5. 当你对个程序不再感兴趣时,你后的责任就是把它交给个可以胜任的接棒者。 尽管并没有明确提及,但Carl Harris和我都知道,我们的共同目标是做出好的解决方案。的问题是我能否证明自己是可靠的,旦我做到这点,Carl Harris就优雅而利落地把程序交接给我。如果有天轮到我时,希望我也能交接得这么棒。 2.3 拥有用户的重要性 我就这样继承了popclient,同样重要的是,我继承了popclient的用户群。拥有用户是件很美好的事,这不仅表明你正在服务于某种需要,表明你做对了某些事,如果发展得当,他们还会成为你的开发合作者。 UNIX另个传统强项也被Linux发挥到美妙的:很多用户本身就是黑客。因为可以拿到源代码,这些黑客能极为有效地缩短排错时间,只要给他们点点鼓励,他们就会帮你查找问题、给出建议并帮助改善代码,这些比你自己做要快得多得多。 6. 把你的用户当成开发合作者对待,如果想让代码质量快速提升并有效排错,这是省心的途径。 这种做法的效力很容易被低估,事实上,连我们这些在开源世界里的人,都极大低估了这种做法的效力,也就是用户越多就越能有效对抗系统的复杂性,直到Linus Torvalds向我们明白地展示这点。 我想,Linus聪明和有价值的成就其实不是构建出个Linux内核,而是他发明的这种Linux开发模式。有次我当面向他表达了这个看法,他笑了,平静地重复了他常说的话:“我基本上是个很懒的人,别人做事,我得名誉。”像狐狸那样懒,或者像Robert Heinlein曾经描绘的个很有名的角色,太懒以至于无所不能。 回顾以往,GNU Emacs Lisp库和Lisp代码资源库可能要算是Linux这种成功方法的先例,和Emacs用C语言写的核心以及其他GNU工具不同,Lisp代码池是不断更新的,并且在很大程度上是用户驱动的,大多数新想法和原型在达到终稳定状态前,都会被重写3到4次,和Linux样,其频繁的“松耦合”合作都是通过Internet实现的。 说实在的,在fetchmail之前我成功的作品大概要数Emacs VC(版本控制)模式了,当时我通过邮件和其他三人采用了类似Linux的合作方式。直到今天,我只和其中人见过面(即Richard Stallman,Emacs的作者,自由软件基金会的创立人,参见http://www.fsf.org)。Emacs的VC模式提供了SCCS、RCS以及后来CVS的前端功能,使得用户可以完成“键式”的版本控制操作。它是从某人写的个简略而粗糙的sccs.el演化而来的,之所以能取得成功,是因为和Emacs本身不样,Emacs的Lisp代码可以迅速地完成“发布/测试/改进”循环。 不只是Emacs,还有其他些软件产品也使用了两层架构和两级用户群,内核使用大教堂模式开发,工具箱(toolbox)使用集市模式开发,比如数据分析和可视化展现的商业化工具MATLAB就是这样, MATLAB和其他类似产品的用户们发现,创新、酝酿和行动频繁发生的地方总是在产品的开放部分,而这部分的改进也总是由庞大而多样化的用户群完成。 2.4 早发布,常发布 尽早和尽量频繁发布是Linux开发模式中至关重要的部分,绝大多数开发者(包括我)都习惯性地认为:除非是很小的项目,这么做有害无益,因为软件的早期版本几乎都是问题版本(buggy version),如果早早发布,恐怕会耗尽用户们的耐心。 这种观念使人们更倾向于支持大教堂开发模式,但如果重要的目标是给用户提供bug尽量少的软件,为什么你只是每六个月(或者更长间隔时间)才发布个版本,并且在版本发布的间隔里忙得喘不过气来呢?Emacs用C写的内核是按照这种方式开发的,而Lisp库却不是,因为真正起作用的Lisp代码资源库并不在FSF的控制之下,在那里你可以找到新的和不断发展中的代码版本,而且它们都独立于Emacs的发布周期。2 这里面重要的要数俄亥俄州(Ohio)的Emacs Lisp代码资源库,该库早早就拥有了如今大规模Linux资源库所具备的精神和特性,但当时我们几乎没人认真去想想我们在做什么,或者想想资源库的这种存在,是否意味着FSF大教堂式的开发模式有点问题。1992年左右我做过次认真的尝试,我从这个代码库中下载了很多代码,并将其正式融入Emacs的官方Lisp库中,很快我遇到了类似政治上的麻烦,尝试非常不成功。 但是年后,Linux越来越广为人知,它明显与众不同而且要健康得多。Linus开放式的开发策略简直就是和大教堂模式对着干,Linux的Internet资源库生机勃勃,多个不同版本同时流传,而这完全是由Linux内核那前所未闻的频繁发布所驱动的。 Linus把他的用户当作开发合作者看待,并以种尽可能有效的方式: 7. 早发布,常发布,倾听用户的反馈。 Linus的创新之处,并不完全在于大量采纳用户反馈并快速发布系统版本(这也是UNIX世界多年来的传统),而更多在于将这种做法强化到种能和系统复杂度相匹配的强度。我们知道他在早期(1991年左右)发布内核的频率会超过天次!这要归功于他在发展合作开发群体方面的努力,Linus比其他任何人都更在意如何利用Internet杠杆促进合作,而且他真的做到了。 他是怎么做到的?我能否加以复制?还是说只有Linus Torvalds这样的天才才能驾驭? 我想不是。Linus无疑是个黑客,想想有多少人能从零开始建造个完整的具有产品级质量的操作系统内核?但Linux并没有展现出多少令人赞叹的概念性突破。和Richard Stallman或者James Gosling(NeWS和Java的作者)相比,Linus不是(至少现在还不是)个富有创造性的设计天才,他更像是个工程实施上的天才,他具备种避免bug和防范开发走入死胡同的六感,而且有种能发现从A点到B点省力路径的真本事,事实上,Linux的整个设计,都透露着这种特质,并反映了Linus那种本质上保守而简洁的设计取向。 所以,如果快速发布和利用互联网杠杆效应不是碰巧而为,而是Linus慧眼发现的省力路径,那么他想利用的是什么?什么是他想从这种开发机制中获取的好处? 这样问,答案就显而易见了。Linus在持续不断地激励和回报着他的黑客/用户,用自我满足感激励他们,用持续改进(甚至每天都有改进)回报他们。 Linus的直接目标就是将投入排错和开发的“人时”(person-hour)大化,即便这样做可能导致代码不稳定,或者可能因为些难以消除的严重bug导致用户群流失,Linus也在所不惜,他相信: 8. 如果有足够多的beta测试者和合作开发者,几乎所有问题都会很快显现,然后自然有人会把它解决。 或者说得更通俗些:“只要眼睛多,bug容易捉。”我把它称为“Linus定律”。 初我的表达是“每个问题都会有人弄明白”。Linus提出异议,他认为那个弄明白并修复问题的人往往不是也没有必要是那个首先发现问题的人,“有人发现问题,”他说,“另有人搞定问题,我可以公开地说,发现问题更具挑战性。”这个改正很重要。我们会在下节仔细考查排错过程到底是怎样的,但关键在于,Linux模式下排错的两个部分(发现问题和修复问题)通常都很快。 Linus定律道出了大教堂模式和集市模式关键的区别:在大教堂建筑者看来,bug是棘手的、难以发现的、隐藏在深处的,要经过几个人数月的全心投入和仔细检查,才能有点信心说已经剔除了所有错误。而发布间隔越长,倘若等待已久的发布版本并不完美,人们的失望就越发不可避免。 对集市模式而言则完全不同,在上千名合作开发者热切钻研每个新发布版本的情况下,你可以假定bug是浅显易找的,或者至少可以很快变得浅显易找。所以你会频繁发布以获取更多的修正,其副作用是良性的:即便发布中有些小问题,你也不会损失太多。 就是这样,这就足够了。如果Linus定律是错的,那么任何个像Linux内核这么复杂的系统,经过如此多黑客的改动,在无法预见的不良交互影响以及难以发现的“深度隐藏”bug的重压下,应该已然在某个时刻轰然倒塌了。如果Linus定律是对的,它可以很好解释Linux为什么bug相对较少,且连续运行时间能够超过数月甚至数年。



【下载地址隐藏】:                    点:回复可见地址
游客,如果您要查看本帖隐藏内容请回复






上一篇:一本书读懂人工智能(图解版)科普手册 李连德 著
下一篇:价值智库附录(22)张志雄高端订阅智库1000一期
回复

举报

QQ|

GMT+8, 2024-11-26 00:32

快速回复 返回顶部 返回列表