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

2023-11-27 22:48
文章标签 linux 转载 cox 功臣 alan 二号

本文主要是介绍转载: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内核做出了很大的贡献。
    比如,有一位葡萄牙人通过这种方式使自己的水平得到了极大的提高,后来负责Linux IPv6部分工作,并写了75%的Linux IPv6的代码。目前,他已成为美国Cisco公司的高级雇员。而对那些没有任何编程经验的志愿者,Cox也总有办法让他们在网络管理、邮件列表管理、书写文档等除编程以外的、其它不可缺少的方面发挥作用。

    二号人物的魅力
    与其它Linux业内重要人物一样,Alan Cox除了维护Linux内核以外,也有自己的工作。他大学毕业后,先后工作于Cable Online公司、3Com公司、CymruNet公司、CERT公司等,甚至连微软公司也曾向他抛出过橄榄枝,但Cox没有接受这一邀请。最后,他来到了Red Hat公司做技术支持工作。
    Red Hat给了Cox足够的自由,他可以在家中工作,有足够的时间来从事自己心爱的Linux内核的维护工作。
    除了公司的工作外,Cox每周至少做60小时的Linux内核的维护工作。因此,有人曾传说Cox是个精力极其旺盛的家伙,根本不睡觉。正是他的这种孜孜不倦的工作,使得Linux的内核越来越棒,人们也习惯把他所维护的、尚未公开发布的内核称为Linux内核的AC(Alan Cox)版。
    此外,Cox有着很大的人格魅力,无论是在Linux内核的维护工作中,还是在Red Hat的技术支持过程中,他对问题的回答总是能够让提问者满意。他认为,能够使别人快乐才是世界上最大的快乐。
     出色的工作加上特有的人格魅力,使Cox在Linux业内赢得了极高的声誉。业内人士普遍认为,没有Alan Cox的杰出的贡献,就不会有Linux今日的辉煌。
     在著名的计算机作家Nikolai Bezroukov所著的《开源运动先驱》一书中,作者认为在Linux业内,Alan Cox的贡献仅次于Linus Torvalds,是Linux业内的二号人物。就连Linus Torvalds本人也认为,Linux能有今天,Alan Cox功不可没,是他最应该感谢的人!

这篇关于转载:Linux的二号功臣-Alan Cox的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/428593

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo