一天一点学习Linux之Linux/Uinx发展历程

来源:岁月联盟 编辑:exp 时间:2011-10-11

 

Linux概述

Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列CPU的计算机上。它控制整个系统基本服务的核心程序(kernel)是由Linus 带头开发出来的,Linux这个名称便是以Linus’s unix来命名,Linus 选择用(大众公有版权)GPL的方式来发行这份程序,这个版权允许任何人以任何形式复制与散布Linux 的原始程序。换句话说,Linux实际上是免费的,使用者在网络上就可以得到Linux 的原始程序代码,随心所欲的复制与更改Linux 的原始程序,在因特网的日渐盛行以及Linux 开放自由的版权之下,吸引了无数计算机高手投入开发、改善Linux 的核心程序,使得Linux 的功能日见强大,所以今日我们可以在网络上免费下载Linux使用,或者花很少的一点费用就可以取得Linux光盘,这都是因为Linux是GPL 版权的缘故。

 

 

近几年的发展,已使得Linux成为微软、Sun的另一大敌手。Linux挟其价格低廉、品质良好与稳定的竞争优势,正无形无影地扩散至众多以PC为主的工作 平台上。早期因缺乏商业性应用软件,单凭学术味道浓厚的工具程序,是无法打入一般商家的主流操作系统的。然而,现在的Linux已经今非昔比。KDE、Gimp、Gnome等计划相继地开展,为X提供了更多图形接口的桌面操作环境和应用软件。

 

Unix的发展史

早在Linux出现之前的二十年(大约在1970 年代),就有一个相当稳定而成熟的操作系统存在了,那就是Linux的老大哥Unix。下面我们就先来了解一下Unix的发展史

1969年以前:一个伟大的梦想–Bell,MIT与GE的『Multics』系统

在1965年前后, 由贝尔实验室(Bell)、麻省理工学院(MIT)及奇异公司(GE, 或称为通用电器)共同发起了Multics的计划,Multics计划的目的是想要让大型主机可以达成提供300个以上的终端机联机使用的目标。

 

1969年:Ken Thompson的小型file server system

在认为Multics计划不可能成功之后,贝尔研究室就退出该计划。不过,原本参与Multics计划的Ken Thompson已经从该计划当中获得一些思想。因为自己的需要,希望开发一个小小的操作系统以提供自己的需求。经过四个星期的奋斗,他终于以汇编语言(Assembler)写出了一组核心程序,同时包括一些核心工具程序, 以及一个小小的文件系统。那个系统就是Unix的原型。当时Thompson将Multics庞大的复杂系统简化了不少,于是同实验室的朋友都戏称这个系统为:Unics。(当时尚未有Unix的名称)

 

Thompson的这个文件系统有两个重要的概念,分别是:

所有的程序或系统装置都是档案

不管建构编辑器还是附属档案,所写的程序只有一个目的,且要有效的完成目标。

这些概念在后来对于Linux的发展有相当重要的影响。

 

1973年:Unix的正式诞生,Ritchie等人以C语言写出第一个正式Unix核心。

由于Thompson写的那个操作系统实在太好用了,所以在贝尔实验室内部广为流传,并且数度经过改版。因为Unics本来是以汇编语言写成的,汇编语言具有专一性,加上当时的计算机机器架构都不太相同,所以每次要安装到不同的机器都得要重新编写汇编语言,实在不方便。后来Thompson与Ritchie合作想将Unics改以高阶程序语言来撰写。当时现成的高阶程序语言有B语言。 但是由B语言所编译出来的核心效能不是很好。后来Dennis Ritchie将B语言重新改写成C语言,再以C语言重新改写与编译Unics的核心, 最后正名与发行出Unix的正式版本!

 

1977年:重要的Unix分支–BSD的诞生

虽然贝尔属于AT&T,但是AT&T此时对于Unix是采取较开放的态度,此外,Unix是以高阶的C语言写成的, 理论上是具有可移植性的,只要取得Unix的原始码,并且针对大型主机的特性加以修订原有的原始码(Source Code), 就可能将Unix移植到另一部不同的主机上头了。所以在1973年以后,Unix便得以与学术界合作开发!最重要的接触就是与加州柏克莱(Berkeley)大学的合作了。

