Unix的前世今生
如果你是为了了解Unix和Linux的家族和版本,请忽略这篇,它们在这里不同Linux版本的区别和选择,Unix家族版本biubiubiu~~~
第一幕 1969年以前:一个没有完成的梦想:Bell,MIT与GE的‘Multics’系统
早期的电脑并不像现在的个人电脑一样普遍,他可不是一般人碰的起的呢~ 除非是军事或者是高科技用途,或者是学术单位的学术研究,否则真的很难接触到。 非但如此,早期的电脑架构还很难使用,除了运算速度并不快之外,操作介面也很困扰的! 因为那个时候的输入设备只有读卡机、输出设备只有印表机, 使用者也无法与作业系统互动(批次型作业系统)。
在那个时候,写程式是件很可怜的事情,因为程式设计者,必须要将程式相关的资讯在读卡纸上面打洞, 然后再将读卡纸插入读卡机来将资讯读入主机中运算。光是这样就很麻烦了,如果程式有个小地方写错, 哈哈!光是重新打卡就很惨,加上主机少,使用者众多,光是等待,就耗去很多的时间了!
在那之后,由于硬体与作业系统的改良,使得后来可以使用键盘来进行资讯的输入。 不过,在一间学校里面,主机毕竟可能只有一部,如果多人等待使用,那怎么办?大家还是得要等待啊! 好在1960年代初期麻省理工学院(MIT)发展了所谓的: ‘相容分时系统(Compatible Time-Sharing System, CTSS)’, 它可以让大型主机透过提供数个终端机(terminal)以连线进入主机,来利用主机的资源进行运算工作。
这个相容分时系统可以说是近代作业系统的始祖呢!他可以让多个使用者在某一段时间内分别使用CPU的资源, 感觉上你会觉得大家是同时使用该主机的资源!事实上,是CPU在每个使用者的工作之间进行切换, 在当时,这可是个划时代的技术喔!
如此一来,无论主机在哪里,只要在终端机前面进行输入输出的作业,就可利用主机提供的功能了。 不过,需要注意的是,此时终端机只具有输入/输出的功能,本身完全不具任何运算或者软体安装的能力。 而且,比较先进的主机大概也只能提供30个不到的终端机而已。
为了更加强化大型主机的功能,以让主机的资源可以提供更多使用者来利用,所以在1965年前后, 由贝尔实验室(Bell)、麻省理工学院(MIT)及奇异公司(GE)共同发起了Multics的计画, Multics计画的目的是想要让大型主机可以达成提供300个以上的终端机连线使用的目标。 不过,到了1969年前后,计画进度落后,资金也短缺,所以该计画虽然继续在研究,但贝尔还是退出了该计画的研究工作。
第二幕 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的正式版本!
这群高级骇客实在很厉害!因为自己的需求来开发出这么多好用的工具! C程式语言开发成功后,甚至一直沿用至今呢!你说厉不厉害啊!这个故事也告诉我们,不要小看自己的潜能喔! 你想作的,但是现实生活中没有的,就动手自己搞一个来玩玩吧!
由于贝尔实验室是隶属于美国电信大厂AT&T公司的, 只是AT&T当时忙于其他商业活动,对于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也是Unix业者‘Sun(升阳)’这家公司的创办者! Sun公司即是以BSD发展的核心进行自己的商业Unix版本的发展的。 (后来可以安装在x86硬体架构上面FreeBSD即是BSD改版而来!)
第五幕 1979年:一个措手不及的版权宣告!
由于Unix的高度可移植性与强大的效能,加上当时并没有版权的纠纷, 所以让很多商业公司开始了Unix作业系统的发展,例如AT&T自家的System V、IBM的AIX以及HP与DEC等公司, 都有推出自家的主机搭配自己的Unix作业系统。
但是,如同我们前面提到的,作业系统的核心(Kernel)必须要跟硬体配合, 以提供及控制硬体的资源进行良好的工作!而在早期每一家生产电脑硬体的公司还没有所谓的‘协定’的概念, 所以每一个电脑公司出产的硬体自然就不相同啰!因此他们必须要为自己的电脑硬体开发合适的Unix系统。 例如在学术机构相当有名的Sun、Cray与HP就是这一种情况。 他们开发出来的Unix作业系统以及内含的相关软体并没有办法在其他的硬体架构下工作的! 另外,由于没有厂商针对个人电脑设计Unix系统,因此,在早期并没有支援个人电脑的Unix作业系统的出现。
PS:如同相容分时系统的功能一般,Unix强调的是多人多工的环境! 但早期的286个人电脑架构下的CPU是没有能力达到多工的作业,因此,并没有人对移植Unix到x86的电脑上有兴趣。
每一家公司自己出的Unix虽然在架构上面大同小异,但是却真的仅能支援自身的硬体, 所以啰,早先的Unix只能与服务器(Server)或者是大型工作站(Workstation)划上等号!
但是这个高度开放的Unix系统在1979年有了重大的转折~因为AT&T由于商业的考量, 以及在当时现实环境下的思考,于是将想Unix的版权收回去。因此,AT&T在1979年发行的第七版Unix中,特别提到了 ‘不可对学生提供原始码’的严格限制! 同时,也造成Unix业界之间的紧张气氛,并且也引爆了很多的商业纠纷~
PS:AT&T这一版开发出来的Unix被称为System V,目前被称为纯种的Unix指的就是System V以及BSD这两套啰!
第六幕 1984年之一:x86架构的Minix诞生
关于1979年的版权声明中,影响最大的当然就是学校教Unix核心原始码相关学问的教授了! 想一想,如果没有核心原始码,那么如何教导学生认识Unix呢?这问题对于Andrew Tanenbaum(谭宁邦)教授来说,实在是很伤脑筋的!不过,学校的课程还是得继续啊!那怎么办?
既然1979年的Unix第七版可以在Intel的x86架构上面进行移植, 那么是否意味著可以将Unix改写并移植到x86上面了呢?在这个想法上, 谭宁邦教授于是乎自己动手写了Minix这个Unix Like的核心程式! 在撰写的过程中,为了避免版权纠纷,谭宁邦完全不看Unix核心原始码! 并且强调他的Minix必须能够与Unix相容才行!谭宁邦在1984年开始撰写核心程式, 到了1986年终于完成,并于次年出版Minix相关书籍,同时与新闻群组(BBS及News)相结合~
PS:之所以称为Minix的原因,是因为他是个Mini的Unix系统啰!^_^
这个Minix版本比较有趣的地方是,他并不是完全免费的,无法在网路上提供下载! 必须要透过磁片/磁带购买才行!虽然真的很便宜~不过,毕竟因为没有在网路上流传, 所以Minix的传递速度并没有很快速!此外,购买时,随磁片还会附上Minix的原始码! 这意味著使用者可以学习Minix的核心程式设计概念喔! (这个特色对于Linux的启始开发阶段,可是有很大的关系喔!)
此外,Minux作业系统的开发者仅有谭宁邦教授,因为学者很忙啊!加上谭宁邦始终认为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系统。
因为Lisp与Unix是不同的系统,所以,他原本已经撰写完毕的软体是无法在Unix上面运行的!为此, 他就开始将软体移植到Unix上面。并且,为了让软体可以在不同的平台上运作, 因此,史托曼将他发展的软体均撰写成可以移植的型态!也就是他都会将程式的原始码公布出来!
第十幕 GNU计画的推展
1984年,史托曼开始GNU计画, 这个计画的目的是想要:建立一个自由的开放的Unix作业系统(Free Unix)。 但是建立一个作业系统谈何容易啊!而且在当时的GNU是仅有自己一个人单打独斗的史托曼~ 这实在太麻烦,但又不能不做这个计画,于是史托曼反其道而行~‘既然作业系统太复杂, 我就先写可以在Unix上面运行的小程式,这总可以了吧?呵呵!’在这个想法上, 史托曼便开始了程式的写作。在写作期间,为了不让自己吃上官司,他绝对不看专利软体的原始码! 为了这个计画,他开始使用原本Unix上面跑的软体, 并自行撰写功能与Unix原有专利软体相仿的软体。
但不论是什么软体,都得要进行编译成为二进位档案(binary file)后才能够执行, 因此他便开始撰写C语言的编译器,那就是现在相当有名的GNU C Compiler(gcc)! 这个点相当的重要!这是因为C语言编译器版本众多,但都是专利软体, 如果他写的C编译器够棒,效能够佳,那么将会大大的让GNU计画出现在众人眼前!
PS:电脑仅认识0/1的资料,但是人类不认识啊!人类对于纯文字的资料(就是所谓的ASCII档案格式)比较有感觉。 但是偏偏电脑又不认识ASCII格式的文字,很头痛,不是吗? 后来就有所谓的‘编译器’来辅助我们。
我们一般使用文字编辑器以ASCII纯文字格式来撰写程式, 再透过所谓的‘编译器(compiler)’将刚刚完成的文字档案‘编译’成为电脑认识的二进位制(binary file)的档案, 以让电脑认识且可以执行的程式啊
但开始时并不顺利,为此,他先转而将Emacs编辑器写成可以在Unix上面跑的软体,并公开公布原始码。 Emacs是一种程式编辑器,他可以在使用者撰写程式的过程中就进行程式语法的检验,此一功能可以减少程式设计师除错的时间! 因为Emacs太优秀了,因此,很多人便直接向他购买。
此时网际网路尚未流行,所以,史托曼便藉著Emacs以磁带(tape)出售,赚了一点钱 ,进而开始全力撰写其他软体。并且成立自由软体基金会(FSF, Free Software Foundation),请更多工程师与志工撰写软体。终于还是完成了GCC,这比Emacs还更有帮助! 此外,了更他还撰写多可以被呼叫的C函式库(GNU C library),以及可以被使用来操作作业系统的基本介面BASH shell! 这些都在1990年左右完成了!
PS:
如果纯粹使用文字编辑器来编辑程式的话,那么程式语法如果写错时, 只能利用编译时发生的错误讯息来修订了,这样实在很没有效率。 Emacs则是一个很棒的编辑器!注意!是编辑(editor)而非编译(compiler)! 他可以很快的立刻显示出你写入的语法可能有错误的地方,这对于程式设计师来说, 实在是一个好到不能再好的工具了!所以才会这么的受到欢迎啊!
第十一幕 GNU的通用公共许可
到了1985年,为了避免GNU所开发的自由软体被其他人所利用而成为专利软体, 所以他与律师草拟了有名的通用公共许可证(General Public License, GPL), 并且称呼他为copyleft(相对于专利软体的copyright!)。 关于GPL的相关内容我们在下一个小节继续谈论,在这里,必须要说明的是, 由于有GNU所开发的几个重要软体,如:
* Emacs
* GNU C (GCC)
* GNU C Library (glibc)
* Bash shell
造成后来很多的软体开发者可以藉由这些基础的工具来进行程式开发! 进一步壮大了自由软体团体!这是很重要的!不过,对于GNU的最初构想 ‘建立一个自由的Unix作业系统’来说,有这些优秀的程式是仍无法满足, 因为,当下并没有‘自由的Unix核心’存在...所以这些软体仍只能在那些有专利的 Unix平台上工作,一直到Linux的出现
PS:想了解其他开源许可证?小伙伴们看这里!!点击打链接
第十二幕 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作业系统当中!
PS:为什么称图形使用者介面为X呢?因为由英文单字来看,Window的W 接的就是X啦!意指Window的下一版就是了! 需注意的是,X Window并不是X Windows喔
!
第十三幕 1991年:芬兰大学生Linus Torvalds的一则简讯
到了1991年,芬兰的赫尔辛基大学的Linus Torvalds在BBS上面贴了一则消息, 宣称他以bash, gcc等工具写了一个小小的核心程式,这个核心程式可以在Intel的386机器上面运作, 让很多人很感兴趣!从此开始了Linux不平凡的路程!