第1章 Linux是什么
众所皆知,Linux 的内核原型是 1991 年由托瓦兹(Linus Torvalds)写出来的,但是托瓦兹为何可以写出 Linux 这个操作系统?为什么他要选择 386 的计算 b 机来开发?为什么Linux的开发可以这么迅速?又为什么Linux是免费的?以及目前为何有这么多的Linux版本(distributions)呢?了解这些后,我们才能够知道为何Linux可以免除专利软件之争,并且了解到Linux为何可以同时在个人计算机与大型主机上面大放光彩。所以,在进入Linux的世界之前,就让我们来谈一谈这些有趣的历史故事吧!
1.1 Linux是什么
我们知道Linux是怎么在计算机上面运行的,所以说Linux就是一组软件。问题是这个软件是操作系统还是应用程序?并且 Linux 可以在哪些种类的计算机上面运行?而 Linux 源自哪里?为什么Linux还不用钱?这些我们都得来谈一谈先!
1.1.1 Linux 是什么
我们在第0章计算机概论里面有提到过整个计算机系统的概念,计算机是由一堆硬件所组成的,为了更有效地控制这些硬件资源,于是乎就有操作系统的产生了。操作系统除了有效地控制这些硬件资源的分配,并提供计算机运行所需要的功能(如网络功能)之外,为了要提供程序员更容易开发软件的环境,所以操作系统也会提供一整组系统调用接口来给软件程序员开发用。
知道为什么要讲这些了吗?因为Linux就是一套操作系统。如图1-1所示,Linux就是内核与系统调用接口那两层。至于应用程序算不算Linux呢?当然不算啦!这点要特别注意。
图1-1 操作系统的角色
由上图中我们可以看到其实内核与硬件的关系非常紧密。早期的Linux是针对386来开发的,由于Linux只是一套操作系统并不含有其他的应用程序,因此很多工程师在下载了Linux内核并且实际安装之后,就只能看着计算机开始运行了!接下来这些高级工程师为了自己的需求,再在Linux上面安装他们所需要的软件。
Torvalds先生在写出Linux的时候,其实该内核仅能“驱动386所有的硬件”而已,即所谓的“让386计算机开始运行,并且等待用户指令输入”而已,事实上,当时能够在Linux上面跑的软件还很少呢!
由于不同的硬件的功能函数并不相同,例如 IBM 的 Power CPU 与 Intel 的 x86 架构就是不一样!所以同一套操作系统是无法在不同的硬件平台上面运行。举例来说,如果你想要让x86上面跑的那套操作系统也能够在 Power CPU 上运行时,就得要将该操作系统进行修改才行。如果能够参考硬件的功能函数并修改你的操作系统程序代码,那经过改版后的操作系统就能够在另一个硬件平台上面运行了。这个操作我们通常就称为“软件移植”了!
请问Windows操作系统能否在苹果公司的麦金塔计算机(MAC)上面安装与运行?
答:由上面的说明中,我们知道硬件是由内核来控制的,而每种操作系统都有它自己的内核。2006年以前的苹果计算机公司是请IBM公司帮忙开发硬件(所谓的Power CPU),而苹果计算机公司则在该硬件架构上开发自家的操作系统(就是俗称的麦金塔,MAC是也)。Windows则是开发在x86架构上的操作系统之一,因此Windows是没有办法安装到MAC计算机硬件上面的。
不过,在2006年以后,苹果计算机专门请Intel设计其硬件架构,也即其硬件架构已经转为x86系统,因此在2006年以后的苹果计算机若使用x86架构时,其硬件则“可能”可以安装Windows操作系统了。不过,你可能需要自己想些方式来处理该硬件的兼容性。
Windows操作系统本来就是针对个人计算机x86架构的硬件去设计的,所以它当然只能在x86的个人计算机上面运作,在不同的平台当然就无法运行了。也就是说,每种操作系统都是在它专门的机器上面运行的。这点得要先了解。不过,Linux由于是Open Source (开放源代码)的操作系统,所以它的程序代码可以被修改成适合在各种机器上面运行的,也就是说,Linux是具有“可移植性”,这可是很重要的一个功能喔!
Linux 提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构,这个架构是沿袭Unix良好的传统而来的,所以相当稳定并且功能强大。此外,由于这个优良的架构可以在目前的个人计算机(x86 系统)上面跑,所以很多的软件开发者渐渐将他们的工作心血移转到这个架构上面,所以Linux操作系统也有很多的应用软件。
虽然Linux仅是其内核与内核提供的工具,不过由于内核、内核工具与这些软件开发者提供的软件的整合,使得Linux成为一个更完整的、功能强大的操作系统。稍微了解了Linux是何物之后,接下来,我们要谈一谈为什么说Linux是很稳定的操作系统,以及它是如何来的。
1.1.2 Linux 之前 UNIX 的历史
早在Linux出现之前的20年(大约在20世纪70年代),就有一个相当稳定而成熟的操作系统存在了。那就是Linux的老大哥“UNIX”。怎么这么说呢?这两个操作系统有什么关系呀?这里就介绍一下。
众所皆知,Linux的内核是由Linus Torvalds 在1991 年的时候给开发出来的,并且放到网络上提供大家下载,后来大家觉得它(Linux Kernel)相当小而精巧,所以慢慢就有相当多的朋友投入其研究领域里面!但是为什么它这么棒呢?又为什么大家都可以免费下载它呢?下面说明其中的缘由。
1969年以前:一个伟大的梦想——Bell,MIT与GE的“Multics”系统
早期的计算机并不像现在的个人计算机一样普遍,它可不是一般人碰得起的,除非是军事或者是高科技用途,或者是学术院校的学术研究,否则真的很难接触到。非但如此,早期的计算机架构还很难使用,除了指令周期并不快之外,操作接口也很麻烦。因为那个时候的输入设备只有卡片阅读机,输出设备只有打印机,用户也无法与操作系统互动(多道批处理操作系统)。
在那个时候,编写程序是件非常麻烦的事情,因为程序员必须将程序相关的信息在读卡纸上面打洞,然后再将读卡纸插入卡片阅读机来将信息读入主机中运算。光是这样就很麻烦了,如果程序有个小地方写错,光是重新打卡就很惨,加上主机少,用户众多,仅等待就耗去很多的时间。
在那之后,由于硬件与操作系统的改良,使得后来可以使用键盘来进行信息的输入。不过,在一间学校里面,主机毕竟可能只有一台,如果多人等待使用,那怎么办?大家还是得要等待。好在20世纪60年代初期麻省理工学院(MIT)开发了分时操作系统(Compatible Time-Sharing System, CTSS),它可以让大型主机通过提供多个终端机(Terminal)以连接进入主机,从而利用主机的资源进行运算工作。其架构如图1-2所示。
图1-2 早期主机与终端机的相关性图示
这个兼容分时系统可以说是近代操作系统的鼻祖呢!它可以让多个用户在某一段时间内分别使用CPU的资源,感觉上你会觉得大家是同时使用该主机的资源。事实上,是CPU在每个用户的工作之间进行切换,在当时,这可是个划时代的技术!
如此一来,无论主机在哪里,只要在终端机前进行输入输出的作业,就可利用主机提供的功能了。不过,需要注意的是,此时终端机只具有输入/输出的功能,本身完全不具有任何运算或软件安装的能力。而且,比较先进的主机也只能提供30台左右的终端机而已。
为了加强大型主机的功能,以便让主机的资源可以提供更多用户来利用,所以在1965年前后,由贝尔实验室(Bell)、麻省理工学院(MIT)及通用电气公司(GE)共同发起了Multics的项目,Multics项目的目的是想要让大型主机可以同时提供300台以上的终端机连接使用的目标。不过,到了1969年前后,项目进度落后,资金也短缺,所以该项目虽然继续在研究,但贝尔实验室还是退出了该项目的研究工作。(注:Multics有复杂、多数的意思。)
最终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年8月份左右,刚好Thompson的妻儿探亲去了,于是他有了额外的一个月的时间好好待在家将一些构想实现出来!
经过4个星期的奋斗,他终于以汇编语言(Assembler)写出了一组内核程序,同时包括一些内核工具程序,以及一个小的文件系统。该系统就是UNIX的原型。当时Thompson将Multics庞大的复杂系统简化了不少,于是同实验室的朋友都戏称这个系统为Unics(当时尚未有UNIX的名称)。
Thompson的这个文件系统有两个重要的概念,分别是。
所有的程序或系统装置都是文件。
不管构建编辑器还是附属文件,所写的程序只有一个目的,就是要有效地完成目标。
这些概念在后来对于Linux的开发有相当重要的影响。
套一句常听到的广告词:“科技始终来自于人性”,当初Thompson会写这套UNIX内核程序,却只是想要移植一套名为“太空旅游”的游戏呢!
1973年:UNIX正式诞生,Ritchie等人以C语言写出第一个正式UNIX内核
由于 Thompson 写的那个操作系统实在太好用了,所以在贝尔实验室内部广为流传,并且多次经过改版。但是因为Unics本来是以汇编语言写成的,而如第0章计算机概论中谈到的,汇编语言具有专一性,加上当时的计算机机器架构都不太相同,所以每次安装到不同的机器都得要重新编写汇编语言,真不方便!
后来Thompson与Ritchie合作想将Unics改以更高级的程序语言来编写。当时现成的高级程序语言有B语言。但是由B语言所编译出来的内核性能不是很好。后来Dennis Ritchie将B语言重新改写成C语言,再以C语言重新改写与编译Unics的内核,最后发行出UNIX的正式版本!
这群高级黑客实在很厉害!因为自己的需求来开发出这么多好用的工具!C程序语言开发成功后,甚至一直沿用至今呢!你说厉不厉害?这个故事也告诉我们,不要小看自己的潜能!你想做的,但是现实生活中没有的,就动手自己搞一个来玩吧!
由于贝尔实验室是隶属于美国电信大厂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操作系统。
但是,如同我们前面提到的,操作系统的内核必须要跟硬件配合,以提供及控制硬件的资源进行良好的工作。而在早期每一家生产计算机硬件的公司还没有“协议”的概念,所以每一台计算机公司出产的硬件自然就不相同了。因此他们必须要为自己的计算机硬件开发合适的 UNIX 系统。例如在学术机构相当有名的Sun、Cray与HP就是这一种情况。他们开发出来的UNIX操作系统以及内含的相关软件并没有办法在其他的硬件架构下工作的。另外,由于没有厂商针对个人计算机设计UNIX系统,因此,在早期并没有支持个人计算机的UNIX操作系统的出现。
如同兼容分时系统的功能一般,UNIX强调的是多用户、多任务的环境。但早期的286个人计算机架构下的 CPU 是没有能力达到多任务的作业,因此,并没有人对移植 UNIX到x86的计算机上有兴趣。
每一家公司自己出品的UNIX虽然在架构上大同小异,但是却仅能支持自身的硬件,所以,早先的UNIX只能与服务器(Server)或者是大型工作站(Workstation)划上等号!但到了1979年时,AT&T推出System V第七版UNIX后,这个情况就有点改善了。这一版最重要的特色是可以支持x86架构的个人计算机系统,也就是说System V可以在个人计算机上面安装与运行了。
不过因为AT&T由于商业的考虑,以及在当时现实环境下的思考,于是想将UNIX的版权收回去。因此,AT&T在1979年发行的第七版UNIX中,特别提到了“不可对学生提供源码”的严格限制。同时,也造成UNIX业界之间的紧张气氛,并且也引发了很多的商业纠纷。
目前被称为纯种的UNIX指的就是System V以及BSD这两套。
1984年之一:x86架构的Minix操作系统诞生
关于1979年的版权声明中,影响最大的当然就是学校里教导UNIX内核源码相关学问的教授了。想一想,如果没有内核源码,那么如何教导学生认识UNIX呢?这问题对于AndrewTanenbaum (谭宁邦)教授来说,实在是很伤脑筋的。不过,学校的课程还是得继续,那怎么办?
既然1979年的UNIX第七版可以在Intel的x86架构上面进行移植,那么是否意味着可以将UNIX改写并移植到 x86 上面了呢?在这个想法上,谭宁邦教授于是自己动手写了 Minix 这个 UNIXLike 的内核程序!在编写的过程中,为了避免版权纠纷,谭宁邦完全不看 UNIX 内核源码!并且强调他的Minix必须能够与UNIX兼容才行!谭宁邦在1984年开始编写内核程序,到了1986年终于完成,并于次年出版Minix相关书籍,同时与新闻组(BBS及News)相结合。
之所以称为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依旧是专利软件,但至少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项目出现在众人眼前。如果你忘记了什么是编译程序,请回到第0章去看看编译程序!
但开始编写 GCC 时并不顺利,为此,他先转而将他原先就已经写过的 Emacs 编辑器写成可以在UNIX上运行的软件,并公布源码。Emacs是一种程序编辑器,它可以在用户编写程序的过程中就进行程序语法的检验,此一功能可以减少程序员排错的时间!因为Emacs太优秀了,因此,很多人便直接向他购买。
此时因特网尚未流行,所以,史托曼便借着Emacs以磁带出售,赚了一点钱,从而开始全力编写其他软件,并且成立自由软件基金会(Free Software Foundation,FSF),请更多工程师与志愿者来编写软件。终于还是完成了GCC,这比Emacs还更有帮助!此外,他还编写了更多可以被调用的 C 函数库(GNU C Library),以及可以被用来操作操作系统的基本接口 bash shell。这些都在 1990 年左右完成。
如果纯粹使用文本编辑器来编辑程序的话,那么程序语法如果写错时,只能利用编译时发生的错误信息来修订了,这样实在很没有效率。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的出现。更多的FSF开发的软件可以参考如下网页:
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操作系统当中!
为什么称图形用户界面为X呢?因为由英文单字来看,Window中的字母W下面接着的就是字母X。意指Window的下一版!需注意的是,X Window并不是X Windows!
1991 年:芬兰大学生Linus Torvalds 的一则消息
到了 1991 年,芬兰的赫尔辛基大学的 Linus Torvalds 在 BBS 上面贴了一则消息,宣称他以bash, gcc 等工具写了一个小小的内核程序,这个内核程序可以在 Intel 的 386 机器上面运行,让很多人很感兴趣,从此开始了Linux不平凡的旅程!
1.1.3 关于GNU项目
GNU项目对于整个自由软件来说是占有非常重要的角色。下面我们就来谈谈吧!
自由软件的活动
1984年创立GNU项目与FSF基金会的史托曼先生认为,编写程序最大的快乐就是让自己开发的好软件可供大家来使用。既然程序是想要分享给大家使用的,不过,每个人所使用的计算机软硬件并不相同,那么该程序的源码(Source code)就应该要同时发布,这样才能方便大家修改而适用于每个人的计算机中。这个将源码连同软件程序释出的举动,就称为自由软件(Free Software)运动!
此外,史托曼同时认为,如果你将你程序的 Source code 分享出来时,若该程序是很优秀的,那么将会有很多人使用,而每个人对于该程序都可以查阅 source code,无形之中,就会有很多人帮你排错了!你的这个程序将会越来越壮大,越来越优秀。
自由软件的版权GNU GPL
为了避免自己的开发出来的 Open source 自由软件被拿去做成商业软件,于是 Stallman 同时将GNU与FSF开发出来的软件都挂上GPL的版权声明,这个FSF的内核观念是:版权制度是促进社会进步的手段,版权本身不是自然权力。对于FSF有兴趣或者对于GNU想要更深入地了解的,请参考朝阳科技大学洪朝贵教授的网站 http://people.ofset.org/~ckhung/a/c_83.php,或直接去GNU官网(http://www.gnu.org),里面有更为深入的解说。
为什么要称为GNU 呢?其实GNU是GNU's Not UNIX 的缩写,意思是说,GNU 并不是UNIX。那么GNU 又是什么呢?就是GNU's Not UNIX。如果你写过程序就会知道,这个GNU = GNU's Not UNIX 可是无穷循环。
另外,什么是Open Source呢?所谓的Source是程序开发者编写出的源程序代码,OpenSource就是,软件在发布时,同时将作者的源代码一起公布的意思。
自由(Free)的真谛
那么这个 GPL(GNU General Public License)是什么呢?为什么要将自由软件挂上 GPL 的“版权声明”呢?这个版权声明对于作者有何好处?首先,史托曼对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授权。
单纯销售:你不能单纯销售自由软件。
也就是说,既然GPL是站在互助互利的角度上去开发的,你自然不应该将大家的成果占为己有,因此你不可以将一个GPL软件的授权取消,即使你已经对该软件进行大幅度的修改。那么自由软件也不能销售吗?当然不是!还记得上一个小节里面,我们提到史托曼通过销售Emacs 取得一些经费。自由软件是可以销售的,不过,不可仅销售该软件,应同时搭配售后服务与相关手册一起提供,这些可就需要工本费了呢!
自由软件与商业行为
很多人还是有疑问,目前不是有很多Linux开发商吗?为何他们可以销售Linux这个GPL授权的软件?原因很简单,因为他们大多都是销售“售后服务”,所以,他们所使用的自由软件都可以在他们的网站上面下载(当然,每个厂商他们自己开发的工具软件就不是GPL 的授权软件了)。但是,你可以购买他们的 Linux 光盘,如果你购买了光盘,他们会提供相关的手册说明文件,同时也会提供你数年不等的咨询、售后服务、软件升级与其他协力工作等的附加价值!
所以说,目前自由软件工作者,他们所赖以维生的几乎都是在“服务”这个领域。毕竟自由软件并不是每个人都会编写,有人需要你的自由软件时,他就会请求你的协助,此时,你就可以通过服务来收费了。这样来说,自由软件确实还是具有商业空间的!
很多人对于GPL授权一直很疑惑,对于GPL的商业行为更是无法接受!关于这一点,鸟哥在这里还是要再次声明,GPL是可以从事商业行为的。而很多的作者也是借由这些商业行为来得以取得生活所需,更进一步去开发更优秀的自由软件。千万不要听到“商业”就排斥。这对于开发优良软件的朋友来说,是不礼貌的。
上面提到的大多是与用户有关的项目,那么GPL对于自由软件的作者有何优点呢?大致的优点有这些:
软件安全性较佳;
软件执行性能较佳;
软件排错时间较短;
贡献的源码永远都存在。
这是因为既然是 Open Source 的自由软件,那么你的程序代码将会有很多人帮你查阅,如此一来,程序的漏洞与程序的优化将会进展得很快。所以,在安全性与性能上,自由软件一点都不输给商业软件。此外,因为GPL授权当中,修改者并不能修改授权,因此,你如果曾经贡献过程序代码,你将名留青史。
对于程序开发者来说,GPL 实在是一个非常好的授权,因为大家可以互相学习对方的程序编写技巧,而且自己写的程序也有人可以帮忙排错。那你会问的,对于我们这些广大的终端用户,GPL 有没有什么好处呢?当然有!虽然终端用户或许不会自己编译程序代码或者是帮人家排错,但是终端用户使用的软件绝大部分就是GPL的软件,全世界有一堆的工程师在帮你维护你的系统,这难道不是一件非常棒的事吗?
1.2 Torvalds的Linux 开发
我们前面一节当中,提到了UNIX的历史,也提到了Linux是由芬兰人Torvalds所开发的。那么为何托瓦兹可以开发Linux呢?凭空想象而来的,还是有什么渊源?这里我们就来谈一谈!
1.2.1 Minix
Linus Torvalds(托瓦兹, 1969 年出生)的外祖父是赫尔辛基大学的统计学家,他的外祖父为了让自己的小孙子能够学点东西,所以从小就将托瓦兹带到身边来管理一些微计算机。在这个时期,托瓦兹接触了汇编语言(Assembly Language),那是一种直接与芯片“对谈”的程序语言,也就是低级语言,必须要很了解硬件的架构,否则很难以汇编语言编写程序的。
在1988 年间,托瓦兹顺利进入了赫尔辛基大学,并选读了计算机科学系。在就学期间,因为学业的需要与自己的兴趣,托瓦兹接触到了UNIX这个操作系统。当时整个赫尔辛基只有一部最新的UNIX系统,同时仅提供 16 个终端机。还记得我们上一节刚才提过的,早期的计算机仅有主机具有运算功能,终端机仅负责提供输入/输出而已。在这种情况下,实在很难满足托瓦兹的需求,因为光是等待使用UNIX的时间,就很耗时,为此,他不禁想到:“我何不自己搞一部UNIX来玩?”不过,就如同Stallman当初的GNU项目一样,要写内核程序,谈何容易?
不过,幸运之神并未背离托瓦兹,因为不久之后,他就知道有一个类似UNIX的系统,并且与UNIX完全兼容,还可以在 Intel 386 机器上运行的操作系统,那就是我们上一节提过的,谭宁邦教授为了教育需要而编写的 Minix 系统!他在购买了最新的 Intel 386 的个人计算机后,就立即安装了 Minix 这个操作系统。另外,上个小节当中也谈到,Minix 这个操作系统是有附上源码的,所以托瓦兹也经由这个源码学习到了很多的内核程序设计的设计概念!
1.2.2 对386 硬件的多任务测试
事实上,托瓦兹对于个人计算机的CPU其实并不满意,因为他之前接触的计算机都是工作站型的计算机,这类计算机的CPU特点就是可以进行“多任务处理”的能力。什么是多任务呢?理论上,一个CPU在一个时间内仅能进行一个程序,那如果有两个以上的程序同时出现到系统中呢?举例来说,你可以在现今的计算机中同时开启两个以上的办公软件,例如电子表格与文字处理软件。这个同时打开的操作代表着这两个程序同时要交给CPU来处理。
CPU在一个时间点内仅能处理一个程序,那怎么办?没关系,这个时候如果具有多任务能力的CPU就会在不同的程序间切换。还记得前一章谈到的CPU频率吧?假设CPU频率为1GHz的话,那表示CPU一秒钟可以进行109次工作。假设CPU对每个程序都只进行1000次运行周期,然后就得要切换到下个程序的话,那么CPU一秒钟就能够切换106次呢!(当然,切换工作这件事情也会花去一些CPU时间,不过这里暂不讨论。)这么快的处理速度下,你会发现,两个程序感觉上几乎是同步在进行的!
为什么有的时候我同时开两个文件(假设为A、B文件)所花的时间要比开完A再去开 B 文件的时间还要多?现在是否稍微可以理解?因为如果同时打开的话,CPU 就必须要在两个工作之间不停地切换,而切换的动作还是会耗去一些 CPU 时间的。所以,同时打开两个以上的工作在一个 CPU 上,要比一个一个地执行还要耗时一点。这也是为何现在CPU开发商要集成两个CPU于一个芯片中!也是为何在运行情况比较复杂的服务器上需要比较多的CPU负责的原因。
早期 Intel x86 架构计算机不是很受重视的原因,就是因为 x86 的芯片对于多任务的处理不佳, CPU在不同的作业之间切换不是很顺畅。但是这个情况在386计算机推出后有很大的改善。托瓦兹在得知新的386芯片的相关信息后,他认为,以性价比的观点来看,Intel的386相当便宜,所以在性能上略有提高。最终他就贷款去买了一部Intel的386来玩。
早期的计算机性能没有现在这么好,所以压榨计算机性能就成了工程师的一项嗜好!托瓦兹本人早期是编写汇编语言的,汇编语言对于硬件有很密切的关系,托瓦兹自己也说:“我始终是个性能癖”。为了彻底发挥386的性能,托瓦兹花了不少时间在测试386机器上!他的重要测试的是386的多功性能。首先,他写了三个小程序,一个程序会持续输出 A,一个会持续输出 B,最后一个会将两个程序进行切换。他将三个程序同时执行,结果,他看到屏幕上很顺利地一直出现ABABAB…他知道,他成功了,如图1-3所示。
图1-3 386 计算机的多任务测试
要达到多任务(Multi-Tasking)的环境,除了硬件(主要是CPU)需要能够具有多任务的特性外,操作系统也需要支持这个功能。一些不具有多任务特性的操作系统想要同时执行两个程序是不可能的,除非先被执行的程序执行完毕,否则,后面的程序不可能被主动执行。
至于多任务的操作系统中,每个程序被执行时,都会有一个最大CPU使用时间,若该工作运作的时间超过这个CPU使用时间时,该工作就会先被丢出CPU的运作中,而再度进入内核工作调度中等待下一次被CPU取用来运作。
这有点像在开记者会,主持人(CPU)会问:“谁要发问?”一群记者(工作程序)就会举手(看谁的工作重要),先举手的自然就被允许发问,问完之后,主持人又会问一次谁要发问,当然,所有人(包括刚才那个记者)都可以举手!如此一次一次地将工作给他完成,多任务的环境对于复杂的工作情况帮助很大。
1.2.3 初次释出 Linux 0.02
探索完了 386 的硬件之后,终于拿到 Minix 并且安装在托瓦兹的 386 计算机上之后,托瓦兹跟BBS上面那些工程师一样,他发现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 :-)
他说,他完成了一个小的操作系统,这个内核是用在386机器上的,同时,他真的仅是好玩,并不是想要做一个跟 GNU 一样大的项目!另外,他希望能够得到更多人的建议与回馈来开发这个操作系统!这个概念跟 Minix 刚好背道而驰呢!这则新闻引起很多人的注意,他们也去托瓦兹提供的网站上下载了这个内核来安装。有趣的是,因为托瓦兹放置内核的那个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)所发布的一项标准!
这个正确的决定让Linux在起步的时候体质就比别人优良,因为POSIX标准主要是针对UNIX与一些软件运行时候的标准规范,只要依据这些标准规范来设计的内核与软件,理论上,就可以搭配在一起执行了。而Linux的开发就是依据这个POSIX的标准规范,UNIX上的软件也是遵循这个规范来设计的,如此一来,让Linux很容易就与UNIX兼容共享互有的软件了。同时,因为Linux直接放置在网络上供大家下载,所以在运行的速度上相当快,导致Linux的使用率大增,这些都是造成Linux大受欢迎的重要因素!
1.2.4 Linux的开发:虚拟团队的产生
Linux能够成功,除了托瓦兹个人的理念与力量之外,其实还有个最重要的团队!
单一个人维护阶段
Linux虽然是托瓦兹发明的,而且内容还绝不会涉及专利软件的版权问题。不过,如果单靠托瓦兹自己一个人的话,那么Linux要茁壮实在很困难,因为一个人的力量是很有限的。好在托瓦兹选择Linux的开发方式相当务实!首先,他将发布的Linux内核放置在FTP上面,并告知大家新的版本信息,等到用户下载了这个内核并且安装之后,如果发生问题,或者是由于特殊要求需要某些硬件的驱动程序,那么这些用户就会主动反馈给托瓦兹。在托瓦兹能够解决的问题范围内,他都能很快速地进行Linux内核的更新与排错。
广大志愿者加入阶段
不过,托瓦兹总是有些硬件无法取得,那么他当然无法帮助进行驱动程序的编写与相关软件的改良。这个时候,就会有些志愿者站出来说:“这个硬件我有,我来帮忙写相关的驱动程序。”因为 Linux 的内核是 Open Source 的,志愿者很容易就能够跟随 Linux 的原本设计架构,并且写出兼容的驱动程序或者软件。志愿者写完的驱动程序与软件托瓦兹是如何看待的呢?首先,他将该驱动程序/软件带入内核中,并且加以测试。只要测试可以运行,并且没有什么主要的大问题,那么他就会很乐意将志愿者写的程序代码加入内核中!
总之,托瓦兹是个很务实的人,对于Linux内核所欠缺的项目,他总是持“先求有且能运行,再求进一步改善”的心态!这让Linux用户与志愿者得到相当大的鼓励!因为Linux的进步太快了。用户要求虚拟内存,结果不到一个星期推出的新版Linux就有了!这不得不让人佩服!
另外,因为这种随时都有程序代码加入的状况,于是Linux便逐渐开发成具有模块的功能。即是将某些功能独立于内核外,在需要的时候才加载到内核中。如此一来,如果有新的硬件驱动程序或者其他协议的程序代码进来时,就可以模块化,大大增加了Linux内核的可维护能力!
内核是一组程序,如果这组程序每次加入新的功能都得要重新编译与改版的话会变成如何?想象一下,如果你只是换了显卡就得要重新安装新的 Windows 操作系统,会不会傻眼?模块化之后,原本的内核程序不需要变动,你可以直接将它想成是“驱动程序”即可!
内核功能细部分工开发阶段
后来,因为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的吉祥物。
奇怪的是,托瓦兹是因为小时候去动物园被企鹅咬了一口念念不忘,而正式的2.0推出时,大家要他想一个吉祥物。他在想不出什么动物的情况下,就将这个念念不忘的企鹅当成了Linux的吉祥物了。
Linux由于托瓦兹是针对386机器写的,跟386硬件的相关性很强,所以,早期的Linux确实是不具有移植性的。不过,大家知道 Open Source 的好处就是,可以修改程序代码去适合作业的环境。因此,在1994年以后,Linux便被开发到很多的硬件上面去了!目前除了x86之外,IBM、HP、Sun等公司的硬件也都有被Linux所支持。
1.2.5 Linux 的内核版本
Linux的内核版本编号有点类似如下的样子:
2.6.18-92.el5
主版本.次版本.释出版本-修改版本
如前所述,因为对于Linux内核的开发者太多了,以至于造成Linux内核经常性的变动。但对于一般家庭计算机或企业单位应用的话,常变动的内核并不适合。因此托瓦兹便将内核的开发趋势分为两股,并根据这两个内核的开发分别给予不同的内核编号,那就是:
主、次版本为奇数:开发中版本(development)
如2.5.xx,这种内核版本主要用在测试与开发新功能,所以通常这种版本仅有内核开发工程师会使用。如果有新增的内核程序代码,会加到这种版本当中,等到众多工程师测试没问题后,才加入下一版的稳定内核中。
主、次版本为偶数:稳定版本(stable)
如2.6.xx,等到内核功能开发成熟后会加到这类的版本中,主要用在一般家庭计算机以及企业版本中。重点在于提供用户一个相对稳定的Linux作业环境平台。
至于释出版本则是在主、次版本架构不变的情况下,新增的功能累积到一定的程度后所新释出的内核版本。而由于Linux内核是使用GPL的授权,因此大家都能够进行内核程序代码的修改。因此,如果你有针对某个版本的内核修改过部分的程序代码,那么那个被修改过的新的内核版本就可以加上修改版本了。
Linux内核版本与distribution版本(下个小节会谈到)并不相同,很多朋友常常上网问到:“我的Linux是9.x版,请问”之类的留言,这是不对的提问方式,因为Linux版本指的应该是内核版本,而目前最新的内核版本应该是2.6.30(2009/08)才对,并不会有9.x的版本出现的。
你常用的Linux系统则应该说明为distribution才对。因此,如果以CentOS这个distribution来说,你应该说:“我用的Linux是CentOS这个distribution,版本为5.x版,请问”才对!
当你有任何问题想要在Linux论坛发言时,请务必仔细地说明你的distribution版本,因为各家distributions使用的都是Linux内核,不过每家distributions所选用的软件以及他们自己开发的工具并不相同,多少还是有点差异,所以留言时得要先声明distribution的版本才行。
1.2.6 Linux distributions
好了,经过上面的说明,我们知道了Linux其实就是一个操作系统最底层的内核及其提供的内核工具。它是GNU GPL授权模式,所以,任何人均可取得源码与可执行这个内核程序,并且可以修改。此外,因为Linux参考POSIX设计规范,因此兼容于UNIX操作系统,故亦可称之为UNIX Like的一种。
鸟哥曾在上课的时候问过同学:“什么是UNIX Like 啊”?可爱的同学们回答是:“就是很喜欢(Like)UNIX啦!”坃 rz……那个like 是“很像”啦!所以UNIX Like是“很像UNIX的操作系统”。
可完全安装的Linux发布套件
Linux的出现让GNU项目开发者放下了心里的一块大石头,因为GNU一直以来就是缺乏了内核程序,导致他们的GNU自由软件只能在其他的UNIX上运行。既然目前有Linux出现了,且Linux也用了很多的GNU相关软件,所以Stallman认为Linux的全名应该为GNU/Linux呢!不管怎么说,Linux实在很不错,让GNU软件大多以Linux为主要操作系统来进行开发,此外,很多其他的自由软件团队,例如 sendmail, wu-ftp, apache 等也都有以 Linux 为开发测试平台的项目出现!如此一来,Linux除了主要的内核程序外,可以在Linux上运行的软件也越来越多,如果有心,就能够将一个完整的Linux操作系统搞定了!
虽然由Torvalds负责开发的Linux仅具有Kernel与Kernel提供的工具,不过,如上所述,很多的软件已经可以在 Linux 上运行了,因此,“Linux + 各种软件”就可以完成一个相当完整的操作系统了。不过,要完成这样的操作系统还真难,因为Linux早期都是由黑客工程师所开发维护的,他们并没有考虑到一般用户的能力。
为了让用户能够接触到 Linux,于是很多的商业公司或非营利团体就将 Linux Kernel(含 tools)与可运行的软件集成起来,加上自己具有创意的工具程序,这个工具程序可以让用户以光盘、DVD 或者通过网络直接安装/管理 Linux 系统。这个“Kernel + Softwares + Tools”的可完全安装的系统,我们称之为Linux distribution,一般中文翻译成可完全安装套件,或者 Linux 发布商套件等,如图1-4所示。
图1-4 Linux 可完全安装发布套件
由于Linux内核是由黑客工程师写的,要由源码安装到x86计算机上面成为可以执行的二进制文件,这个过程可不是人人都会的,所以早期确实只有工程师对Linux有兴趣。一直到一些团队与商业公司将Linux内核配合自由软件,并提供完整的安装程序,且制成光盘/DVD 后,对于一般用户来说,Linux 才越来越具有吸引力,因为只要一直单击“下一步”就可以将Linux安装完成。
由于 GNU 的 GPL 授权并非不能从事商业行为,于是很多商业公司便专门来销售 Linux distribution。而鉴于 Linux 的 GPL 版权声明,因此,商业公司所销售的 Linux distributions通常也都可以从Internet上来下载。此外,如果你想要其他商业公司的服务,那么直接向该公司购买光盘来安装,也是一个很不错的方式。
各大Linux Distributions 的主要异同:支持标准
不过,由于开发 Linux distributions 的团队与公司实在太多了,例如在中国有名的 Red Hat, SuSE, Ubuntu, Fedora, Debian 等,所以很多人都很担心,如此一来每个 distribution 是否都不相同呢?这就不需要担心了,因为每个 Linux distributions 使用的 kernel 都是http://www.kernel.org所发布的,而他们所选择的软件几乎都是目前很知名的软件,重复性相当高,例如网页服务器的 Apache、电子邮件服务器的 Postfix/sendmail、文件服务器的Samba等。
此外,为了让所有的 Linux distributions 开发不至于差异太大,且让这些开发商在开发的时候有所依据,还有Linux Standard Base(LSB)等标准来规范开发者,以及目录架构的File system Hierarchy Standard(FHS)标准规范,它们的唯一差别可能就是该开发者自家所开发出来的管理工具以及套件管理的模式。所以说,基本上,每个 Linux distributions 除了架构的严谨度与选择的套件内容外,其实差异并不太大。大家可以选择自己喜好的distribution来安装即可!
FHS: http://www.pathname.com/fhs/
LSB: http://www.linuxbase.org/
事实上鸟哥认为distributions主要分为两大系统,一种是使用RPM方式安装软件的系统,包括Red Hat, Fedora, SuSE等都是这类; 一种则是使用Debian的dpkg方式安装软件的系统,包括Debian, Ubuntu, B2D等。
下面列出几个主要的 Linux distributions 发行者网址:
Red Hat: http://www.redhat.com
Fedora: http://fedoraproject.org/
Mandriva: http://www.mandriva.com
Novell SuSE: http://www.novell.com/linux/
Debian: http://www.debian.org/
Slackware: http://www.slackware.com/
Gentoo: http://www.gentoo.org/
Ubuntu: http://www.ubuntu.com/
CentOS: http://www.centos.org/
到底是要买商业版还是团队版的Linux distribution呢?如果是要装在个人计算机上面作为桌面计算机用的,建议使用团队版,包括Fedora, Ubuntu, OpenSuSE 等。如果是用在服务器上面的,建议使用商业版本,包括Red Hat, SuSE 等。这是因为团队版通常开发者会加入最新的软件,这些软件可能会有一些bug存在。至于商业版则是经过一段时间的磨合后,才将稳定的软件放进去。
举例来说,Fedora发出来的软件套件经过一段时间的维护后,等到该软件稳定到不容易发生错误后,Red Hat才将该软件放到他们最新的释出版本中。所以,Fedora 的软件经常改版,Red Hat 的软件就较少改版。
Linux在中国
当然发行套件者不仅于此。但是值得大书特书的是中文Linux的延伸项目—CLE这个套件!早期的Linux因为是工程师开发的,而这些工程师大多以英文语系的国家为主,所以Linux对于国人的学习是比较困扰一点。中国的Linux爱好者做了很多汉化方面的工作,例如在中国台湾地区发起的CLE项目(http://cle.linux.org.tw/)开发了很多的中文套件及翻译了很多的英文文件,使得我们目前得以使用中文的Linux呢。
http://freesf.tnc.edu.tw/index.php
此外,如果只想看看 Linux 的话,还可以选择可光盘开机进入 Linux 的 Live CD 版本,即是KNOPPIX 这个 Linux distributions 呢!
中文 KNOPPIX: http://knoppix.tnc.edu.cn/
对于没有额外的硬盘或者是没有额外的主机的朋友来说,KNOPPIX 这个可以利用光盘开机而进入Linux操作系统的Live CD 真的是一个不错的选择!你只要下载了KNOPPIX的镜像文件,然后将它刻录成为 CD,放入你主机的光驱,并在 BIOS 内设置光盘为第一个开机选项,就可以使用Linux系统了呢!
如果你还想要知道更多的 Linux distributions 的下载与使用信息,可以参考:
选择适合你的Linux distribution
那我到底应该要选择哪一个distributions?就如同我们上面提到的,其实每个distributions差异性并不大!不过,由于套件管理的方式主要分为 Debian 的 dpkg 及 Red Hat 系统的 RPM方式,目前鸟哥的建议是,先学习以RPM套件管理为主的RHEL/Fedora/SuSE/CentOS等中国用户较多的版本,这样一来,发生问题时,可以提供解决的渠道比较多。如果你已经接触过Linux了,还想要探讨更严谨的Linux版本,那可以考虑使用Debian,如果你是以性能至上来考虑,那么Gentoo是不错的建议!
总之,版本很多,但是各版本差异其实不大,建议你一定要先选定一个版本后,从头彻尾地了解它,那再继续使用其他的版本时,就可以很快进入状况。鸟哥的网站仅提供一个版本,不过是以比较基础的方式来介绍的,因此,如果好好学习这个网站的话,哪一个distributions对你来说都不成问题!
不过,如果依据计算机主机的用途来分的话,在国内鸟哥会这样建议。
用于企业环境:建议使用商业版本,例如 Red Hat 的 RHEL 或者是 Novell 的 SuSE都是很不错的选择!毕竟企业的环境强调的是连续的经营,你可不希望网管人员走了之后整个机房的主机都没有人管理。由于商业版本都会提供客户服务,所以可以降低企业的风险!
用于个人或教学的服务器环境:要是你的服务器所在环境如果宕机还不会造成太大的问题的话,加上你的环境是在教学的场合当中时那么可以使用“号称”完全兼容商业版 RHEL 的CentOS。因为 CentOS 是抓 RHEL 的源码来重新兜起来的一个 Linux distribution,所以号称兼容于RHEL。这一版的软件完全与RHEL相同,改版的幅度较小,适合于服务器系统的环境。
用于个人的桌面计算机:想要尝鲜吗?建议使用很炫的Fedora/Ubuntu等Desktop(桌面环境)使用的版本!如果不想要安装 Linux的话,那么 Fedora 或 CentOS 也有推出 Live CD 了!也很容易学习的!
1.3 Linux的特色
Linux是Torvalds先生所开发出来的,基于GPL的版权声明之下,可以在x86的架构下运行,也可以被移植到其他的大型主机上面。由于开发的相关理念与兼容的问题,因此,我们也可以称 Linux为 UNIX Like 操作系统的一种。
其实 UNIX Like 可以说是目前服务器类型的操作系统的统称!因为不论是 FreeBSD,BSD, Sun UNIX, HP UNIX, Red Hat Linux, Mandrake Linux等,都是由同一个祖先Thompson所写的“UNIX”来的,因此,这些都被统称为UNIX Like的操作系统!
1.3.1 Linux 的特色
那么这个系统有什么特异功能呢?简单地说,有以下几点。
自由与开放的使用与学习环境
由于 Linux 是基于 GPL 的授权之下,因此它是自由软件,也就是任何人都可以自由使用或者是修改其中的源码的意思!这种开放性架构对科学界来说是相当重要的!因为很多的工程师由于特殊的需求,经常需要修改系统的源码,使该系统可以符合自己的需求。而这个开放性的架构将可以满足各不同需求的工程师。因此当然就有可能越来越流行。以鸟哥来说,目前环境工程界的空气质量模式最新版Models-3/CMAQ就是以Linux为基准平台设计的呢!
配备需求低廉
Linux可以支持个人计算机的x86架构,系统资源不必像早先的UNIX系统那般,仅适合于单一公司所出产的设备。单就这一点来看,就可以造成很大的流行度。不过,如果你想要在Linux下执行 X Window 系统,那么硬件的等级就不能太低了!
内核功能强大而稳定
而且由于Linux功能并不会输给一些大型的UNIX工作站,因此,近年来越来越多的公司或者是团体、个人投入这一个操作系统的开发与整合工作。例如IBM与Sun公司都有推出x86的Linux服务器呢!
独立作业
另外,由于很多的软件套件逐渐被这套操作系统拿来使用,而很多套件软件也都在Linux这个操作系统上面进行开发与测试,因此,Linux近来已经可以独立完成几乎所有的工作站或服务器的服务了,例如 Web, Mail, Proxy, FTP 等。
目前Linux已经是相当成熟的一套操作系统!而且不耗资源又可以自由取得!可以说给微软造成相当大的压力!此外,由于它的系统硬件要求很低,加上目前很多的人由于“Intel的阴谋”而造成手边有相当多的淘汰掉的硬件配备,Linux 在这些被淘汰的硬件中就可以执行得相当顺畅与稳定!因此也造成相当多朋友的关注!
这些造成Linux成为最近几年来最受瞩目的操作系统之一,如前所述,它会受到瞩目的原因主要是因为它是“Free”的,就是可以自由取得的操作系统!然后它是开放性的系统,也就是你可以随时取得程序的源码,这对于程序开发工程师是很重要的。而且,虽然它是Free的自由软件,不过功能却很强大!另外,Linux对于硬件的需求是很低的,这一点更是造成它流行的主因,因为硬件的更换率太快了,所以很多人手边都有一些很少在用的零件,这些零件组装一下就可以用来运行 Linux 了,反正做一个工作站又不使用到屏幕(只要主机就可以),因此 Linux就越来越流行!
也就是因为Linux具有硬件需求低、架构开放、系统稳定性及保密性功能够强、完全免费的优点,所以造成一些所谓“反微软联盟”的程序设计高手不断开发新软件,以与微软进行抗衡!
1.3.2 Linux 的优缺点
那干嘛要使用Linux作为我们的主机系统呢?这是因为Linux有下面这些优点。
稳定的系统
Linux本来就是基于UNIX的概念而开发出来的操作系统,因此,Linux具有与UNIX系统相似的程序接口和操作方式,当然也继承了UNIX稳定并且有效率的特点。安装Linux的主机连续运行一年以上而不曾宕机、不必关机是很平常的事。
免费或少许费用
由于Linux是基于GPL 授权下的产物,因此任何人皆可以自由取得 Linux,至于一些“安装套件”的发行者,他们发行的安装光盘也仅需要些许费用即可获得!不同于UNIX需要负担庞大的版权费用,当然也不同于微软需要不断更新你的系统,并且缴纳大量费用!
安全性、漏洞的快速修补
如果你常玩网络的话,那么你最常听到的应该是“没有绝对安全的主机”。没错。不过 Linux由于支持者众多,有相当多的热心团体、个人参与其中的开发,因此可以随时获得最新的安全信息,并随时更新,相对较安全!
多任务、多用户
与Windows系统不同的,Linux主机上可以同时允许多人上线来工作,并且资源的分配较为公平,比起 Windows 的单人多任务系统要稳定得多!这种多用户、多任务可是 UNIX Like 上面相当好的一个功能,怎么说呢?你可以在一部Linux主机上面规划出不同等级的用户,而且每个用户登录系统时的工作环境都可以不相同,此外,还可以允许不同的用户在同一个时间登录主机,以同时使用主机的资源。
用户与用户组的规划
在Linux的机器中,文件的属性可以分为可读、可写、可执行等参数来定义一个文件的适用性,此外,这些属性还可以分为三个种类,分别是文件拥有者、文件所属用户组、其他非拥有者与用户组者。这对于项目或者其他项目开发者具有相当良好的系统保密性。
相对比较不耗资源的系统
Linux 只要一部 P III 以上等级的计算机就可以安装并且使用顺畅。还不需要到 P 4 或 AMD K8等级的计算机呢!不过,如果你要架设的是属于大型的主机(服务上百人以上的主机系统),那么就需要比较好一点的机器了。不过,目前市面上任何一款个人计算机均可以达到这一个要求!
适合需要小内核程序的嵌入式系统
由于Linux只要几百KB不到的程序代码就可以完整驱动整个计算机硬件并成为一个完整的操作系统,因此相当适合于目前家电或者是小电子用品的操作系统,即嵌入式系统。Linux真的是很适合例如手机、数字相机、PDA、家电用品等操作系统!
整合度佳且多样的图形用户界面(GUI)
自从 1994 年Linux 1.0 后就加入的 X Window 系统,在众多黑客的努力之下终于与 Linux 有高度整合,且主要的显卡厂商(Intel, NVidia, ATI 等)都有针对 Linux 推出最新的驱动程序,因此Linux的GUI已经有长足的进步了。另外,Linux环境下的图形界面不只有一种呢!包括大家耳熟能详的KDE(http://www.kde.org/)以及GNOME(http://www.gnome.org)都是很常见的!
反正Linux好处说不完啦!不过虽然Linux具有这样多的好处,但是它先天上有一个足以致命的地方,使它的普及率受到很大的限制,就是Linux需要使用“命令行”的终端机模式进行系统的管理!虽然近年来有很多的图形界面开发使用在Linux上面,但毕竟要熟悉Linux还是以命令行来使用是比较好的,因此要接受Linux的玩家必须比较要能熟悉对计算机下命令的行为,而不是用鼠标点一点图标(icon)就行了。Linux还可以改进的地方有以下几点。
没有特定的支持厂商
因为在Linux上面的所有套件几乎都是自由软件,而每个自由软件的开发者可能并不是公司团体,而是非营利性质的团体。如此一来,在你Linux主机上面的软件若发生问题,该如何是好?好在由于目前 Linux 商业界的整合还不错,目前在中国比较著名的 Red Hat 与 SuSE 均设立了服务点。你可以经由这个服务点来直接向他们购买/咨询相关的软硬件问题呢!不过,如果你没有选择有专门商业公司的Linux distributions时?怎么办?没有专人上门服务也不需要太担心,因为拜网络风行之赐,你要问的问题几乎在网络上都可以找到答案。看你有没有用心去找就是了!
游戏的支持度不足
在现代这个时候,敢说你们家的桌面计算机里面完全没有游戏的用户应该不多了!游戏软件也是个应用程序,所以它与操作系统的关系就相当密切了。可惜的是目前很多游戏开发商并没有在Linux平台上面开发大型游戏,这间接导致Linux无法进入一般家庭。
专业软件的支持度不足
这是鸟哥到学校教书后才发现的一件事,目前很多专业绘图软件公司所推出的专业软件并不支持Linux操作系统,这让同学很难在不同的平台上面操作相同的软件。很伤脑筋!
老实说,这些缺点绝大部分都不是 Linux 本身的问题,倒是一些商业方面的考虑才是最大的困扰。不过,Linux与其他的操作系统一样,就是一个工具而已!希望大家能够在快乐中学习到Linux的精髓。
1.3.3 关于授权
现在市面上有好多的软件,有的是自由软件,有的是专利软件。有的专利软件免费,有的自由软件要钱。好烦啊!怎么分辨这些东西?其实,鸟哥并不是律师,对于法律也不十分懂,不过,还是有几个授权模式可以来谈一谈。
Open Source(开放源码)
软件以 Open Source 的方式发布时,表示除了可执行的软件本身外,一定伴随着源码的释出。通常 Open Source 的软件有几个好处:
1.程序员通常会等到程序成熟之后才会发布(免得被笑),所以通常程序在雏形的时候,就已经具有相当的优良体质。
2.Open Source 的精神,相信当程序原设计人将程序源码释出之后,其他的程序员接受这份源码之后,由于需要将程序改成自己所需的样式,所以会经由本身的所学来加以改善,并从中加以改善与排错,所以程序的调试功能会比传统的 Close Source 来得快!
3.由于程序是伴随源码的,因此,系统将会不易存在鲜为人知的木马程序或一些安全漏洞,相对而言,会更加安全!
Open Source 的代表授权为 GNU 的 GPL授权及 BSD 等,下面列出知名的 Open Source 授权网页:
GNU General Public License
http://www.gnu.org/licenses/licenses.html#GPL
目前有 Version 2, Version 3 两种版本,Linux 使用的是 Version 2 这一版。鸟哥也有收集一份 GPL Version 2 的中文化条文,你可以参考:
http://linux.vbird.org/linux_basic/1010appendix_A.php
Berkeley Software Distribution(BSD)
http://en.wikipedia.org/wiki/BSD_license
使用 BSD Source Code 最常接触到的就是 BSD 授权模式了!这个授权模式其实与 GPL很类似,而其精神也与 Open Source 相呼应呢!
Apache License, Version 2.0
http://www.apache.org/licenses/LICENSE-2.0
Apache 是一种网页服务器软件,这个软件的发布方式也是使用 Open Source 的。只是在Apache的授权中规定,如果想要重新发布此软件时(如果你有修改过该软件),软件的名称依旧需要定名为Apache才行!
Close Source
相对于 Open Source 的软件会释出源码,Close Source 的程序则仅推出可执行的二进制程序而已。这种软件的优点是有专人维护,你不需要去改动它;缺点则是灵活度大打折扣,用户无法更改该程序成为自己想要的样式!此外,若有木马程序或者安全漏洞,将会花上相当长的一段时间来排错!这也是所谓商业软件(Copyright)常见的软件出售方式。
虽然商业软件常常代表就是需要花钱去购买,不过有些商业软件还是可以免费提供大众使用的。免费的商业软件代表的授权模式有:
Freeware
http://en.wikipedia.org/wiki/Freeware
不同于 Free Software,Freeware 为“免费软件”而非“自由软件”!虽然它是免费的软件,但是不见得要公布其源码,得看发布者的意见!这是与 Open Source 不太相同的东西!此外,目前很多标榜免费软件的程序很多都有小问题!例如假借免费软件的名义,实施用户数据窃取的目的!所以来路不明的软件请勿安装!
Shareware
http://en.wikipedia.org/wiki/Shareware
共享软件这个名词就有趣了!与免费软件有点类似的是,Shareware 在使用初期,它也是免费的,但是,到了试用期限之后,你就必须要选择付费后继续使用或者将它移除。通常,这些共享软件都会自行编写失效程序,让你在试用期限之后就无法使用该软件。
1.4 重点回顾
计算机主要以二进制作为单位,而目前常用的磁盘容量单位为 B,其单位换算为 1B = 8bit,其他的以1024为其倍数,如1GB=1024MB等。
操作系统(Operation System)主要用于管理与驱动硬件,因此必须要能够管理内存、管理设备、负责进程管理以及系统调用等。因此,只要能够让硬件准备妥当(Ready)的情况,就是一个很棒的操作系统了。
操作系统重点仅在驱动与管理硬件,而要使用硬件时,就得需要通过应用软件或者是shell的功能,来调用操作系统操纵硬件工作。因此,目前操作系统除了上述功能外,通常已经包含了日常工作所需要的应用软件在内了。
UNIX 的前身是由贝尔实验室(Bell Lab.)的 Ken Thompson 利用汇编语言写成的,后来在 1971~1973 年间由 Dennis Ritchie 以 C 程序语言进行改写,才称为 UNIX。
1977 年由 Bill Joy 释出 BSD (Berkeley Software Distribution),这些称为 UNIX like 的操作系统。
1984 年由 Andrew Tannenbaum 制作出 Minix 操作系统,该系统可以提供源码以及软件。
1984 年由 Richard Stallman 提倡 GNU 项目,倡导自由软件(Free Software),强调其软件可以自由地取得、复制、修改与再发行,并规范出GPL授权模式,任何GPL(General Public License)软件均不可单纯仅销售其软件,也不可修改软件授权。
1991 年由芬兰人 Linus Torvalds 开发出 Linux 操作系统。简而言之,Linux 成功的地方主要在于Minix(UNIX)、GNU、Internet、POSIX及虚拟团队的产生。
Linux本身就是个了不起的操作系统,其开发网站设立在http://www.kernel.org,我们称Linux操作系统最底层的数据为“内核”(Kernel)。
目前Linux内核的开发分为两种版本,分别是稳定版本的偶数版,如2.6.x,适合于商业与家用环境使用;一种是开发中版本,如2.5.x版,适合开发特殊功能的环境。
Linux distributions 是“Linux Kernel + Free Software + Documentations(Tools)+ 可完全安装的程序”所制成的一套完整的系统。
1.5 本章习题
实践题部分
请依据本章内容的说明,下载 Fedora 最新版本的 Live CD,并将该 Live CD 刻录成为光盘(或DVD)后,调整你的主机 BIOS 成为使用光驱启动,在启动时放入刚才刻录的 Live CD,使用该光驱启动。在开机后你应该能够进入系统。请进入该系统,尝试打开终端机、浏览器等,并尝试操作一下该系统。由于该系统并不会影响到你的硬盘数据,请尽量玩玩!
承上题,打开终端机并且输入“uname -r”这个命令,出现的内核版本是什么?是稳定还是开发中版本?
请上网找出目前Linux内核的最新稳定版与开发中版本的版本号码,请注明查询的日期与版本的对应。
请上网找出 Linux 的吉祥物企鹅的名字,以及最原始的图文界面。(提示:请前往 http://www. linux.org查阅。)
简答题部分
你在你的主机上面安装了一块网卡,但是开机之后,系统却无法使用,你确定网卡是好的,那么可能的问题出在哪里?该如何解决?
我在一部主机上面安装Windows操作系统时,并且安装了显卡的驱动程序,它是没有问题的。但是安装 Linux时,却无法完整显示整个 X Window。请问,我可不可以将 Windows 上面的显卡驱动程序拿来安装在Linux上?
一个操作系统至少要能够完整控制整个硬件,请问操作系统应该要控制硬件的哪些单元?
一GB的硬盘空间等于几KB?
我在Windows上面玩的游戏可不可以拿到Linux去玩?
Linux 本身仅是一个内核与相关的内核工具而已,不过,它已经可以驱动所有的硬件,所以,可以算是一个很阳春的操作系统了。经过其他应用程序的开发之后,被整合成为 Linux distribitions。请问众多的distributions之间有何异同?
UNIX是谁写出来的?GNU项目是谁发起的?
GNU的全名为何?它主要由哪个基金会支持?
何谓多用户(Multi-user)多任务(Multi-task)?
简单说明 GNU General Public License(GPL)与 Open Source 的精神。
什么是POSIX?为何说Linux使用POSIX对于开发有很好的影响?
Linux的开发主要分为哪两种内核版本?
简单说明Linux成功的因素。
1.6 参考数据与扩展阅读
Multics项目网站:http://www.multicians.org/
网络农夫,2001,UNIX简史:
http://netlab.cse.yzu.edu.cn/~statue/freebsd/docs/csh/
Ken Thompson 的个人网站:
http://plan9.bell-labs.com/cm/cs/who/ken/index.html
Dennis Ritchie 的个人网站:http://cm.bell-labs.com/cm/cs/who/dmr/
Richard Stallman 的个人网站:http://www.stallman.org/
GNU项目:http://www.gnu.org
XFree86的网站:http://www.xfree86.org/
洪朝贵老师的GNU/FSF介绍:http://people.ofset.org/~ckhung/a/c_83.php
维基百科对 Linus Torvalds 的介绍:http://en.wikipedia.org/wiki/Linus_Torvalds
POSIX的相关说明:
维基百科:http://en.wikipedia.org/wiki/POSIX
IEEE POSIX 标准:http://standards.ieee.org/regauth/posix/