柏克莱大学的Bill Joy在取得了Unix的核心原始码后,着手修改成适合自己机器的版本, 并且同时增加了很多工具软件与编译程序,最终将它命名为Berkeley Software Distribution (BSD)。这个BSD是Unix很重要的一个分支,Bill Joy也是Sun这家公司的创办者!Sun公司即是以BSD发展的核心进行自己的商业Unix版本的发展的。(后来可以安装在x86硬件架构上面FreeBSD即是BSD改版而来!)

 

1979年:重要的System V 架构与版权宣告

由于Unix的高度可移植性与强大的效能,加上当时并没有版权的纠纷, 所以让很多商业公司开始了Unix操作系统的发展,例如AT&T自家的System V、IBM的AIX以及HP与DEC等公司,都有推出自家的主机搭配自己的Unix操作系统。

每一家公司自己出的Unix虽然在架构上面大同小异,但是却真的仅能支持自身的硬件, 所以,早先的Unix只能与服务器(Server)或者是大型工作站(Workstation)划上等号。 但到了1979年时,AT&T推出System V 第七版Unix 后,这个情况就有点改善了。 这一版最重要的特色是可以支持x86架构的个人计算机系统,也就是说System V 可以在个人计算机上面安装与运作了。

不过因为AT&T由于商业的考虑,以及在当时现实环境下的思考,于是想将Unix的版权收回去。因此,AT&T在1979年发行的第七版Unix中,特别提到了 “不可对学生提供原始码”的严格限制! 同时,也造成Unix业界之间的紧张气氛,并且也引爆了很多的商业纠纷~

 

1984年之一:x86架构的Minix操作系统诞生

关于1979年的版权声明中,影响最大的当然就是学校教Unix核心原始码相关学问的教授了。如果没有核心原始码,那么如何教导学生认识Unix呢?这问题对于Andrew Tanenbaum(谭宁邦)教授来说,实在是很伤脑筋的。既然1979年的Unix第七版可以在Intel的x86架构上面进行移植, 那么是否意味着可以将Unix改写并移植到x86上面了呢?在这个想法上, 谭宁邦教授于是乎自己动手写了Minix这个Unix Like的核心程序! 在撰写的过程中,为了避免版权纠纷,谭宁邦完全不看Unix核心原始码! 并且强调他的Minix必须能够与Unix兼容才行!谭宁邦在1984年开始撰写核心程序, 到了1986年终于完成,并于次年出版Minix相关书籍。

这个Minix版本比较有趣的地方是,他并不是完全免费的,无法在网络上提供下载, 必须要透过磁盘/磁带购买才行,虽然很便宜。不过,毕竟因为没有在网络上流传, 所以Minix的传递速度并没有很快速。此外,购买时,随磁盘还会附上Minix的原始码, 这意味着使用者可以学习Minix的核心程序设计概念。(这个特色对于Linux的启始开发阶段,可是有很大的关系喔!)

 

1984年之二:GNU计划与FSF基金会的成立

关于GNU,我们会在下一节给出详细解释,这里先略过。

 

1988年:图形接口XFree86计划

有鉴于图形用户接口(Graphical User Interface, GUI) 的需求日益加重,在1984年由MIT与其他第三方首次发表了X Window System ,并且更在1988年成立了非营利性质的XFree86这个组织。所谓的XFree86其实是X Window System + Free + x86的整合名称, 而这个XFree86的GUI界面更在Linux的核心1.0版于1994年释出时,整合于Linux操作系统当中!

 

1991年:芬兰大学生Linus Torvalds的一则消息

到了1991年,芬兰的赫尔辛基大学的Linus Torvalds在BBS上面贴了一则消息, 宣称他以bash, gcc等工具写了一个小小的核心程序,这个核心程序可以在Intel的386机器上面运作, 让很多人很感兴趣,从此开始了Linux不平凡的路程!

 

