1 linux的历史演绎

本章前言

     首先,强烈建议你看看本书序。里面涉及到我的一个“软件使用度”的概念。很多人对于书的前言或序不感兴趣。笔者个人观点:不仅重要而且必须。想在短时内(如在书店里)评一本书,最主要两点:一是序,二是出版社。如果两者皆满意,基本上可以买下此书了。(什么出版社才是满意的出版社?序言中有我的浅析。)
注意:上面的这段话应该写在序言里,只觉总有急切,序言一概略之。本人冒天下之大不讳,留笔此地,以示提醒。我喜爱读书,对读书习惯没有深研也有浅析,发现一种有趣的读书习惯:翻到第一章第一节仔仔细细研究之;再下去就是粗粗略略浏览之;最后就是不知不觉高搁之;结果就是干干净净忘光之。这种读书习惯的人不在少数。这也是我把这一段放在此地之缘由。

     本章讲述linux发展历程及基本概况。即使你对linux一无所知,学完本章,也会发现此时你对linux的发展过程比以往任何时候都清晰明鉴。笔者一直把自己当作“傻瓜”,故写本书之际,我把每一位读者也当“傻瓜”,这样可以促使我把它写的尽可能详悉和清楚。
     有人认为,学linux使用对于linux如何发展并不重要。到目前为止,我只能作为一个过来人告诉你:知道linux的发展对于你理解linux绝对百利而无一害。很多linux概念的理解需对linux背景的理解,就好比你喜欢一个女孩子为什么总是先想了解她的背景。因为你想更好的研究她。当然,如果你只是想“应用”她,那么这个女孩的背景对你是没有意义的。这就是为什么你不会对一个×××背景感兴趣的原因。你只是想“应用”她。
     在一帮子不熟悉linux的同学面前滔滔不绝linux发展,即使什么都不会,你也绝对让人刮目使人羡慕受人仰慕。就好比大学时代取得的高分,可能你什么也不懂,只是知道如何考试。但在外人面前摆弄一翻,也绝可自我满足一阵。

1.1 什么是linux?

     最节俭地说,linux是一个操作系统。它使得计算机上的软件和硬件之间协调工作,就好像Microsoft Windows(MS windows,微软的windows系统)系列操作系统(MS Windows和linux之间又有着巨大的差别。不仅差别巨大,甚至互相对立,互相***。缘何对立?缘何***?尽在本章中。)。至于linux具体特性,很难用一句或者一段话来表述清楚。但可以有一个大概了解:linux是一个多任务的多用户的多平台的在保护模式下的遵守POSIX标准的遵守SYSV和BSD扩展的遵守GPL许可的32位(也有64位)的类UNIX的开放源代码的免费操作系统。这句话基本上涵概了当今linux最流行最重要最主要的特性。可能读者对以上的一些名词云里雾里,不知所云,简单介绍:

1.多任务

计算机在同一时刻运行多个应用程序的能力。

2.多用户

     计算机在同一时刻被多个用户访问的能力。如网络上的服务器必须是多用户的。因为网络上的服务器需要能够同时接受多个用户的同时访问。除了linux系统,比较熟悉的Win2000也是多用户的操作系统。多用户操作系统最主要的特点是:同一时刻不同的用户访问。例:一台windows98机器,虽然可以有好几个不同的帐号,但不能同时访问,所以它并不是多用户的。

3.多平台

     可以在不同种类的CPU下工作。不要以为世界上就只有intel AMD这样的兼容CPU,还有很多种类的CPU。如:AlphaSparc

4.保护模式

     linux下应用软件无法访问系统分配的内存以外的内存区域。如此,一个软件的错误不会造成整个系统的瘫痪。有些人没事在那里叫嚣:linux理论上永远也不会死机,就是这个原因。(但事实上还是会死的)

5.POSIX

     POSIX表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX 是为了读音更像UNIX)。电气和电子工程师协会(Institute of Electrical and Electronics EngineersIEEE 最初开发 POSIX 标准,是为了提高 UNIX 环境下应用程序的可移植性。然而,POSIX 并不局限于 UNIX 许多其它的操作系统,例如 WinNT,都支持 POSIX 标准,尤其是 POSIX.1POSIX.1 提供了源代码级别的C 语言应用编程接口(API)给操作系统的服务程序,例如读写文件。POSIX.1 已经被国际标准化组织(International Standards OrganizationISO)所接受,被命名为 ISO/IEC 9945-1:1990 标准。

6.SYSVBSD扩展

     可以理解为和SYSVBSD源代码级的兼容。简单一点,就是Linux下的应用程序同时也能在这两个系统上运行。SYSVBSD也是两个操作系统,不知道这两个系统是什么?那就往下看。

7.GPLGeneral Public License

     公用许可证,下文会有详解。

1.2发音问题

1.2.1 linux的发音

     linux发音是五花八门版本颇多,就笔者见到和听到的不下10种。对这种情况,据说,linux的创始人Linus(Linus Torvalds)针对读音分歧较多的情况,特意录了一段他对Linux的发音。这段录音的内容是这样的:“Hello,this is Linus Torvalds and I pronounce Linux as Linux”。我听出来的是/'li:nэks/综合网上和linus自己的读音,概括出几个自认为最合适也最通用的读法:/Li'nQks/(“里那克斯”)或/'li:nэks/(“里呢克斯”)或/Li'nu:ks?/(“里纽克斯”)。这几个应该是谁都听得懂的。至于哪个比较正宗,当然是linus的原音。但事实上似乎使用linus那种读发的人并不在多数。
提示:上面的这段录音可以在RedHat中调试声卡的时候可以听到,如果你的声卡调试成功,系统会播放上面一段声音以示成功。

1.2.2 Linus Torvalds的发音

     我们还应该了解一下其作者名子的发音。毕竟是一个人的名子,没人敢随便念。基本上比较统一。在英语中,Linus Torvalds(/li'nus 'tRwR:z/)中文就是“李纽斯·托沃兹”,也有翻成“李纳斯·托沃兹”的。但是你有机会听上面提到的那段录音,可以发现他念的是“李纽斯·托沃兹”。一般我们称他为linus先生,也就是“李牛死”。

1.2.3 UNIX的发音

     毫无疑问,就是/U:niks/。

1.2.4 GNU的发音

    GNU是“GNU's Not Unix”的递归缩写。在英文里面正好有这个词,原意为非洲牛羚,发音是 :/nU:/ 。和英文中new发音一样。但是这个醒目的发起人觉得这个发音要和new搞起来,所以他宣布应该发:Guh-new 。很多人觉得和gun蛮像的,大约着把它念成/gQn/,就是和gun(手抢)同音,其实非也。

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为研究系统,例如美国国防部的项目─ARPANETAdvanced 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操作系统?下面我们会讲到。