日期:2014-05-16  浏览次数:20731 次

转载:Linux的二号功臣-Alan Cox

转载:Linux的二号功臣-Alan Cox
??? 今天,Linux以其特有的开放源代码的魅力正逐步深入人心。然而在它出现之前,有谁会想到一个世界级的操作系统是靠分散在全球的几千个开发人员用业余时间创造出来的呢?
??? 对于Linux的成功,人们往往会归功于天才Linus Torvalds的奇思妙想和别具一格的项目管理方法。这是毫无疑问的。但是,除了Linus之外,还有一位在开源领域内享有盛誉的高手对Linux开发的管理也至关重要,他就是Alan Cox。下面让我们一起见识一下这位幕后英雄的庐山真面目。
??? 从头再来
??? 1969年,Alan Cox出生于英国的伯明翰。他从小就对计算机有着浓厚的性趣,曾使用Commodore PET这种古老计算机学习编程。Cox的第一个作品是一个利用简单的计算机动画来模拟月亮起落的程序。尽管Cox认为它没有多大的实用性,但这的确为他后来所从事的游戏编程奠定了一定基础。
??? Cox认为自己第一个真正的程序是在高中的社会实践活动中完成的。当时,学校组织这种活动的目的是让学生们利用两周的假期参与社会实践,从而认识到自己现有的水平不足以更好地完成令自己感兴趣的工作,以达到激发学生们上大学的热情。
??? 但好多学生却领会不了学校的良苦用心,他们虽然联系了大公司,但仅仅是做了两周的杂活,交差了事。而Cox在这方面则是个好学生,他想利用假期学习游戏编程。
于是还没开始放假,他就紧锣密鼓地联系工作,几乎给伯明翰所有相关的公司打了电话。最终,他来到了Adventure International公司,编写了两周的游戏代码。Cox的聪明和勤奋使得公司对他非常感兴趣,两周的实习结束后,公司聘任他为长期兼职程序员。那年,Cox刚满18岁。
??? 高中毕业后,Cox进入了位于斯旺西的威尔士大学的计算机系学习。在大学里,Cox相当地活跃,不仅经常与同学讨论问题,而且在学校的计算机协会里小有名气,因此,他在大学里有好多朋友。
??? 但是,最令Cox难忘的还是他的忘年之交—Rob Ash。他们的相识也是从讨论问题开始的。当时Cox在课堂上遇到一个棘手的问题,于是他向老师请教,与同学讨论,但得到的回答都无法让他满意。
??? 于是,他试着找到了当时学校的系统管理员Rob Ash。尽管Ash非常忙,但他还是十分热情地接待了这位好学的年轻人,并结合自己的经验阐述了他对问题的看法,这使得Cox茅塞顿开。在以后的大学生活中,每当Cox遇到难题时,他总是来找Ash请教和探讨,Ash也总是抽出时间为他耐心地讲解。
??? 后来,当Cox回忆起大学里的学习生活时,他认为自己从Rob Ash那里几乎学到了所有的操作系统重要部件的工作原理。Rob Ash是他心中永远的偶像。
??? 除了学习和讨论理论知识外,Cox在大学里依然没有放弃对游戏编程的喜爱,并经常为Adventure International做一些兼职工作。这期间,作为主要设计者,他为游戏ABERMUD做了大量的设计乃至编码工作。ABERMUD尽管不是最早的MUD (Multi-User Dungeon)游戏,但却是最早在Internet上发布的MUD游戏,并在20世纪90年代初产生了重要的影响。
??? ABERMUD的设计与开发工作进行得异常艰苦。最初的结果令Cox很不满意,于是他亲自动手修改了一年多,但效果仍不理想,甚至有些地方是越改越糟。经过反复斟酌,Cox决定推翻原来的工作,重新设计编码,并最终取得了成功。
??? ABERMUD的开发使Cox对项目的开发和管理有了深刻的认识。在对该项目的总结中,他认为Fred Brooks在《人月神话》所提到的“要做好抛弃最初设计的准备”确实是金玉良言。ABERMUD给他最大的教训是,在确信前面的工作有严重错误时,要敢于舍弃原有的设计,从头再来。

