Linux学习 :Unix的历史

 

引用:《鸟哥的Linux私房菜基础篇第三版》

 

早在Linux出现之前的二十年(大约在 1970 年代),就有一个相当稳定而成熟的操作系统存在了!那就是Linux的老大哥“Unix”是也!怎么这么说呢?他们这两个家伙有什么关系呀?众所周知的,Linux的核心是由Linus Torvalds在1991年的时候开发出来的,并且丢到网络上提供大家下载,后来大家觉得这个小东西(Linux Kernel)相当的小而精巧,所以慢慢的就有相当多的朋友投入这个小东西的研究领域里面去了!但是为什么这个小东西这么棒呢?又为什么大家都可以免费的下载这个东西呢?

1969年以前:一个伟大的梦想--Bell,MIT与GE的“Multics”系统

早期的计算机并不像现在的个人计算机一样普及,他可不是一般人碰的到的,除非是军事或者是高科技用途,或者是学术单位的学术研究,否则真的很难接触到。非但如此,早期的计算机架构还很难使用,除了指令周期并不快之外,操作接口也很困扰的!因为那个时候的输入设备只有卡片阅读机、输出设备只有打印机,用户也无法与操作系统交互(批次型操作系统)。

在那个时候,写程序是件很可怜的事情,因为程序设计者,必须要将程序相关的信息在读卡纸上面打孔,然后再将读卡纸插入卡片阅读机来将信息读入主机中运算。光是这样就很麻烦了,如果程序有个小地方写错,光是重新打卡就很惨,加上主机少,用户众多,光是等待就耗去很多的时间了。

在那之后,由于硬件与操作系统的改良,使得后来可以使用键盘来进行信息的输入。不过,在一间学校里面,主机毕竟可能只有一部,如果多人等待使用,那怎么办?大家还是得要等待啊!好在1960年代初期麻省理工学院(MIT)发展了所谓的“兼容分时系统(Compatible Time-Sharing System,CTSS)”,它可以让大型主机通过提供数个终端机(terminal)以联机进入主机,来利用主机的资源进行运算工作。架构有点像这样:

这个兼容分时系统可以就是近代操作系统的始祖呢!它可以让多个使用者在某一段时间内分别使用CPU 的资源,感觉上你会觉得大家是同时使用该主机的资源!事实上,是CPU 在每个使用者的工作之间进行切换,在当时,这可是个划时代的技术。

如此一来,无论主机在哪里,只要在终端前面进行输入输出的作业,就可利用主机提供的功能了。不过,需要注意的是,此时终端机只具有输入输出的功能,本身完全不具任何运算或软件安装的能力。而且,比较先进的主机大概也只能提供30个不到的终端机而已。

为了更加强化大型主机的功能,以让主机的资源可以提供更多使用者来利用,所以在1965年前后,由贝尔实验室(Bell)、麻省理工学院(MIT)及奇异公司(GE,或称为通用电器)共同发起了Multics的计划,Multics计划的目的是想要让大型主机可以达成提供300个以上的终端机联机使用的目标。不过,到了1969年前后,计划进度落后,资金也短缺,所以该计划虽然继续在研究,但贝尔实验室还是退出了该计划的研究工作。

Tips:最终Multics还是有成功的发展出他们的系统,完整的历史说明可以参考:http://www.multicians.org/网站内容。Multics计划虽然后来没有受到很大的重视,但是他培养出来的人才是相当优秀的!

1969年:Ken Thompson的小型file server system

在认为Multics计划不可能成功之后,贝尔实验室就退出该计划。不过,原本参与Multics计划的人员中,已经从该计划当中获得一些点子,Ken Thompson就是其中一位!

Thompson因为自己的需要,希望开发一个小小的操作系统以满足自己的需求。在开发时,有一部DEC(Digital Equipment Corporation)公司推出的PDP-7刚好没人使用,于是他就准备针对这部主机进行操作系统核心程序的编写。本来Thompson应该是没时间的(有家有小孩的宿命?),无巧不巧的是,在1969年八月份左右,刚好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的正式版本。