Linux发展历程

上面我们提到了Unix的历史,也提到了Linux是由Torvalds这个芬兰人所发明的。那么为何托瓦兹可以发明Linux呢?

 

Linus Torvalds(托瓦兹, 1969年出生)的外祖父是赫尔辛基大学的统计学家, 他的外祖父为了让自己的小孙子能够学点东西,所以从小就将托瓦兹带到身边来管理一些微计算机。 在这个时期,托瓦兹接触了汇编语言(Assembly Language),那是一种直接与芯片对谈的程序语言,也就是所谓的低级语言。必须要很了解硬件的架构,否则很难以汇编语言撰写程序的。

 

在1988年间,托瓦兹顺利的进入了赫尔辛基大学,并选读了计算机科学系。在就学期间,因为学业的需要与自己的兴趣, 托瓦兹接触到了Unix这个操作系统。当时整个赫尔辛基只有一部最新的Unix系统,同时仅提供16个终端机(terminal)。早期的计算机仅有主机具有运算功能,terminal仅负责提供Input/Output而已。在这种情况下, 实在很难满足托瓦兹的需求,因为光是等待使用Unix的时间,就很耗时。为此,他不禁想到:我何不自己搞一部Unix来玩?不过,就如同Stallman当初的GNU计划一样,要写核心程序,谈何容易?

 

不久之后,他就知道有一个类似Unix的系统,并且与Unix完全兼容,还可以在Intel 386机器上面跑的操作系统, 那就是我们上一节提过的,谭宁邦教授为了教育需要而撰写的Minix系统!他在购买了最新的Intel 386的个人计算机后,就立即安装了Minix这个操作系统。托瓦兹也经由这个原始码学习到了很多的核心程序设计的设计概念。托瓦兹跟其他的工程师一样, 他发现Minix虽然真的很棒,但是谭宁邦教授就是不愿意进行功能的加强,导致一堆工程师在操作系统功能上面的欲求不满。 这个时候年轻的托瓦兹就想:既然如此,那我何不自己来改写一个我想要的操作系统?于是他就开始了核心程序的撰写了。

 

撰写程序需要什么呢?首先需要的是能够进行工作的环境,再来则是可以将原始码编译成为可执行文件的编译程序。 好在有GNU计划提供的bash工作环境软件以及gcc编译程序等自由软件, 让托瓦兹得以顺利的撰写核心程序。他参考Minix的设计理念与书上的程序代码,然后仔细研究出386个人计算机的效能优化, 然后使用GNU的自由软件将核心程序代码与386紧紧的结合在一起,最终写出他所需要的核心程序。 而这个小玩意竟然真的可以在386上面顺利的跑起来,还可以读取Minix的文件系统。 真是太好了。不过还不够,他希望这个程序可以获得大家的一些修改建议, 于是他便将这个核心放置在网络上提供大家下载,同时在BBS上面贴了一则消息:

Hello everybody out there using minix- I’m doing a (free) operation system (just a hobby, won’t be big and professional like gnu) for 386(486) AT clones.

I’ve currently ported bash (1.08) and gcc (1.40), and things seem to work. This implies that i’ll get something practical within a few months, and I’d like to know what features most people want. Any suggestions are welcome, but I won’t promise I’ll implement them :-)

这则新闻引起很多人的注意,他们也去托瓦兹提供的网站上下载了这个核心来安装。 有趣的是,因为托瓦兹放置核心的那个FTP网站的目录为:Linux, 从此,大家便称这个核心为Linux了。(注意,此时的Linux就是那个kernel。 另外,托瓦兹所丢到该目录下的第一个核心版本为0.02)

 