??? 众里寻它千百度
??? 开发ABERMUD对Alan Cox产生了重要的影响,Cox不但具备了一定的项目管理经验,而且还结识了日后为之奋斗的Linux。在推翻原计划从头再来的过程中,Cox越来越感到自己的Amiga计算机已经很难胜任这项工作了。
于是,他模仿Unix的风格编写了大量的代码,来为自己的计算机做最大限度的优化,但古老的Amiga常常令他捉襟见肘,最终他不得不决定为自己换一台新计算机。
??? 1992年春,Cox买了一个当时主流的386处理器和一条4MB的内存,然后用它们和自己原来的硬盘组装了一台新电脑。有了新电脑之后,Cox接下来要做的是选一种合适的操作系统作为ABERMUD的开发平台,这使他很伤脑筋。
??? Cox考虑过使用当时已开始流行的DOS和Windows 3.0,但这两种操作系统的稳定性很难达到ABERMUD的要求,对他的帮助不大。后来Cox又把目光转向了较为稳定的FreeBSD。他花了好长时间下载了386BSD,但该操作系统需要一块浮点芯片。尽管BSD性能良好,但浮点芯片价格不菲,对于当时的Cox来说不啻为天文数字。
??? 值得庆幸的是,这个时候Linux出现了,尽管从技术上讲,当时的Linux在各方面都与BSD相去甚远,但它也有着自身的优势。首先,Linux对硬件的要求不高;其次,其稳定性已能够满足Cox的开发需要;此外,当时的MCC Linux,以及稍后的SLS Linux安装起来也很简单。
??? 当然,最令Cox感兴趣的还是Linux是开放源代码的。于是,Cox为自己的新电脑安装了Linux,并从此与Linux结下了10多年的不解之缘。

??? 不拘一格揽人才
??? 自从安装了Linux之后,ABERMUD的开发进展顺利。而且,Alan Cox还用它搭建了威尔士大学的BBS,这使得Cox对Linux更加情有独钟。在业余时间,Cox为Linux写了一个补丁,并发给了Linus。很快Linus就给他回了信,告诉他这个问题已有人解决了。
??? 但Cox的热情不减,很快又写了一个用于进程计数的补丁,这次被Linus加入了Linux的内核,并先后经过了10个人的修改,一直保存下来。
??? 后来,Cox又把Linux安装到了威尔士大学计算机协会的电脑上,试图通过使用Linux,使得学校的BBS每天能够稳定地开放3小时以上。Cox回忆说,他和计算机协会的其它成员可能是最早把Linux用于大型的、多协议网络中的人。这使得他们能够比其它人更早地发现当时Linux在网络方面的许多问题,比如他们用自己的新方法在Linux上实现了TCP/IP协议等。
???? Cox和同学们对发现的错误一一进行改正,并写了许多新代码来弥补从前的漏洞。就这样,Cox把他写的好多补丁合在一起,命名为net2debugged,发给了Linus,并且被采用。就这样,Cox给Linus留下了深刻的印象,并被Linus邀请作为Linux网络代码的管理者。
??? 1994年,Cox在第一届国际Linux大会上见到了Linus,并与后者就Linux的重要问题进行了深入的探讨。Linus认为,Cox对Linux网络代码的管理非常成功,希望他能够管理整个Linux的内核,Cox欣然应允。
??? 维护整个Linux的内核无疑是一项艰巨的任务。Cox要做的是每天接收大量的来自世界各地的代码,然后根据自己的经验并结合实际测试进行过滤,把那些自己认为优秀的代码发给Linus,由Linus决定是否采用。
而对于那些不合适的代码,Cox要返回给作者本人,并指出哪些属于想法很好,但实现的却很糟糕;哪些结果很好,但代码本身有错误;哪些代码与原有的内核有冲突等。
???? 在这一繁琐的工作过程中,Cox积累了一整套行之有效的、独特的Linux项目管理经验,并经过整理写成了《大教堂、集市和委员会》这一在开源领域内堪称经典的文章。在这些经验中,Cox对人的管理和使用的经验最值得称道。
??? 众所周知,Linux的开发人员分散在世界各地,比如Linus来自芬兰,Cox来自英国等。如何让这些来自不同国度、文化背景各异的志愿者齐心协力地工作,是Cox面临的最大难题。事实证明,Cox确实很好地做到了人尽其才,不拘一格。
??? 对于那些为Linux写过很多代码的程序员,Cox在表示感谢的同时,总是能够恰当地使用“激将法”激励他们向更高的目标前进;对于那些水平不是很高,所写的代码被拒绝的作者,Cox则总会详细地指出这些代码为什么被拒绝,可以考虑从哪些方面进行改进。
??? 他认为在这方面不要害怕浪费时间,详细地指出问题所在,积极地与作者进行讨论,耐心地解答作者的问题将往往会事半功倍。一次,为了一段被Cox拒绝的代码,他与作者进行了激烈地、反复地讨论。最后,作者心悦诚服,认识到了自己的代码针对性太强,不具备一般性,并不是对绝大多数Linux用户都有用。这之后,这位作者成功地为Linux的内核写了几部分的代码。
??? 对于那些非常想参与Linux内核项目,但水平又不高的作者,Cox总是一边鼓励他们,一边耐心地告诉他们从何入手,并尽自己所能来回答他们的各种问题。事实证明,有些人确实通过这种方式成了高手,并为Linux内核做出了很大的贡献。
??? 比如,有一位葡萄牙人通过