由于贝尔实验室是隶属于美国电信大厂AT&T公司的,只是AT&T当时忙于其他商业活动,对于Unix并不支持也不排斥。此外,Unix在这个时期的发展者都是贝尔实验室的工程师,这些工程师对于程序当然相当有研究,所以,Unix在此时当然是不容易被一般人所接受的。不过对于学术界的学者来说,这个Unix真是学者们进行研究的福音,因为程序代码可改写并且可作为学术研究之用。

需要特别强调的是,由于Unix 是以高级的C语言写的,相对于汇编语言需要与硬件有密切的配合,高级的C 语言与硬件的相关性就没有这么大了。所以,这个改变也使得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操作系统。

但是,如同我们前面提到的,操作系统的核心(Kernel)必须要跟硬件配合,以提供及控制硬件的资源进行良好的工作。而在早期每一家生产计算机硬件的公司还没有所谓的“协议”的概念,所以每一个计算机公司生产的硬件自然就不同。因此他们必须要为自己的计算机硬件开发合适的Unix 系统。例如在学术机构相当有名的SUN、Cray与HP就是这种情况。他们开发出来的Unix操作系统以及内含的相关软件并没有办法在其他的硬件架构下工作的。另外,由于没有厂商针对个人计算机设计Unix系统,因此,在早期并没有支持个人计算机的Unix操作系统的出现。

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

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

Tips:目前被称为纯种的Unix指的就是System V以及BSD这两套。

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

关于1979年的版权声明中,影响最大的当然就是学校教Unix核心源代码相关学科的教授了,想一想,如果没有核心源代码,那么如何教导学生认识Unix 呢?这问题对于Andrew Tenenbaum(谭宁邦)教授来说,实在是很伤脑筋。不过,学校的课程还是得继续啊!那怎么办?

既然1979年的Unix第七版可以在Intel的x86架构上面进行移植,那么是否意味着可以将Unix改写并移植到x86上面呢?在这个想法上,谭宁邦教授于是自己动手写了Minix这个Unix Like的核心程序。在编写的过程中,为了避免版权纠纷,谭宁邦完全不看Unix核心源代码,并且强调他的Minix必须能够与Unix兼容才行,谭宁邦在1984年开始编写核心程序,到了1986年终于完成,并于次年出版Minix相关书籍,同时与新闻组(BBS及News)相结合。

Tips:之所以称为Minix的原因,是因为它是个Mini的Unix系统。

这个Minix版本比较有趣的地方是,它并不是完全免费的,无法在网络上提供下载,必须要通过磁盘/磁带购买才行。虽然真的很便宜,不过,毕竟因为没有在网络上流传,所以Minix的传递速度并没有很快速。此外,购买时,随磁盘还会附上Minix的源代码,这意味着使用者可以学习Minix的核心程序设计概念。

此外,Minix操作系统的开发者仅有谭宁邦教授,因为学者很忙,加上谭宁邦教授始终认为Minix主要用在教育用途上面,所以对于Minix是点到为止。没错,Minix是很受欢迎,不过,使用者的要求/需求的声音可能就比较没有办法上升到比较高的地方了。

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

Richard Mathew Stallman(史托曼)在1984年发起的GNU计划,对于现今的自由软件风潮,真有不可磨灭的地位,目前我们所使用的很多自由软件,几乎均直接或间接受益于GNU这个计划。那么史托曼是何许人?为何他会发起这个GNU计划呢?

一个分享的环境:

Richard Mathew Stallman(生于1953年,网络上自称的ID为RMS)从小就很聪明,他在1971年的时候,进入黑客圈中相当出名的人工智能实验室(AI Lab),这个时候的黑客专指计算机能力很强的人,而非破坏计算机的怪客(cracker)。

当时的黑客圈对于软件的着眼点几乎都是在“分享”,所以并没有专利方面的困扰,这个特色对于史托曼的影响很大,不过,后来由于管理阶层的问题,导致实验室的优秀黑客离开该实验室,并且进入其他商业公司继续发展优秀的软件。但史托曼并不服输,仍然持续在原来的实验室开发新的程序与软件。后来,他发现到,自己一个人并无法完成所有的工作,于是想要成立一个开放的团体来共同努力。