同时,为了让自己的Linux能够兼容于Unix系统,于是托瓦兹开始将一些能够在Unix上面运作的软件拿来在Linux上面跑。 不过,他发现到有很多的软件无法在Linux这个核心上运作。这个时候他有两种作法, 一种是修改软件,让该软件可以在Linux上跑, 另一种则是修改Linux,让Linux符合软件能够运作的规范! 由于Linux希望能够兼容于Unix,于是托瓦兹选择了第二个作法:修改Linux。 为了让所有的软件都可以在Linux上执行,于是托瓦兹开始参考标准的POSIX(POSIX是可携式操作系统接口(Portable Operating System Interface)的缩写,重点在规范核心与应用程序之间的接口, 这是由美国电器与电子工程师学会(IEEE)所发布的一项标准)规范。因为POSIX标准主要是针对Unix与一些软件运行时候的标准规范, 只要依据这些标准规范来设计的核心与软件,理论上,就可以搭配在一起执行了。 而Linux的发展就是依据这个POSIX的标准规范,Unix上面的软件也是遵循这个规范来设计的, 如此一来,让Linux很容易就与Unix兼容共享互有的软件了。因为Linux直接放置在网络下,提供大家下载, 所以在流通的速度上相当的快,导致Linux的使用率大增。这些都是造成Linux大受欢迎的几个重要因素。

 

Linux虽然是托瓦兹发明的,而且内容还绝不会涉及专利软件的版权问题。 不过,如果单靠托瓦兹自己一个人的话,那么Linux要茁壮实在很困难。 因为一个人的力量是很有限的。好在托瓦兹选择Linux的开发方式相当的务实。 首先,他将释出的Linux核心放置在FTP上面,并请告知大家新的版本信息, 等到用户下载了这个核心并且安装之后,如果发生问题, 或者是由于特殊需求亟需某些硬件的驱动程序,那么这些使用者就会主动回报给托瓦兹。 在托瓦兹能够解决的问题范围内,他都能很快速的进行Linux核心的更新与除错。

 

不过,托瓦兹总是有些硬件无法取得的啊,那么他当然无法帮助进行驱动程序的撰写与相关软件的改良。 这个时候,就会有些志工跳出来说:这个硬件我有,我来帮忙写相关的驱动程序。 因为Linux的核心是Open Source的,黑客志工们很容易就能够跟随Linux的原本设计架构, 并且写出兼容的驱动程序或者软件。志工们写完的驱动程序与软件托瓦兹是如何看待的呢?首先,他将该驱动程序/软件带入核心中,并且加以测试。 只要测试可以运行,并且没有什么主要的大问题,那么他就会很乐意的将志工们写的程序代码加入核心中。对于Linux核心所欠缺的项目,他总是“先求有且能跑, 再求进一步改良”的心态。这让Linux使用者与志工得到相当大的鼓励!

 

另外,为适应应这种随时都有程序代码加入的状况,于是Linux便逐渐发展成具有模块的功能,即将某些功能独立出于核心外,在需要的时候才加载到核心中。如此一来, 如果有新的硬件驱动程序或者其他协议的程序代码进来时,就可以模块化, 大大的增加了Linux核心的可维护能力。

 

后来,因为Linux核心加入了太多的功能,光靠托瓦兹一个人进行核心的实际测试并加入核心原始程序实在太费力。结果,就有很多的朋友跳出来帮忙这个前置作业。例如考克斯(Alan Cox)、与崔迪(Stephen Tweedie)等等, 这些重要的副手会先将来自志工们的修补程序或者新功能的程序代码进行测试, 并且结果上传给托瓦兹看,让托瓦兹作最后核心加入的原始码的选择与整并。 这个分层负责的结果,让Linux的发展更加的容易。这些托瓦兹的Linux发展副手,以及自愿传送修补程序的黑客志工, 其实都没有见过面,而且彼此在地球的各个角落,大家群策群力的共同发展出现今的Linux, 我们称这群人为虚拟团队。而为了虚拟团队数据的传输,于是Linux便成立的核心网站:http://www.kernel.org

 

正是这群素未谋面的虚拟团队们,在1994年终于完成的Linux的核心正式版:version 1.0。 这一版同时还加入了X Window System的支持。于1996年完成了2.0版。此外,托瓦兹指明了企鹅为Linux的吉祥物。从此,Linux一步一个脚印地走到了今天。

摘自:羽飞博客