第一章、Linux是什么
最近更新日期:2009/08/05
1. Linux是什么
1.1 Linux是什么 1.2 Linux之前,Unix的历史 1.3 关于GNU计划 2. Torvalds的Linux发展 2.1 与Minix之间 2.2 对386硬体的多工测试 2.3 初次释出Linux 0.02 2.4 Linux的发展:虚拟团队的产生 2.5 Linux 的核心版本 2.6 Linux distributions 3. Linux的特色 3.1 Linux的特色 3.2 Linux的优缺点 3.3 关于授权 4. 重点回顾 5. 本章习题 6. 参考资料与延伸阅读 7. 针对本文的建议:http://phorum.vbird.org/viewtopic.php?t=23871 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)相当的小而精巧,
所以慢慢的就有相当多的朋友投入这个小东西的研究领域里面去了!
但是为什么这的小东西这么棒呢?又为什么大家都可以免费的下载这个东西呢?
嗯!等鸟哥慢慢的唬xx....喔不!听我慢慢的道来!
早期的电脑并不像现在的个人电脑一样普遍,他可不是一般人碰的起的呢~ 除非是军事或者是高科技用途,或者是学术单位的学术研究,否则真的很难接触到。 非但如此,早期的电脑架构还很难使用,除了运算速度并不快之外,操作介面也很困扰的! 因为那个时候的输入设备只有读卡机、输出设备只有印表机, 使用者也无法与作业系统互动(批次型作业系统)。 在那个时候,写程式是件很可怜的事情,因为程式设计者,必须要将程式相关的资讯在读卡纸上面打洞, 然后再将读卡纸插入读卡机来将资讯读入主机中运算。光是这样就很麻烦了,如果程式有个小地方写错, 哈哈!光是重新打卡就很惨,加上主机少,使用者众多,光是等待,就耗去很多的时间了! 在那之后,由于硬体与作业系统的改良,使得后来可以使用键盘来进行资讯的输入。 不过,在一间学校里面,主机毕竟可能只有一部,如果多人等待使用,那怎么办?大家还是得要等待啊! 好在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的启始开发阶段,可是有很大的关系喔!) 此外,Minux作业系统的开发者仅有谭宁邦教授,因为学者很忙啊!加上谭宁邦始终认为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的软体, 全世界有一大票的工程师在帮你维护你的系统,这难道不是一件非常棒的事吗? ^_^ Torvalds的Linux发展 我们前面一节当中,提到了Unix的历史,也提到了Linux是由Torvalds这个芬兰人所发明的。那么为何托瓦兹可以发明Linux呢?
凭空想像而来的?还是有什么渊源?这里我们就来谈一谈啰! 与Minix之间 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这个作业系统是有附上原始码的, 所以托瓦兹也经由这个原始码学习到了很多的核心程式设计的设计概念喔! 对386硬体的多工测试 事实上,托瓦兹对于个人电脑的CPU其实并不满意,因为他之前碰的电脑都是工作站型的电脑, 这类电脑的CPU特色就是可以进行‘多工处理’的能力。什么是多工呢?理论上, 一个CPU在一个时间内仅能进行一个程式, 那如果有两个以上的程式同时出现到系统中呢?举例来说, 你可以在现今的电脑中同时开启两个以上的办公软体,例如电子试算表与文书处理软体。 这个同时开启的动作代表着这两个程式同时要交给CPU来处理~ 啊!CPU一个时间点内仅能处理一个程式,那怎么办?没关系,这个时候如果具有多工能力的CPU就会在不同的程式间切换~ 还记得前一章谈到的CPU时脉吧?假设CPU时脉为1GHz的话,那表示CPU一秒钟可以进行109次工作。 假设CPU对每个程式都只进行1000次运作周期,然后就得要切换到下个程式的话,那么CPU一秒钟就能够切换106次呢! (当然啦,切换工作这件事情也会花去一些CPU时间,不过这里暂不讨论)。这么快的处理速度下,你会发现, 两个程式感觉上几乎是同步在进行啦!
早期Intel x86架构电脑不是很受重视的原因,就是因为x86的晶片对于多工的处理不佳, CPU在不同的工作之间切换不是很顺畅。但是这个情况在386电脑推出后,有很大的改善。 托瓦兹在得知新的386晶片的相关资讯后,他认为,以性能价格比的观点来看, Intel的386相当的便宜,所以在性能上也就稍微可以将就将就 ^_^。最终他就贷款去买了一部Intel的386来玩。 早期的电脑效能没有现在这么好,所以压榨电脑效能就成了工程师的一项癖好! 托瓦兹本人早期是玩组合语言的,组合语言对于硬体有很密切的关系,托瓦兹自己也说:‘我始终是个性能癖’^_^。 为了彻底发挥386的效能,于是托瓦兹花了不少时间在测试386机器上! 他的重要测试就是在测试386的多功效能。首先,他写了三个小程式,一个程式会持续输出A、一个会持续输出B, 最后一个会将两个程式进行切换。他将三个程式同时执行,结果,他看到荧幕上很顺利的一直出现ABABAB...... 他知道,他成功了! ^_^ 图2.2.1、386电脑的多工测试
初次释出Linux 0.02 探索完了386的硬体之后,终于拿到Minix并且安装在托瓦兹的386电脑上之后,托瓦兹跟BBS上面一堆工程师一样, 他发现Minix虽然真的很棒,但是谭宁邦教授就是不愿意进行功能的加强,导致一堆工程师在作业系统功能上面的欲求不满! 这个时候年轻的托瓦兹就想:‘既然如此,那我何不自己来改写一个我想要的作业系统?’ 于是他就开始了核心程式的撰写了。 撰写程式需要什么呢?首先需要的是能够进行工作的环境,再来则是可以将原始码编译成为可执行档的编译器。 好在有GNU计划提供的bash工作环境软体以及gcc编译器等自由软体, 让托瓦兹得以顺利的撰写核心程式。他参考Minix的设计理念与书上的程式码,然后仔细研究出386个人电脑的效能最佳化, 然后使用GNU的自由软体将核心程式码与386紧紧的结合在一起,最终写出他所需要的核心程式。 而这个小玩意竟然真的可以在386上面顺利的跑起来~还可以读取Minix的档案系统。 真是太好了!不过还不够,他希望这个程式可以获得大家的一些修改建议, 于是他便将这个核心放置在网路上提供大家下载,同时在BBS上面贴了一则消息:
他说,他完成了一个小小的作业系统,这个核心是用在386机器上的, 同时,他真的仅是好玩,并不是想要做一个跟GNU一样大的计划! 另外,他希望能够得到更多人的建议与回馈来发展这个作业系统!这个概念跟Minix刚好背道而驰呢! 这则新闻引起很多人的注意,他们也去托瓦兹提供的网站上下载了这个核心来安装。 有趣的是,因为托瓦兹放置核心的那个FTP网站的目录为:Linux, 从此,大家便称这个核心为Linux了。(请注意,此时的Linux就是那个kernel喔! 另外,托瓦兹所丢到该目录下的第一个核心版本为0.02呢!) 同时,为了让自己的Linux能够相容于Unix系统,于是托瓦兹开始将一些能够在Unix上面运作的软体拿来在Linux上面跑。 不过,他发现到有很多的软体无法在Linux这个核心上运作。这个时候他有两种作法, 一种是修改软体,让该软体可以在Linux上跑, 另一种则是修改Linux,让Linux符合软体能够运作的规范! 由于Linux希望能够相容于Unix,于是托瓦兹选择了第二个作法‘修改Linux’! 为了让所有的软体都可以在Linux上执行,于是托瓦兹开始参考标准的POSIX规范。
这个正确的决定让Linux在起步的时候体质就比别人优良~因为POSIX标准主要是针对Unix与一些软体运行时候的标准规范, 只要依据这些标准规范来设计的核心与软体,理论上,就可以搭配在一起执行了。 而Linux的发展就是依据这个POSIX的标准规范,Unix上面的软体也是遵循这个规范来设计的, 如此一来,让Linux很容易就与Unix相容共享互有的软体了!同时,因为Linux直接放置在网路下,提供大家下载, 所以在流通的速度上相当的快!导致Linux的使用率大增!这些都是造成Linux大受欢迎的几个重要因素呢! Linux 的发展:虚拟团队的产生 Linux能够成功除了托瓦兹个人的理念与力量之外,其实还有个最重要的团队!
Linux虽然是托瓦兹发明的,而且内容还绝不会涉及专利软体的版权问题。
不过,如果单靠托瓦兹自己一个人的话,那么Linux要茁壮实在很困难~
因为一个人的力量是很有限的。好在托瓦兹选择Linux的开发方式相当的务实!
首先,他将释出的Linux核心放置在FTP上面,并请告知大家新的版本资讯,
等到使用者下载了这个核心并且安装之后,如果发生问题,
或者是由于特殊需求亟需某些硬体的驱动程式,那么这些使用者就会主动回报给托瓦兹。
在托瓦兹能够解决的问题范围内,他都能很快速的进行Linux核心的更新与除错。
不过,托瓦兹总是有些硬体无法取得的啊,那么他当然无法帮助进行驱动程式的撰写与相关软体的改良。 这个时候,就会有些志工跳出来说:‘这个硬体我有,我来帮忙写相关的驱动程式。’ 因为Linux的核心是Open Source的,骇客志工们很容易就能够跟随Linux的原本设计架构, 并且写出相容的驱动程式或者软体。志工们写完的驱动程式与软体托瓦兹是如何看待的呢? 首先,他将该驱动程式/软体带入核心中,并且加以测试。 只要测试可以运行,并且没有什么主要的大问题,那么他就会很乐意的将志工们写的程式码加入核心中! 总之,托瓦兹是个很务实的人,对于Linux核心所欠缺的项目,他总是‘先求有且能跑, 再求进一步改良’的心态!这让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由于托瓦兹是针对386写的,跟386硬体的相关性很强,所以, 早期的Linux确实是不具有移植性的。不过,大家知道Open source的好处就是, 可以修改程式码去适合作业的环境。因此,在1994年以后,Linux便被开发到很多的硬体上面去了! 目前除了x86之外,IBM、HP、Sun等等公司出的硬体也都有被Linux所支援呢! Linux的核心版本 Linux的核心版本编号有点类似如下的样子:
如前所述,因为对于Linux核心的开发者太多了,以致于造成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 distributions 好了,经过上面的说明,我们知道了Linux其实就是一个作业系统最底层的核心及其提供的核心工具。 他是GNU GPL授权模式,所以,任何人均可取得原始码与可执行这个核心程式,并且可以修改。 此外,因为Linux参考POSIX设计规范,于是相容于Unix作业系统,故亦可称之为Unix Like的一种。
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发布商套件等。 图2.5.1、Linux可完整安装发布套件
由于GNU的GPL授权并非不能从事商业行为,于是很多商业公司便成立来贩售Linux distribution。
而由于Linux的GPL版权宣告,因此,商业公司所贩售的Linux distributions通常也都可以从Internet上面来下载的!
此外,如果你想要其他商业公司的服务,那么直接向该公司购买光碟来安装,也是一个很不错的方式的!
不过,由于发展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来安装即可!
底下列出几个主要的Linux distributions发行者网址:
当然发行套件者不仅于此。但是值得大书特书的,是中文Linux的延伸计划:CLE这个套件! 早期的Linux因为是工程师发展的,而这些工程师大多以英文语系的国家为主, 所以Linux对于国人的学习是比较困扰一点。后来由国人发起的CLE计划: http://cle.linux.org.tw/ 开发很多的中文套件及翻译了很多的英文文件,使得我们目前得以使用中文的Linux呢! 另外,目前正在开发中的还有台南县卧龙小三等老师们发起的众多自由软体计划, 真是造福很多的朋友啊! 此外,如果只想看看Linux的话,还可以选择所谓的可光碟开机进入Linux的Live CD版本, 亦即是KNOPPIX这个Linux distributions呢!台湾也有阿里巴巴兄维护的中文Live CD喔!
那我到底应该要选择哪一个distributions?就如同我们上面提到的,其实每个distributions差异性并不大! 不过,由于套件管理的方式主要分为Debian的dpkg及Red Hat系统的RPM方式, 目前鸟哥的建议是,先学习以RPM套件管理为主的RHEL/Fedora/SuSE/CentOS等台湾使用者较多的版本, 这样一来,发生问题时,可以提供解决的管道比较多。如果你已经接触过Linux了, 还想要探讨更严谨的Linux版本,那可以考虑使用Debian,如果你是以效能至上来考量, 那么或许Gentoo是不错的建议! 总之,版本很多,但是各版本差异其实不大,建议你一定要先选定一个版本后, 先彻头彻尾的了解他,那再继续玩其他的版本时,就可以很快的进入状况。 鸟哥的网站仅提供一个版本,不过是以比较基础的方式来介绍的, 因此,如果能够熟练俺这个网站的话,呵呵!哪一个distributions对你来说,都不成问题啦! 不过,如果依据电脑主机的用途来分的话,在台湾鸟哥会这样建议:
Linux的特色 Linux是Torvalds先生所开发出来的,基于GPL的版权宣告之下,可以在x86的架构下运作,也可以被移植到其他的大型主机上面。 由于开发的相关理念与相容的问题,因此,我们也可以称Linux为Unix Like作业系统的一种。
Linux的特色 那么这个系统有什么特异功能呢?简单的说:
目前Linux已经是相当成熟的一套作业系统啰!而且不耗资源又可以自由取得!呵呵, 可以说造成微软相当大的压力呀!此外,由于他的系统硬体要求很低, 加上目前很多的人由于‘Intel 的阴谋’而造成手边有相当多的淘汰掉的硬体配备, Linux在这些被淘汰的硬体中就可以执行的相当的顺畅与稳定!因此也造成相当多朋友的关注啰!
这也是造成Linux成为最近几年来最受瞩目的作业系统之一,如前所述, 他会受到瞩目的原因主要是因为他是‘free’的,就是可以自由取得的作业系统啦! 然后他是开放性的系统,也就是你可以随时的取得程式的原始码,这对于程式开发工程师是很重要的! 而且,虽然他是Free的自由软体,不过功能却很强大!另外, Linux对于硬体的需求是很低的,这一点更造成它流行的主因,因为硬体的汰换率太快了, 所以很多人手边都有一些很少在用的零件,这些零件组一组就可以用来跑Linux了, 反正做一个工作站又不用使用到荧幕(只要主机就可以啰),因此Linux就越来越流行啰!
Linux的优缺点 那干嘛要使用Linux做为我们的主机系统呢?这是因为Linux有底下这些优点:
反正Linux好处说不完啦!不过虽然Linux具有这样多的好处,但是他先天上有一个足以致命的地方, 使他的普及率受到很大的限制,就是Linux需要使用‘指令列’的终端机模式进行系统的管理! 虽然近年来有很多的图形介面开发使用在Linux上面,但毕竟要熟悉Linux还是以指令列来使用是比较好的, 因此要接受Linux的玩家必须比较要能熟悉对电脑下指令的行为,而不是用滑鼠点一点icon就行了! Linux 还可以改进的地方:
老实说,这些缺点绝大部分都不是Linux本身的问题,倒是一些政策面与商业方面的考量,才是最大的困扰。 不过,Linux与其他的作业系统一样,就是一个工具而已!希望大家能够在快乐中学习到Linux的精髓啦!^_^ 关于授权 现在市面上有好多的软体,有的是自由软体,有的是专利软体。有的专利软体免费,有的自由软体要钱~
啊!好烦啊!怎么分辨这些东西?其实,鸟哥并不是律师,对于法律也不十分懂,不过,
还是有几个授权模式可以来谈一谈~
软体以Open Source的方式释出时,表示除了可执行的软体本身外,一定伴随着原始码的释出喔!通常Open Source的软体有几个好处:
Open source的代表授权为GNU的GPL授权及BSD等等,底下列出知名的Open Source授权网页:
相对于Open Source的软体会释出原始法,Close source的程式则仅推出可执行的二进位程式(binary program)而已。 这种软体的优点是有专人维护,你不需要去更动他;缺点则是灵活度大打折扣,使用者无法变更该程式成为自己想要的样式! 此外,若有木马程式或者安全漏洞,将会花上相当长的一段时间来除错!这也是所谓专利软体(copyright)常见的软体出售方式。 虽然专利软体常常代表就是需要花钱去购买,不过有些专利软体还是可以免费提供大众使用的! 免费的专利软体代表的授权模式有:
重点回顾
本章习题 (要看答案请将滑鼠移动到‘答:’底下的空白处,按下左键圈选空白处即可察看)
实作题部分:
参考资料与延伸阅读
2002/06/25:第一次完成 2003/01/26:重新修订,加入一些历史事件、重新编排与加入 FAQ 2003/02/28:加入百资以及 distrowatch 两个网站的推荐! 2005/05/31:旧有的资料放于 此处 2005/06/02:做了大幅度的改版,很多资料参考了网路农夫及 Linux 传奇等书籍,建议大家要多看看网路农夫的大作喔! 2005/06/08:将原本的 binary / compiler / Emacs 的地方再说明一下!比较容易了解那是什么!顺便加入习题 2005/07/21:网路农夫的网站结束了~真伤心~只好提供网路农夫之前发表的文章连结了! 2005/08/03:感谢网友 babab 的来信告知,修订了国家高速网路中心网址:http://www.nchc.org.tw 2005/10/24:经由网友的回报,洪朝贵老师已经调职到树德大学,因此整个连结内容已作修订。 2006/05/31:加入了重点回顾的项目啦! 2006/06/06:感谢网友 "Warren Hsieh" 兄的提醒,由于麦金塔在 2006 年后使用 Intel 的 x86 硬体架构,故 Windows 是可能可以在上面安装的! 2008/07/23:因为加入了计算机概论的章节,所以本文做了挺大幅度的修改!原本针对FC4的版本请点选这里。 2007/07/26:将整份文章重新校阅过,修订一些文辞,也将格式调整为适合的XHTML了! 2007/07/29:将主、次核心版本加强说明! 2009/08/05:移除最后一小节的标准,将FHS与LSB向前挪到distribution解释中。拿掉伺服器、工作站、终端机的说明。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||