Linux的诞生和发展
Linux的诞生和发展
Linux操作系统是UNIX操作系统的一种克隆系统。它诞生于1991年的10月5日(这是第一次正式向外公布的时间)。以后借助于Internet网络,并经过全世界各地计算机爱好者的共同努力下,现已成为今天世界上使用最多的一种UNIX类操作系统,并且使用人数还在迅猛增长。Linux操作系统的诞生、发展和成长过程始终依赖着以下五个重要支柱:UNIX操作系统、MINIX操作系统、GNU计划、POSIX标准和Internet网络。
下面主要根据这五个基本线索来追寻一下Linux的开发历程,它的酝酿过程,最初的发展经历。首先分别介绍其中的四个基本要素(UNIX、MINIX、GNU和POSIX,Internet的重要性显而易见,所以不用对其罗嗦),然后根据Linux的创始人LinusToravlds从对计算机感兴趣而自学计算机知识,到心里开始酝酿编制一个自己的操作系统,到最初Linux内核0.01版公布,以及从此如何艰难地一步一个脚印地在全世界hacker的帮助下最后推出比较完善的1.0版本这段时间的发展经过,也即对Linux的早期发展历史进行详细介绍。
对于Linux的一般发展史,许多文章和书籍都有介绍,这里就不重复。
UNIX操作系统的诞生
Linux操作系统是UNIX操作系统的一个克隆版本。UNIX操作系统是美国贝尔实验室的Ken.Thompson和DennisRitchie于1969年夏在DECPDP-7小型计算机上开发的一个分时操作系统。当时KenThompson为了能在闲置不用的PDP-7计算机上运行他非常喜欢的星际旅行(Spacetravel)游戏,在1969年夏天乘他夫人回家乡加利福尼亚渡假期间,在一个月内开发出了unix操作系统的原型。当时使用的是BCPL语言(基本组合编程语言),后经DennisRitchie于1972年用移植性很强的C语言进行了改写,使得UNIX系统在大专院校得到了推广。
MINIX操作系统
MINIX系统是由AndrewS.Tanenbaum(AST)开发的。AST是在荷兰Amsterdam的Vrije大学数学与计算机科学系统工作,是ACM和IEEE的资深会员(全世界也只有很少人是两会的资深会员)。共发表了100多篇文章,5本计算机书籍。AST虽出生在美国纽约,但是是荷兰侨民(1914年他的祖辈来到美国)。他在纽约上的中学、M.I.T上的大学、加洲大学Berkeley分校念的博士学位。由于读博士后的缘故,他来到了家乡荷兰。从此就与家乡一直有来往。后来就在Vrije大学开始教书、带研究生了。荷兰首都Amsterdam是个常年阴雨绵绵的城市,而对于AST来说,这最好不过了,因为这样他就可以待在家里摆弄他的计算机了。MINIX是他1987年编制的,主要用于学生学习操作系统原理。到91年时版本是1.5。目前主要有两个版本在使用:1.5版和2.0版,当时该操作系统在大学使用是免费的,但其它用途不是,当然目前都已经是免费的,可以从许多FTP上下载。
对于Linux系统,他表示对其开发者Linus的称赞。但他认为Linux的发展有很大原因是因为他为了保持minix的小型化,能让学生在一个学期内就能学完,而没有接纳全世界许多人对Minix的扩展要求。因此这激发了Linus编写Linux。Linus正好抓住了这个好时机。
作为一个操作系统,MINIX并不是优秀者,但它同时提供了用C语言和汇编语言写的系统源代码。这是第一次使得有抱负的程序员或hacker能够阅读操作系统的源代码,在当时这种源代码是软件商一直小心地守护着的。
GNU计划
GNU计划和自由软件基金会(theFreeSoftwareFoundation-FSF)是由RichardM.Stallman于1984年一手创办的。旨在开发一个类似Unix、并且是自由软件的完整操作系统:GNU系统。(GNU是"GNU'sNotUnix"的递归缩写,它的发音为"guh-NEW"。)各种使用linux作为核心的GNU操作系统正在被广泛的使用。虽然这些系统通常被称作"Linux",但是严格地说,它们应该被称为GNU/Linux系统。
到上世纪90年代初,GNU项目已经开发出许多高质量的免费软件,其中包括有名的emacs编辑系统、bashshell程序、gcc系列编译程序、gdb调试程序等等。这些软件为Linux操作系统的开发创造了一个合适的环境,是Linux能够诞生的基础之一。以至于目前许多人都将Linux操作系统称为"GNU/Linux"操作系统。
POSIX标准
POSIX(PortableOperatingSystemInterfaceforComputingSystems)是由IEEE和ISO/IEC开发的一簇标准。该标准是基于现有的UNIX实践和经验,描述了操作系统的调用服务接口,用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植运行。它是在1980年早期一个UNIX用户组(usr/group)的早期工作的基础上取得的。该UNIX用户组原来试图将AT&T的系统V和BerkeleyCSRG的BSD系统的调用接口之间的区别重新调和集成,从而于1984年产生了/usr/group标准。1985年,IEEE操作系统技术委员会标准小组委员会(TCOS-SS)开始在ANSI的支持下责成IEEE标准委员会制定有关程序源代码可移植性操作系统服务接口正式标准。到了1986年4月,IEEE就制定出了试用标准。第一个正式标准是在1988年9月份批准的(IEEE1003.1-1988),也既以后经常提到的POSIX.1标准。
1989年POSIX的工作被转移至ISO/IEC社团,并由15工作组继续将其制定成ISO标准。到1990年,POSIX.1与已经通过的C语言标准联合,正式批准为IEEE1003.1-1990(也是ANSI标准)和ISO/IEC9945-1:1990标准。
POSIX.1仅规定了系统服务应用程序编程接口(API),仅概括了基本的系统服务标准,因此期望对系统的其它功能也制定出标准。这样IEEEPOSIX的工作就开始展开了。在1990年,刚开始有十个批准的计划在进行,有近300多人参加每季度为期一周的会议。着手的工作有命令与工具标准(POSIX.2)、测试方法标准(POSIX.3)、实时API(POSIX.4)等。到了1990年上半年已经有25个计划在进行,并且有16个工作组参与了进来。与此同时,还有一些组织也在制定类似的标准,如X/Open,AT&T,OSF等。
在90年代初,POSIX标准的制定正处在最后投票敲定的时候,那是1991-1993年间。此时正是Linux刚刚起步的时候,这个UNIX标准为Linux提供了极为重要的信息,使得Linux的能够在标准的指导下进行开发,能够与绝大多数UNIX系统兼容。在最初的Linux内核代码中(0.01版、0.11版)就已经为Linux与POSIX标准的兼容做好了准备工作。在0.01版的内核/include/unistd.h文件中就已经定义了几个有关POSXI标准要求的常数符号,并且在注释中就写到"ok,这也许是个玩笑,但我正在着手研究它呢"。
1991年7月3日在comp.os.minix上发布的post上就已经提到了正在搜集POSIX的资料。(当然此时还不存在Linux这个名称,当时Linus的脑子里想的可能是FREAX,FREAX的英文含义是怪诞的、怪物、异想天开等)。其中透露了他正在进行Linux系统的开发,并且在Linux最初的时候已经想到要实现与POSIX(UNIX的国际标准)的兼容问题了。
Linux操作系统的诞生
1981年IBM公司推出享誉全球的微型计算机IBMPC。在1981-1991年间,MS-DOS操作系统一直是微型计算机上操作系统的主宰。此时计算机硬件价格虽然逐年下降,但软件价格仍然是居高不下。当时Apple的MACs操作系统可以说是性能最好的,但是其天价没人能够轻易靠近。
当时的另一个计算机技术阵营是Unix世界。但是Unix操作系统就不仅是价格贵的问题了。为了寻求高利率,Unix经销商将价格抬得极高,PC小用户就根本不能靠近它。曾经一度受到BellLabs的许可而可以在大学中用于教学的UNIX源代码一直被小心地守卫着不需公开。对于广大的PC用户,软件行业的大型供应商始终没有给出有效的解决该问题的手段。正在此时,出现了MINIX操作系统,并有一本详细的书本描述它的设计实现原理。由于AST的书写的非常详细,并且叙述有条有理,几乎全世界的计算机爱好者都在看这本书以理解操作系统的工作原理。其中也包括Linux系统的创始者LinusBenedictTorvalds。当时(1991年),LinusBenedictTorvalds是赫尔辛基大学计算机科学系的二年级学生,也是一个自学hacker。这个21岁的芬兰年轻人喜欢鼓捣计算机,测试计算机的能力和限制。但当时缺乏的是一个专业级的操作系统。MINIX虽然很好,但只是一个用于教学目的简单操作系统,而不是一个强有力的实用操作系统。
到1991年,GNU计划已经开发出了许多工具软件。最受期盼的GnuC编译器已经出现,但还没有开发出免费的GNU操作系统。即使是MINIX也开始有了版权,需要购买才能得到源代码。而GNU的操作系统HURD一直在开发之中,但并不能在几年内完成。对于Linus来说,已经不能等待了。从1991年4月份起,他开始酝酿并着手编制自己的操作系统。刚开始,他的目的很简单,只是为了学习Intel386体系结构保护模式运行方式下的编程技术。但后来Linux的发展却完全改变了初衷。
1991年初,Linux开始在一台386sx兼容微机上学习minix操作系统。通过学习,他逐渐不能满足minix系统的现有性能,并开始酝酿开发一个新的免费操作系统。根据Linus在comp.os.minix新闻组上发布的消息,我们可以知道他逐步从学习minix系统到开发自己的Linux的过程。
Linus第1次向comp.os.minix投递消息是在1991年3月29日。题目是"gcconminix-386doesn'toptimize",是有关gcc编译器在minix-386上运行的优化问题,由此可知,Linus在1991年的初期已经开始深入研究了minix系统,并在这段时间有了改进minix操作系统的思想,而且在进一步学习minix系统中,逐步演变为想自己重新设计一个基于Intel80386体系结构的新操作系统。他在回答有人提出minix上的一个问题时,所说的第一句话是"阅读源代码"("RTFSC(ReadtheFuckingSourceCode:-)")。他认为答案就在源程序中。这也说明了对于学习系统软件来说,你不光需要懂得系统的工作基本原理,还需要结合实际系统,学习实际系统的实现方法。因为理论毕竟是理论,其中省略了许多枝节,而这些枝节问题虽然没有太多的理论含量,但却是一个系统必要的组成部分,就像麻雀身上的一根羽毛。
从1991年的4月份开始,Linus几乎花了全部时间研究386-minix系统(hackthekernel),并且尝试着移植GNU的软件到该系统上(GNUgcc、bash、gdb等)。并于4月13日在comp.os.minix上发布说自己已经成功地将bash移植到了minix上,而且已经爱不释手、不能离开这个shell软件了。
第一个与Linux有关的消息是在1991年7月3日在comp.os.minix上发布的(当然此时还不存在Linux这个名称,当时Linus的脑子里想的可能是FREAX,FREAX的英文含义是怪诞的、怪物、异想天开等)。其中透露了他正在进行Linux系统的开发,并且在Linux最初的时候已经想到要实现与POSIX(UNIX的国际标准)的兼容问题了。
在Linus的下一发布的消息中(1991年8月25日comp.os.minix),他向所有minix用户询问"Whatwouldyouliketoseeinminix?"("你最想在minix中见到什么?"),在该消息中他首次透露出正在开发一个(免费的)386(486)操作系统,并且说只是兴趣而已,代码不会很大,也不会象GNU的那样专业。开发免费操作系统这个想法从4月份就开始酝酿了,希望大家反馈一些对于minix系统中喜欢那些特色不喜欢什么等信息,由于实际的和其它一些原因,新开发的系统刚开始与minix很象(并且使用了minix的文件系统)。并且已经成功地将bash(1.08版)和gcc(1.40版)移植到了新系统上,而且在过几个月就可以实用了。
最后,Linus申明他开发的操作系统没有使用一行minix的源代码;而且由于使用了386的任务切换特性,所以该操作系统不好移植(没有可移植性),并且只能使用AT硬盘。对于Linux的移植性问题,Linus当时并没有考虑。但是目前Linux几乎可以运行在任何一种硬件体系结构上。
到了1991年的10月5日,Linus在comp.os.minix新闻组上发布消息,正式向外宣布Linux内核系统的诞生(Freeminix-likekernelsourcesfor386-AT)。这段消息可以称为Linux的诞生宣言,并且一直广为流传。因此10月5日对Linux社区来说是一个特殊的日子,许多后来Linux的新版本发布时都选择了这个日子。所以RedHat公司选择这个日子发布它的新系统也不是偶然的。
Linux操作系统版本的变迁
0.00(1991.2-4?)两个进程分别显示AAABBB
0.01(1991.9?)第一个正式向外公布的Linux内核版本。
0.02(1991.10.5)该版本以及0.03版是内部版本,目前已经无法找到。
0.03(1991.10.5)
0.10(1991.10)由TedTs'o发布的Linux内核版本。
0.11(1991.12.8)基本可以正常运行的内核版本。
0.12(1992.1.15)主要加入对数学协处理器的软件模拟程序。
0.95(0.13)(1992.3.8)开始加入虚拟文件系统思想的内核版本。
0.96(1992.5.12)开始加入网络支持和虚拟文件系统VFS。
0.97(1992.8.1)
0.98(1992.9.29)
0.99(1992.12.13)
1.0(1994.3.14)
1.20(1995.3.7)
2.0(1996.2.9)
2.20(1999.1.26)
2.40(2001.1.4)
2.60(2003.12.17)
将Linux系统0.13版内核直接改称0.95版,Linus的意思是让大家不要觉得离1.0版还很遥远。同时,从0.95版开始,对内核的许多改进之处(补丁程序的提供)均以其他人为主了,而Linus的主要任务开始变成对内核的维护和决定是否采用某个补丁程序。
Linux名称的来由
Linux操作系统刚开始时并没有被称作Linux,Linus给他的操作系统取名为FREAX,其英文含义是怪诞的、怪物、异想天开等意思。在他将新的操作系统上载到ftp.funet.fi服务器上时,管理员AriLemke很不喜欢这个名称。他认为既然是Linus的操作系统就取其谐音Linux作为该操作系统的目录吧,于是Linux这个名称就开始流传下来。
在Linus的自传《JustforFun》一书中,Linus解释说:"坦白地说,我从来没有想到过要用Linux这个名称发布这个操作系统,因为这个名字有些太自负了。而我为最终发布版准备的是什么名字呢?Freax。实际上,内核代码中某些早期的Makefile-用于描述如何编译源代码的文件-文件中就已经包含有"Freax"这个名字了,大约存在了半年左右。但其实这也没什么关系,在当时还不需要一个名字,因为我还没有向任何人发布过内核代码。而AriLemke,他坚持要用自己的方式将内核代码放到ftp站点上,并且非常不喜欢Freax这个名字。他坚持要用现在这个名字(Linux),我承认当时我并没有跟他多争论。但这都是他取的名字。所以我可以光明正大地说我并不自负,或者部分坦白地说我并没有本位主义思想。但我想好吧,这也是个好名字,而且以后为这事我总能说服别人,就象我现在做的这样。"--LinusTorvalds《Justforfun》第84-88页。
通过上述说明,我们可以对上述Linux的五大支柱归纳如下:
① UNIX操作系统--UNIX于1969年诞生在Bell实验室。Linux就是UNIX的一种克隆系统。UNIX的重要性就不用多说了。
② MINIX操作系统--Minix操作系统也是UNIX的一种克隆系统,它于1987年由著名计算机教授AndrewS.Tanenbaum开发完成。由于MINIX系统的出现并且提供源代码(只能免费用于大学内)在全世界的大学中刮起了学习UNIX系统旋风。Linux刚开始就是参照Minix系统于1991年才开始开发。
③ GNU计划--开发Linux操作系统,以及Linux上所用大多数软件基本上都出自GNU计划。Linux只是操作系统的一个内核,没有GNU软件环境(比如说bashshell),则Linux将寸步难行。
④ POSIX标准--该标准在推动Linux操作系统以后朝着正规路上发展起着重要的作用。是Linux前进的灯塔。
⑤ INTERNET--如果没有Intenet网,没有遍布全世界的无数计算机骇客的无私奉献,那么Linux最多只能发展到0.13(0.95)版的水平。