linux的历史演绎
【IT168 技术教程】
1.3 linux如何诞生?
Linux最早是Linus Torvalds在1991年开始设计开发的。linus是芬兰人,赫尔辛基是芬兰的首都,当时他正是赫尔辛基大学计算机系的学生,23岁。芬兰是北欧的一个小国,国土大部分处在北极圈内。怪不得linux的吉祥物是一只企鹅。
1990年的秋天,linus在赫尔辛基大学学习UNIX(一种操作系统,和linux有密切联系,在后面本章小节中我会详悉介绍)课程,教材是Andrew Tanenbaum教授写的《操作系统:设计与实现》(现在中译本很多,大家可以找来看看)。学校上机要排队,让他浑身发毛,一毛之下,就干脆自己买一台。所以依笔者之见,学习电脑,有一台属于自己的能随时使用的PC是很重要的。不辛的是,我就亲耳听到一个计算机系的老师谆谆教导我们:“大一的时候我不赞成你们买计算机。”还滔滔不绝,理由一堆。不知道他是怎么想的。《操作系统:设计与实现》是用Minix(Andy Tanenbaum教授所写的很小的Unix操作系统,主要用于操作系统教学。由于UNIX和Minix有很大联系,后面将有详细介绍)作为例子来讲授课程的。所以他接触到Minix,刚开始他是在Minix环境下写了一个处理多任务切换的程序,用他自己的话来描述这个程序:“这个程序包括两个进程,都是向屏幕上写字母,然后用一个定时器来切换这两个进程。一个进程写A,另一个进程写B,所以我就在屏幕上看到了AAAA,BBBB,如此循环重复的输出结果。”linus在练习使用Minix时,发现其功能很不完善。于是他就有了一个目标:写一个比Minix更好的Minix。所以Minix是linux的父亲。
在1991的时候,主观上有了这样一个目标,当时linus又需要一个简单的终端仿真程序来存取Usenet新闻组的内容,于是他就开始在上面两个草草编写的进程的基础上又写了一个程序。当然,他把那个A和B改成了别的东西。而新加上去的程序,他是这样描述的:“一个进程是从键盘上阅读输入然后发送给调制解调器,另一个进程是从调制解调器上阅读发送过来的信息然后送到屏幕上供人阅读。”然而要实现这两个新的进程,他显然还需要一些别的东西,这就是驱动程序。他必须为不同的显示器、键盘和调制解调器编写驱动程序。1991年的夏季,也就是他购买了第一台PC机之后6个月,Linus觉得他还需要从网上下载某些文件,为此他必须读写某个磁盘。于是他又不得不写一个磁盘驱动程序,然后是一个文件系统。而一旦你有了任务切换器、文件系统和设备驱动程序之后,你当然就拥有了一个操作系统,或者至少是它的一个内核。linux也就这样诞生了。
1.4 UNIX的发展
1.4.1 UNIX的诞生:
1964年,美国电话电报公司(AT&T,American Telephone and Telegraph Incorperation)的贝尔实验室、通用电器公司(GE,General Electric Co. )、麻省理公学院(MIT,Massachusettes Institute of Technology)合作开发一个名为Multics的,用于大型机的操作系统。Mulics的主要目标是提供一种多任务多任务的计算环境,使其具有较强的通用性,从而方便实现软硬件资源的共享。然而Multics所追求的目标实在是太过庞大和复杂,以至到最后设计者自己也不知道到底是想把他做成什幺东西。AT&T就走为上策,撤走了所有的开发人员,退出这个项目。这批人回到BELL实验室计算机研究中心(Computer Science Research Center),他们发现自己没有一个方便的交互服务可用了。Ken Thompson(肯·汤普森)和Dennis Ritchi(丹尼斯·里奇)(丹尼斯·里奇是著名的C语言的两个创始人之一)在中心其它人的协助下,给出了这种环境的文件系统规范说名。然后,Thompson开始着手这个文件系统的模拟软件,并对请求调页的存储管理技术进行模拟。同时,他还编了一个名为SpaceTravelling的游戏。在编游戏的过程中,他发现原先的那台机器处理速度和图形处理能力不强。后来找到一台堆在角落里的PDP-7(以前的一种计算机型号)机器,恰好能满足Thompson的要求。可是在PDP-7上没有一个好的开发支持环境,写的程序要经过原来那台机器的处理在再把结果送到PDP-7上,非常麻烦。Thompson和Ritchi以及他的同事们决心要在这台PDP-7上开发出一个好的支撑环境。利用前面提到的“文件系统规范说明”,通过这群才华横溢的天才程序员的努力,这样的环境终于实现了。这个环境就是最初的UNIX。
1973年,开发者门用C语言重写了UNIX(在C语言以前,几乎所有的操作系统都是用汇编语言写成的),这虽然导致了其速度的%20~%40的下降,但这向人们宣布操作系统的开发不是汇编语言的天下了。因为用C远语言写成的操作系统有很强的可移植性。也正是由于C语言接近汇编语言的功能和比之汇编语言强得多的可移植性而为人们津津乐道。
1.4.2版本发展:
UNIX的版本十分复杂。这里从其第一版说起,简要说明有重要意义的几个版本。
V1(1971):第一版的UNIX,以PDP-11/20的汇编语言写成。包括文件系统,fork、roff、ed等软件。
V4(1973):以C语言从头写过,这使得UNIX修改容易,可以在几个月内移植到新的硬件平台上。最初C语言是为UNIX设计的,所以C与UNIX间有紧密的关系。
V6(1975):第一个在贝尔实验室外(尤其是大学中)广为流传的UNIX版本。这也是UNIX分支的起点与广受欢迎的开始。
V7(1979):在许多UNIX玩家的心目中,这是“最后一个真正的UNIX”。因为AT&T在这个时候认识到UNIX的价值,在70年代末期,对UNIX的使用和发布强制实施版权。
由于AT&T在V6版的时候,他们并不知道拿UNIX怎么办。所以AT&T就向外界(特别是大学)免费发放UNIX及其源代码。其中有一个不得不提的大学:美国加州大学的伯克利(Bekely)分校。到了70年代末,也就是在V7版的时候,AT&T认识到UNIX的价值,成立了UNIX系统实验室(USL,Unix System Lab。1993年初被Novell收购。Novell于1993年末将UNIX这个注册商标转让给X/Open组织。X/Open协会后来成为了Open Group。Open Group是一个协调各大公司利益,设计和推广大家都能接受的技术方案,引导学术研究、消费者使用习惯的一个组织。)来继续发展UNIX。同时AT&T也宣布对UNIX产品拥有所有权,对UNIX强制实施版权。几乎同时,加州大学伯克利分校计算机系统研究小组(CSRG,Computer Science Research Group)对UNIX进行研究,增加了很多当时非常先进的特性,很多其它大学和商业机构,都希望能得到CSRG改进的UNIX系统。因此CSRG中的研究人员把他们的UNIX组成一个完整的UNIX系统──BSD UNIX(Berkeley Software Distribution UNIX),向外发行。BSD很自然成为第2个主要“UNIX”版本。
当然,除了BSD之外,还有很多UNIX的厂商也纷纷出现,但他们大多只是在AT&T UNIX或DSB UNIX基础上进行一些修改,这样就形成了UNIX的许多变体。从此,我们习惯上就把这种UNIX的变体称为类UNIX操作系统,或者干脆为UNIX操作系统。因为发展到现在,UNIX已经演变为操作系统的一个种类了。
从1977年到1982年,AT&T把这些变体综合成一个单一的系统,这就是UNIX System Ш。1983年又宣布了System V。(System 4只是实验室内部使用,并没有公布)。到了80年代末,AT&T放弃了System X的命名方式,对于其以后的版本,记为System V Release X(缩写为SVR X)。如:SVR3、SVR4等。其中SVR4就是AT&T UNIX 和BSD UNIX完美结合的产物。
同时,BSD的程序员也积极改进AT&T的源代码,BSD UNIX被很多商业厂家采用,成为很多商用UNIX的基础,同时很多研究项目也是以BSD UNIX为研究系统,例如美国国防部的项目─ARPANET(Advanced Research Projects Agency NET,原来是军事网络,后来发展成为了今天的Internet)。在作了许多修改工作之后,伯克利大学注意到原来的贝尔实验室的Unix源码已经所剩无几,不需要一个源码许可证(由于AT&T的商业控制,所有使用AT&T源代码的单位都需要AT&T发布的源码许可证)了,于是就自己推出了一个操作系统:BSD/386,由伯克利软件设计公司(BSDI,Berkeley Software Design, Inc.)生产。
到了1992年的时候,UNIX系统实验室(USL)指控BSDI──在没有得到许可的情况下发布自己的UNIX版本 ,违反了AT&T的许可权,并进一步指控伯克利计算机系统研究组泄漏了UNIX的商业机密,虽然此时的4.3BSD(4.3BSD几乎和BSD/386相同)中来自AT&T UNIX的代码已经不足10%。一场旷日持久的诉讼开始了,法庭最终宣判BSD/386不得再发布。然而,此时的宣判已经意义不大了,因为4.4版的BSD的已经准备就绪,我们称之为4.4BSD-Lite。这个版本不包含任何的AT&T源代码。从这个版本开始,BSD已经不在再需要AT&T的源代码许可证了。BSD可以任意发放自己的源代码。
但是无论UNIX的版本如何复杂,目前为止,UNIX的版本主要还是“AT&T发布的System V”与“美国加州大学伯克利分校发布的BSD”。现在市场上的UNIX也基本上都是这两大流派的变体和衍生物。但是注意:linux并不是这两大流派的衍生物,它完全没有UNIX的任何代码。那为什么把它称之为UNIX操作系统?下面我们会讲到。