最近更新日期:2009/08/05
1. Linux是什么
1.1 Linux是什么 1.2 Linux之前,Unix的历史 1.3 关于GNU计划 Linux是什么 我们知道Linux这玩意儿是在计算机上面运作的,所以说Linux就是一组软件。问题是这个软件是操作系统还是应用程序?
且Linux可以在哪些种类的计算机上面运作?而Linux源自哪里?为什么 Linux 还不用钱?这些我们都得来谈一谈先! Linux是什么 我们在第零章、计算器概论里面有提到过整个计算机系统的概念, 计算机是由一堆硬件所组成的,为了有效率的控制这些硬件资源,于是乎就有操作系统的产生了。 操作系统除了有效率的控制这些硬件资源的分配,并提供计算机运作所需要的功能(如网络功能)之外, 为了要提供程序设计师更容易开发软件的环境,所以操作系统也会提供一整组系统呼叫接口来给软件设计师开发用喔! 知道为什么要讲这些了吗?嘿嘿!没错,因为Linux就是一套操作系统!如同下图所示, Linux就是核心与系统呼叫接口那两层。至于应用程序算不算Linux呢?当然不算啦!这点要特别注意喔! 图1.1.1、操作系统的角色 由上图中我们可以看到其实核心与硬件的关系非常的强烈。早期的Linux是针对386来开发的, 由于Linux只是一套操作系统并不含有其他的应用程序,因此很多工程师在下载了 Linux 核心并且实际安装之后,就只能看着计算机开始运作了! 接下来这些高级工程师为了自己的需求,再在Linux上面安装他们所需要的软件就是了。
由于不同的硬件他的功能函数并不相同,例如IBM的Power CPU与Intel的x86架构就是不一样! 所以同一套操作系统是无法在不同的硬件平台上面运作的!举例来说,如果你想要让x86上面跑的那套操作系统也能够在Power CPU上运作时,就得要将该操作系统进行修改才行。如果能够参考硬件的功能函数并据以修改你的操作系统程序代码, 那经过改版后的操作系统就能够在另一个硬件平台上面运作了。 这个动作我们通常就称为『软件移植』了!
Linux提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, 这个架构是沿袭Unix良好的传统来的,所以相当的稳定而功能强大!此外, 由于这个优良的架构可以在目前的个人计算机(x86系统)上面跑, 所以很多的软件开发者渐渐的将他们的工作心血移转到这个架构上面,所以 Linux 操作系统也有很多的应用软件啦! 虽然Linux仅是其核心与核心提供的工具,不过由于核心、核心工具与这些软件开发者提供的软件的整合, 使得Linux成为一个更完整的、功能强大的操作系统啰!约略了解Linux是何物之后,接下来,我们要谈一谈, 『为什么说Linux是很稳定的操作系统呢?他是如何来的?』 Linux之前,Unix的历史 早在Linux出现之前的二十年(大约在1970 年代),就有一个相当稳定而成熟的操作系统存在了! 那就是Linux的老大哥『Unix』是也!怎么这么说呢?他们这两个家伙有什么关系呀?这里就给他说一说啰! 众所皆知的,Linux的核心是由Linus Torvalds在1991年的时候给他开发出来的,
并且丢到网络上提供大家下载,后来大家觉得这个小东西(Linux Kernel)相当的小而精巧,
所以慢慢的就有相当多的朋友投入这个小东西的研究领域里面去了!
但是为什么这个小东西这么棒呢?又为什么大家都可以免费的下载这个东西呢?
嗯!等鸟哥慢慢的道来!
早期的计算机并不像现在的个人计算机一样普遍,他可不是一般人碰的起的呢~ 除非是军事或者是高科技用途,或者是学术单位的学术研究,否则真的很难接触到。 非但如此,早期的计算机架构还很难使用,除了指令周期并不快之外,操作接口也很困扰的! 因为那个时候的输入设备只有卡片阅读机、输出设备只有打印机, 用户也无法与操作系统互动(批次型操作系统)。 在那个时候,写程序是件很可怜的事情,因为程序设计者,必须要将程序相关的信息在读卡纸上面打洞, 然后再将读卡纸插入卡片阅读机来将信息读入主机中运算。光是这样就很麻烦了,如果程序有个小地方写错, 哈哈!光是重新打卡就很惨,加上主机少,用户众多,光是等待,就耗去很多的时间了! 在那之后,由于硬件与操作系统的改良,使得后来可以使用键盘来进行信息的输入。 不过,在一间学校里面,主机毕竟可能只有一部,如果多人等待使用,那怎么办?大家还是得要等待啊! 好在1960年代初期麻省理工学院(MIT)发展了所谓的: 『兼容分时系统(Compatible Time-Sharing System, CTSS)』, 它可以让大型主机透过提供数个终端机(terminal)以联机进入主机,来利用主机的资源进行运算工作。 架构有点像这样: 图1.2.1、早期主机与终端机的相关性图标
如此一来,无论主机在哪里,只要在终端机前面进行输入输出的作业,就可利用主机提供的功能了。 不过,需要注意的是,此时终端机只具有输入/输出的功能,本身完全不具任何运算或者软件安装的能力。 而且,比较先进的主机大概也只能提供30个不到的终端机而已。 为了更加强化大型主机的功能,以让主机的资源可以提供更多使用者来利用,所以在1965年前后, 由贝尔实验室(Bell)、麻省理工学院(MIT)及奇异公司(GE, 或称为通用电器)共同发起了Multics的计划, Multics计划的目的是想要让大型主机可以达成提供300个以上的终端机联机使用的目标。 不过,到了1969年前后,计划进度落后,资金也短缺,所以该计划虽然继续在研究,但贝尔实验室还是退出了该计划的研究工作。 (注:Multics有复杂、多数的意思存在。)
在认为Multics计划不可能成功之后,贝尔研究室就退出该计划。不过,原本参与Multics计划的人员中,已经从该计划当中获得一些点子, Ken Thompson 就是其中一位! Thompson因为自己的需要,希望开发一个小小的操作系统以提供自己的需求。 在开发时,有一部DEC(Digital Equipment Corporation)公司推出的PDP-7刚好没人使用, 于是他就准备针对这部主机进行操作系统核心程序的撰写。本来Thompson应该是没时间的(有家有小孩的宿命?), 无巧不巧的是,在1969年八月份左右,刚好Thompson的妻儿去了美西探亲, 于是他有了额外的一个月的时间好好的待在家将一些构想实现出来! 经过四个星期的奋斗,他终于以汇编语言(Assembler)写出了一组核心程序,同时包括一些核心工具程序, 以及一个小小的文件系统。那个系统就是Unix的原型! 当时Thompson将Multics庞大的复杂系统简化了不少,于是同实验室的朋友都戏称这个系统为:Unics。(当时尚未有Unix的名称) Thompson 的这个文件系统有两个重要的概念,分别是:
这些概念在后来对于Linux的发展有相当重要的影响喔!
由于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很容易被移植到不同的机器上面喔!
虽然贝尔属于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改版而来!)
由于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业界之间的紧张气氛,并且也引爆了很多的商业纠纷~
关于1979年的版权声明中,影响最大的当然就是学校教Unix核心原始码相关学问的教授了! 想一想,如果没有核心原始码,那么如何教导学生认识Unix呢?这问题对于Andrew Tanenbaum(谭宁邦)教授来说,实在是很伤脑筋的!不过,学校的课程还是得继续啊!那怎么办? 既然1979年的Unix第七版可以在Intel的x86架构上面进行移植, 那么是否意味着可以将Unix改写并移植到x86上面了呢?在这个想法上, 谭宁邦教授于是乎自己动手写了Minix这个Unix Like的核心程序! 在撰写的过程中,为了避免版权纠纷,谭宁邦完全不看Unix核心原始码! 并且强调他的Minix必须能够与Unix兼容才行!谭宁邦在1984年开始撰写核心程序, 到了1986年终于完成,并于次年出版Minix相关书籍,同时与新闻组(BBS及News)相结合~
这个Minix版本比较有趣的地方是,他并不是完全免费的,无法在网络上提供下载! 必须要透过磁盘/磁带购买才行!虽然真的很便宜~不过,毕竟因为没有在网络上流传, 所以Minix的传递速度并没有很快速!此外,购买时,随磁盘还会附上Minix的原始码! 这意味着使用者可以学习Minix的核心程序设计概念喔! (这个特色对于Linux的启始开发阶段,可是有很大的关系喔!) 此外,Minix操作系统的开发者仅有谭宁邦教授,因为学者很忙啊!加上谭宁邦始终认为Minix主要用在教育用途上面,
所以对于Minix是点到为止!没错,Minix是很受欢迎,不过,使用者的要求/需求的声音可能就比较没有办法上升到比较高的地方了!
这样说,你明白吧?^_^
Richard Mathew Stallman(史托曼)在1984年发起的GNU计划,对于现今的自由软件风潮, 真有不可磨灭的地位!目前我们所使用得很多自由软件,几乎均直接或间接受益于GNU这个计划呢! 那么史托曼是何许人也?为何他会发起这个GNU计划呢?
有鉴于图形用户接口(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在BBS上面贴了一则消息, 宣称他以bash, gcc等工具写了一个小小的核心程序,这个核心程序可以在Intel的386机器上面运作, 让很多人很感兴趣!从此开始了Linux不平凡的路程! 关于GNU计划 GNU计划对于整个自由软件来说是占有非常重要的角色!底下我们就来谈谈这些!
1984年创立GNU计划与FSF基金会的Stallman先生认为,写程序最大的快乐就是让自己发展的良好的软件让大家来使用了! 而既然程序是想要分享给大家使用的,不过,每个人所使用的计算机软硬件并不相同, 既然如此的话,那么该程序的原始码(Source code)就应该要同时释出, 这样才能方便大家修改而适用于每个人的计算机中呢!这个将原始码连同软件程序释出的举动, 就称为自由软件(Free Software)运动! 此外,史托曼同时认为,如果你将你程序的Source code分享出来时,若该程序是很优秀的,那么将会有很多人使用,
而每个人对于该程序都可以查阅source code,无形之中,就会有一票人帮你除错啰!
你的这支程序将会越来越壮大!越来越优秀呢!
而为了避免自己的开发出来的Open source自由软件被拿去做成专利软件, 于是Stallman同时将GNU与FSF发展出来的软件,都挂上GPL的版权宣告~ 这个FSF的核心观念是『版权制度是促进社会进步的手段, 版权本身不是自然权力。』对于FSF有兴趣或者对于GNU想要更深入的了解时,请参考朝阳科技大学洪朝贵教授的网站 http://people.ofset.org/~ckhung/a/c_83.php,或直接到GNU去: http://www.gnu.org 里面有更为深入的解说!
那么这个GPL(GNU General Public License, GPL)是什么玩意儿? 为什么要将自由软件挂上GPL的『版权宣告』呢?这个版权宣告对于作者有何好处? 首先,Stallman对GPL一直是强调Free的,这个Free的意思是这样的: "Free software" is a matter of liberty, not price. To understand the concept, you should think of "free speech", not "free beer". "Free software" refers to the users' freedom to run, copy, distribute, study, change, and improve the software 大意是说,Free Software(自由软件)是一种自由的权力,并非是『价格!』 举例来说,你可以拥有自由呼吸的权力、你拥有自由发表言论的权力, 但是,这并不代表你可以到处喝『免费的啤酒!(free beer)』,也就是说, 自由软件的重点并不是指『免费』的,而是指具有『自由度, freedom』的软件, 史托曼进一步说明了自由度的意义是: 使用者可以自由的执行、复制、再发行、学习、修改与强化自由软件。 这无疑是个好消息!因为如此一来,你所拿到的软件可能原先只能在Unix上面跑, 但是经过原始码的修改之后,你将可以拿他在Linux或者是Windows上面来跑!总之, 一个软件挂上了GPL版权宣告之后,他自然就成了自由软件!这个软件就具有底下的特色:
但请特别留意,你所修改的任何一个自由软件都不应该也不能这样:
也就是说,既然GPL是站在互助互利的角度上去开发的,你自然不应该将大家的成果占为己有,
对吧!因此你当然不可以将一个GPL软件的授权取消,即使你已经对该软件进行大幅度的修改!
那么自由软件也不能贩卖吗?当然不是!还记得上一个小节里面,
我们提到史托曼藉由贩卖Emacs取得一些经费,让自己生活不至于匮乏吧?是的!
自由软件是可以贩卖的,不过,不可仅贩卖该软件,应同时搭配售后服务与相关手册~
这些可就需要工本费了呢!
很多人还是有疑问,目前不是有很多Linux开发商吗?为何他们可以贩卖Linux这个GPL授权的软件? 原因很简单,因为他们大多都是贩卖『售后服务!』所以,他们所使用的自由软件, 都可以在他们的网站上面下载!(当然,每个厂商他们自己开发的工具软件就不是GPL的授权软件了!) 但是,你可以购买他们的Linux光盘,如果你购买了光盘,他们会提供相关的手册说明文件, 同时也会提供你数年不等的咨询、售后服务、软件升级与其他协力工作等等的附加价值! 所以说,目前自由软件工作者,他们所赖以维生的,几乎都是在『服务』这个领域呢! 毕竟自由软件并不是每个人都会撰写,有人有需要你的自由软件时,他就会请求你的协助, 此时,你就可以透过服务来收费了!这样来说, 自由软件确实还是具有商业空间的喔!
上面提到的大多是与用户有关的项目,那么 GPL 对于自由软件的作者有何优点呢?大致的优点有这些:
这是因为既然是Open Source的自由软件,那么你的程序代码将会有很多人帮你查阅, 如此一来,程序的漏洞与程序的优化将会进展的很快!所以,在安全性与效能上面, 自由软件一点都不输给商业软件喔!此外,因为GPL授权当中,修改者并不能修改授权, 因此,你如果曾经贡献过程序代码,嘿嘿!你将名留青史呢!不错吧! ^_^ 对于程序开发者来说,GPL实在是一个非常好的授权,因为大家可以互相学习对方的程序撰写技巧, 而且自己写的程序也有人可以帮忙除错。那你会问啊,对于我们这些广大的终端用户,GPL有没有什么好处啊?有啊!当然有! 虽然终端用户或许不会自己编译程序代码或者是帮人家除错,但是终端用户使用的软件绝大部分就是GPL的软件, 全世界有一大票的工程师在帮你维护你的系统,这难道不是一件非常棒的事吗? ^_^ |
|||||||||||||||||||||||||||||
本网页主要以Firefox配合解析度 1024x768 作为设计依据 鸟哥自由软件整合应用研究室