使用Unix开发阶段:

 

1983年以后,因为实验室硬件的更换,使得史托曼无法继续以原有的硬件与操作系统自由程序的编写。而且他进一步发现到,过去他所使用的Lisp操作系统,是麻省理工学院的专利软件,是无法共享的,这对于想要成立一个开放团体的史托曼是个阻碍。于是他便放弃了Lisp这个系统。后来,他接触到Unix这个系统,并且发现Unix在理论与实际上,都可以在不同的机器间进行移植。虽然Unix 依旧是专利软件,但至少Unix 架构上还是比较开放的,于是他开始转而使用Unix 系统。

因为Lisp与Unix是不同的系统,所以,他原本已经编写完毕的软件是无法在Unix上面运行的。为此,他就开始将软件移植到Unix上面。并且,为了让软件可以在不同的平台上运行,因此,史托曼将他发展的软件均编写成可以移植的版本,也就是他都会将程序的源代码公布出来。

GNU计划的推进:

1984年,史托曼开始GNU计划,这个计划的目的是:建立一个自由、开放的Unix操作系统(Free Unix)。但是建立一个操作系统谈何容易啊!而且在当时的GNU是仅有自己一个人单打独斗的,这实在太麻烦,但又不想放弃这个计划,那可怎么办呢?

聪明的史托曼干脆反其道而行“既然操作系统太复杂,我就先写可以在Unix上面运行的小程序,这总可以吧”在这个想法上,史托曼开始参考Unix上面现有的软件,并依据这些软件的作用开发出功能相同的软件,且开发期间史托曼绝不看其他软件的源代码,以避免吃上官司。后来一堆人知道免费的GNU软件,并且实际使用后发现与原有的专利软件也差不了太多,于是便转而使用GNU软件,于是GNU计划逐渐打开知名度。

虽然GNU计划渐渐打开知名度,但是能见度还是不够。这时史托曼又想:不论是什么软件,都得要进行编译成为二进制文件(binary program)后才能够执行,如果能够写出一个不错的编译程序,那不就是大家都需要的软件了吗?因此他便开始编写C语言的编译程序,那就是现在相当有名的GNU C Compiler(gcc),这个点相当的重要,这是因为C语言编译程序版本众多,但都是专利软件,如果他写的C编译程序够棒,效率高,那么将会大大的让GNU 计划出现在众人眼前。

但开始编写GCC时并不顺利,为此,他先转而将他原先就已经写过的Emacs编辑器写成可以在Unix上面跑的软件,并公布源代码。Emsca是一种程序编辑器,它可以在用户编写程序的过程中就进行程序语法的检验,此一功能可以减少程序设计师出错的时间,因为Emacs太优秀了,因此,很多人便直接向他购买。

此时因特网还未流行,所以,史托曼便借着Emacs以磁带(tape)出售,赚了一点钱,进而开始全力编写其他软件。并且成立自由软件基金会(FSF,Free Software Foundation),请更多工程师编写软件。终于还是完成了GCC,这比Emacs还更有帮助。此外,他还编写了更多可以被调用的C函数库(GNU C Library),以及可以被用来操作操作系统的基本接口BASH Shell,这些都在1990年左右完成了。

GNU的通用公共许可证:

到了1985年,为了避免GNU所开发的自由软件被其他人所利用而成为专利软件,所以他与律师草拟了有名的通用公共许可证(General Public License,GPL),并且称呼为copyleft(相对于专利软件的copyright)。GNU开发了几个重要的软件,如:

Emacs

GNU C(GCC

GNU C Library(glibc

Bash shell

造成后来很多的软件开发者可以基于这些基础的工具来进行程序开发,进一步壮大了自由软件团体。这是很重要的,不过,对于GNU的最初构想“建立一个自由的Unix操作系统”来说,有这些优秀的程序是仍无法满足,因为,当下并没有“自由的Unix核心”存在,所以这些软件仍只能在那些有专利的Unix平台上工作,一直到Linux的出现。

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不平凡的路程。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值