众所周知,linux的核心原型是1991年由linux Torvalds写出来的,但是Torvalds为什么可以写出linux这个操作系统?为什么他要选择386的电脑来开发?为什么linux的发展可以这么迅速?又为什么linux是免费的?以及目前为何有这么多的linux版本(distributions)呢?了解这些东西后,才能够知道为何linux可以免除专利软件之争,并且了解到linux为何可以同时在个人电脑与大型主机上面大放异彩!所以,在实际进入linux的世界前,就让我们来谈一谈这些有趣的历史故事。
1 什么是linux
1.1计算机:计算的辅助工具
1.2什么是操作系统
1.3linux之前‘Unix的历史’
1.4关于gnu计划
2 Torvalds的linux发展
2.1 与minix之间
2.2 对386硬件平台的多工测试
2.3 初次释出linux0.02
2.4 linux的发展:虚拟团队的产生
2.5 linux distributions
3 Linux的特色
3.1 linux 的特色
3.2 linux的优缺点
3.3 其他linux相关
什麼是 Linux ?
linux 这个玩意是在电脑上面运作的,所以,当然要了解一下电脑。首先,到底有那些种类的电脑呢?而linux可以在那些种类的电脑上面运作?且linux源自那里?这些我们都得先谈一谈。
计算机:计算的辅助工具
在目前的都市生活中,您应该很难不接触到电脑这个玩意吧?电脑在当初开发的时候,是希望可以辅助与简化人们进行的大量运算工作,后来才发展成为一些特殊用途。无论如何,电脑基本的功能是:接受使用者输入指令,经由CPU的数学与逻辑单元运算处理后,以产生或储存成有用的信息。为了达成这个功能,当然电脑必须要有:
. 输入单元:例如滑鼠、键盘、读卡机等等。
. 中央处理器:含有算数逻辑、控制、记忆等单元。
. 输出单元: 显示屏、打印机等。
上面的东西其实就是组成您电脑的主要元件!而为了连接各个元件,因此有了主机板,所以,您的主机里面就包含了主机板以及cpu, 还有各种需要的界面卡。而显示屏、键盘、鼠标则通过与主机的连接,就构成一台可以运作的电脑了。另外,由于电脑仅认识0、1,因此电脑主要是以二进位的方式来计算的,所以,通常电脑的记忆存储单位都是以byte或bits为基本单位。他们的单位是这样的:
. 1 bytes= 8 bits
. 1 KB = 1024 bytes
. 1 MB = 1024 KB
. 1 GB = 1024 MB
而电脑也因为他的复杂度,而分为几种等级,例如:
. 超级电脑
. 大型电脑
. 迷你电脑
. 微电脑
虽然目前个人电脑的使用特别广泛,但是在1990年以前,个人电脑是比较不被重视的,因为它的运算速度在当时实在很差,而且当时比较有名的操作系统也没有几个电脑支持。所以才会流行不起来,提到操作系统,下面我们谈谈之前的操作系统。
什么是操作系统
什么是操作系统(operation system,os)呢?我们先来想想,上面介绍的计算机是如何工作的?举例来说,您电脑的显示屏上面显示的信息是如何显示出来的呢?嗯,就是借助显卡与显示屏显示的。那么如果我们想要看vcd呢?呵呵,就需要1.)有影音资料的光碟,2)可读取光碟的光驱,3)可以转换影音资料输出的中央处理器,4)可以显示影像的显卡,5)可以输出声音的声卡,6)可以输出影像的显示器,7)可以发出声音的喇叭!也就是说:所有在“工作”的东西都是硬件,对了,就是硬件工作。那么问题来了,现在我们知道,电脑所进行的工作都是电脑硬件帮我们达成的,但是,为什么这些硬件知道如何播放vcd呢?这当然是因为有某个东西在正确的控制硬件的工作了,那个东东就是:操作系统!它可以管理这个电脑的硬件,可以控制cpu进行正确的运算,可以分辨硬盘里头的资料并进行读取,它还必须能够识别所有的卡,这样才能够将所有的硬件正确的使用上!所以,如果没有这个操作系统,那么您的电脑就等于是一堆废铁而已。
虽然操作系统可以完整的掌控所有的硬件资源,但是,对于使用者来说,这还是不够的!因为作业系统虽然可以掌控所有的硬件,但是,如果使用者无法与操作系统沟通,那么这个操作系统就没有什么用处了。简单的来说,以上面的vcd为例,虽然操作系统可以控制硬件播放vcd,但是,如果使用者没有办法控制何时要播出vcd的话,那么到底我们要怎么看vcd呢?对吧!
所以说,一个比较完整的操作系统应该要包含两个东西,一个是核心与其提供的界面工具,一个是利用核心提供的界面工具所开发出来的软件。
那么核心有没有做不到的事情呢?当然有的,举例来说,如果您曾经自行安装过比较新的显卡在您的电脑上,那么应该常常会发生windows电脑告诉您:“找不到合适的驱动程序来显示”的问题吧,也就是说,即使您有最新的显卡安装在您的个人电脑上,而且也有播放vcd的程序,但是因为“核心”无法操控这个最新的显卡,所以,就无法正常的显示您的vcd了。没错,你的整个硬件是由核心来管理的,而核心不认识你的硬件,那么你就无法使用该硬件设备,例如上面说的显卡。
Tips:在定义上,只要能够让电脑硬件正确无误的运作,那就算是操作系统了。所以说,操作系统其实就是核心与其提供的界面工具,不过,就如同上面讲的,因为最阳春的核心缺乏了与使用者的沟通的亲和界面,所有在目前,一般我们提到的“操作系统”都会包含核心与相关的使用者应用软件。
核心就是“Kernel”,它是一个作业系统的最底层的东西,由它来掌管整个硬件资源的工作状态,而每个操作系统都有自己的核心,所以说,但有新的硬件加入到你的系统中的时候,若你的“Kernel”并没有支援它的时候,呵呵,这个新的硬件就肯定无法工作的,因为控制它的kernel并不认识它!这样了解了吗?先有个概括性的了解,后面我们提到“核心编译”的时候会再更详细的谈到它。
一般来说,kernel为了达到使用者所需要的正确运算结果,他必须管理的事项有:
. 系统呼叫界面(System call interface):为了方便程序开发者可以轻易的透过与kernel的沟通,将硬件的资源进一步的利用,于是需要有这个简易的界面来方便程序开发者。
. 行程管理(Process control):总是听过所谓的“多工环境”吧?一部电脑可能同时间有很多的工作跑到cpu等待运算处理,kernel这个时候必须能够控制这些工作,让cpu的资源作有效的分配才行!
. 内存管理(Memory management):控制整个系统的内存管理,若内存不足,kernel最好还能够提供虚拟内存的功能!
.档案系统管理(File system management):档案系统的管理,例如资料的输入输出(I/O)等的工作!还有不同档案格式的支援等等,如果你的核心不认识某个档案系统,那么您将无法使用该档案格式的文件了,例如:windows 98就不认识NTFS档案格式的硬盘。
. 设备的驱动(device drivers):就如同上面提到的,硬件的管理是kernel的主要工作之一,当然了,设备的驱动程序就是核心需要作的事情!好在目前都有所谓的“可载入模组”功能,可以将驱动程序编译成模组,就不需要重新的编译核心了!这个也会在以后的“核心编译”当中提到的!
所以拉!所有的硬件的资源都是kernel来管理的!至于我们要达成的一些工作时,除了由核心本身提供的功能(例如上面提到的档案管理)外,还可以由其他的应用软件来达成,举个例子来说,你要看vcd影片吧!那么除了windows提供的媒体播放程序外,你也可以自己安装vcd播放程序来播放vcd了!这个播放程序就是应用软件,而这个应用软件可以帮你去控制核心来工作,因此,我们可以这么说,核心是控制整个硬件设备支援的东东,也是一个操作系统的最底层,然而要让整个操作系统更完备的话,那么需要含有相当丰富的核心提供的工具,以及核心相关的应用软件来支援。
OK!提到这里那么您知道Linux是什么了吧,呵呵!对了,其实Linux就是一个操作系统,这个操作系统里头含有最主要的kernel提供的工具了!它提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构,这个架构是沿袭unix良好的传统来的,所有相当的稳定而且功能强大!此外,由于这个优良的架构可以在目前的个人电脑(X86)上面跑,所有很多的软件开发工作者将他们的工作心血移传到这个架构上面,那就是很多的应用软件了,虽然linux仅是其核心与核心提供的工具,不过,由于核心、核心工具与这些软件开发者的结合,使得linux成为一个更完整的、功能强大的操作系统了,我们可以将linux的系统与使用者的相关性看成底下的图示:
简单了解linux是何物之后,接下来,我们要谈一谈,为什么linux是很稳定的操作系统?它是如何来的?
Linux之前、Unix的历史
早在Linux出现之前的二十年(大约1970年代),就有一个相当稳定而成熟的操作系统存在了!那就是Linux的老大哥“UNIX”怎么这么说呢?!他们这两个家伙有什么关系呢?这里就给他说一说!众所皆知,Linux的核心是由Linux Torvalds在1991年的时候开发出来的,并且发到网络上给大家提供下载,后来大家觉得这个小玩意相当的小而精巧,所以慢慢的就有相当多的朋友投入这个小东西的研究领域里面去了!但是为什么这个小东西这么棒呢?!然而又为什么大家都可以免费的下载这个东西呢?!
. 1969年以前:一个没有完成的梦想:Bell ,MIT与GE的“Multics” 系统
早期的电脑业并不象现在的个人电脑一样,他可不是一般人碰的起的呢,除非是军事或者是高科技用途,或者是学术单位的学术研究,否则,真的很难接触到。非但如此,早期的电脑架构很难使用,除了运算速度并不快之外,操作界面也很困难的!在这个时候,写程序是件很可怜的事情,因为,程序员必须要将程序相关的资讯在读卡纸上打洞,然后再将读卡纸插入读卡机来将资讯读入主机中运算。光是这样就很麻烦了,如果程序有个小地方写错,哈哈!光是重新打卡就很惨,加上主机少,使用者众多,光是等待,就耗去很多的时间了!
在之后,经由操作系统的改良,使得后来可以使用键盘来进行资讯的输入输出。不过,在一个学校里面,主机毕竟可能只有一部,如果多人等待使用,问题就出来了?怎么办?好在1960年代初期麻省理工学院开发了所谓的:相容分时系统(Compatible Time-Sharing System,CISS),它可以让大型主机透过提供数个终端机(terminal)以连线进入主机,来利用主机的资源进行运算工作。构架如下:
图二:早期主机与终端机的相关性图示
如此一来,无论主机在那里,只要在终端机前面进行输入输出的作业,就可以利用主机提供的功能了。不过,需要注意的是:此时终端机只具有输入输出功能,本身完全不具任何运算或者软件安装能力。而且,比较先进的主机大概只能提供30个不到的终端机而已。
为了更加强化大型主机的系统,以让主机的资源可以提供更多使用者来利用,所以在1965年前后,由贝尔实验室、麻省理工及GE共同开发了Multics的计划,Multics目的是想要让大型主机可以达成提供300个以上的终端机连线使用的目标。不过,到了1969年前后,计划进度落后,资金短缺,所以该计划就宣告不治、、、、喔!是宣告失败。
.1969年:Ken Thompson 的小型 file server system
在认为Multics计划不可能成功后,贝尔实验室就退出该计划。不过,原本参与Multics计划的人员中,已经从该计划中获得一些点子,Ken Thompson就是其中的一位!Thompson因为自己的需要,希望开发一个小小的操作系统,以提供自己的需求。在开发时,有一部DEC(Digital Equipment Corporation)的PDP-7没人使用,于是他就准备计划这部主机进行作业系统核心程序的撰写。本来Thompson是没有时间的,有趣的是,在1969年八月份左右,刚好他的妻儿去了美西探亲,于是他有了额外的一个月的时间好好的待在家里将一些构想实现起来!经过四个星期的奋斗,他终于以汇编语言(Assembler)写出了一个核心程序,同时包括一些核心工具程序,以及一个小小的档案系统。那个系统就是UNIX的原型!当时,Thompson将Multics庞大的复杂系统简化了很多,于是同实验室的朋友都戏称这个系统为:Unics。Thompson的这个档案系统有两个重要的概念就是:
。所有的程序或系统装置都是档案
。不管建构编译器还是附属档案,所写的程序只有一个目的,且要有效的完成目标。
这些概念在后来对于Linux的发展有相当重要的影响。
.1973年:Unix的正式诞生,Ritchie等人以C语言写出第一个正式Unix核心
由于Thompson写的那个作业系统实在太好用了,所以在贝尔实验室内部广为流传,并且数度经过改版。但是,比较重要的改版则发生在1973年。Unix本来是以汇编语言写成的,后来因为系统移植效能的要求,该系统被B语言改写。不过,效能依旧不是很好。后来,Dennis Ritchie将B语言重新改写为C语言,C语言算是比较高级的程序语言,可以在不同的机器上面运作,而Ritchie等人也同时将原本Thompson的那个操作系统重新以C语言改写,最后发出Unix的正式版本!
在这个时候需要特别注意的是,贝尔实验室是隶属于AT&T的,只是AT&T当时忙于其他商业活动,所以对于Unix是采取比较开放的态度,此外,Unix在此时当然是不容易被一般人所接受的!此外,也需要特别强调,由于Unix是以高级的C 语言写的,相对于汇编语言需要与硬件有密切的配合,它与硬件的相关性就没有那么大了!所以,这个改变也使得Unix很容易被移植到不同的机器上面。
. 1977年:重要的Unix分支:BSD的诞生
前面说到,虽然贝尔属于AT&T,但是AT&T此时对于Unix是采取开放的态度,此外,Unix是以高级的C语言写成的,理论上是具有可移植性的!所以,只要取得Unix的原始码,并且针对大型主机的特性加以修改原有的源码,就可能将Unix移植到另外一部不同的主机上。所以在1973年以后,Unix便得以与学术界合作开发!最重要的接触就是与加州柏克莱(Berkeley)大学的合作。柏克莱大学的Bill Joy在取得了Unix的核心源码后,着手修改成适合自己机器的版本,并且同事增加了很多工具软件与编译程序,最终将它命名为Berkeley Sfotware 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操作系统的出现(由于Unix强调的是多人多工的环境,但早期的x86个人电脑构架下的CPU是没有能力达到多工的作业,因此,并没有人对移植Unix到x86的电脑上有兴趣)。每一家公司自己出的Unix虽然在构架上面大同小异,但是确真的仅能支援自身的硬件,所以,早先的Unix只能是伺服器(Server)或者是大型工作站(Workstation)划上等号!
但是这个高度开放的Unix系统在1979年有了重大的转折--因为AT&T由于商业的考虑,以及但是现实环境下的思考,于是想将Unix的版权收回去,因此,AT&T在1979年发行第七版Unix中,特别提到了“不可以对学生提供源码”的严格限制!同时,业造成了Unix业界之间的紧张气氛,并且业引爆了很多商业纠纷。
.1984年之一:x86架构的Minix的诞生
关于1979年的版权声明中,影响最大的当然是学校教Unix相关学问的教授了!想一想,如果没有核心的源码,那么如何教导学生认识Unix呢?这个问题对于Andrew Tanenbaum(谭宁邦)教授来说,实在是很伤脑筋的事情!不过,学校的课程还是得继续啊,那怎么办??既然1979年的Unix第七版可以在Intel的x86架构上面进行移植,那么是否意味着可以将Unix改写并移植到x86上面了呢?这个想法上,谭宁邦教授于是自己动手写了Minix这个Unix Like 的核心程序!在撰写的过程中,为了避免版权纠纷,谭宁邦完全不看Unix的核心原始码!并且强调他的Minix必须能够与Unix相容才行!谭宁邦在1984年开始撰写核心程序,到1986年终于完成,并于次年出版Minix相关书籍,同时与新闻组相结合。
这个Minix版本比较有趣的地方是,它并不是完全免费的,无法在网络上提供下载!必须要购买磁盘才行!虽然真的很便宜,不过毕竟因为没有在网络上流传,所以Minix的传播速度并没有很快!此外购买时随磁盘还会附上Minix的原始码!这意味着使用者可以学习Minix的核心程序设计概念!这个特色对于Linux的起步开发阶段可是很有关系,此外,开发者仅有谭宁邦教授,因为学者很忙啊!加上谭宁邦始终认为Minix主要用在教育上面,所以对于Minix是点到为止,所以,Minix很受欢迎没错,不过,使用者的要求/需求的声音可能没有办法上升到比较高的地方了。
. 1984年之二:GNU与FSF计划的成立
Richard Mathew Stallman(史托曼)在1984年发起的GNU计划,对于现今的自由软件风潮,真有不可磨灭的地位!目前我们所使用的很多自由软件,几乎均直接或间接受益与GNU这个计划,那么史托曼是何许人也?为何他会发起这个GNU计划呢?
Richard Mathew Stallman(史托曼)从小就很聪明!他在1971年的时候,进入骇客圈中相当出名的人工智慧实验室(ALLab),这个时候的骇客专指电脑功力很强的人,并非破坏 电脑的怪客(cracker),当时的骇客圈对于软件的着眼点几乎是“分享”,所以并没有专利方面的困扰!这个特色对于史托曼的影响很大!不过,后来由于管理阶层的问题,导致实验室的优秀骇客离开实验室,并且进入其他商业公司继续发展优秀的软件。但史托曼并不服输,仍然坚持在原来的实验室开发新的程序与软件。后来,他发现到,自己一个人并无法完成所有的工作,于是想要成立一个开放的团体来共同努力!
1983年以后,因为实验室硬件的更换,使得史托曼无法继续以原有的硬件操作系统继续自己的程序的撰写,而且他进一步发现到,过去他所使用的Lisp操作系统,是麻省理工学院的专利软件,是无法共享的,这对于想要成立一个开放团队的史托曼来说是个阻碍。于是他便放弃了Lisp这个系统。后来,他接触到Unix这个系统,并且发现,Unix在理论与实际上,都可以在不同的机器间进行移植。于是他开始转而使用Unix系统。因为Lisp与Unix是不同的系统,所以,他原本已经撰写完毕的软件是无法在Unix上面运行的!因此,史托曼将他发展的软件均撰写可以移植的形态!
1984年,史托曼开始GNU计划,这个计划的目的就是想要:建立一个自由的开放的Unix操作系统。但是建立一个操作系统谈何容易,而且在当时的GNU是仅有自己一个人单打独斗的史托曼--这实在太麻烦,但又不能不做这个计划,于是史托曼反其道而行之:既然操作系统太复杂,我就先写可以在Unix上面运行的小程序,这总是可以了吧?呵呵!在这个想法上,史托曼便开始了程序的写作。在写作期间,为了不让自己吃官司,他绝对不看专利软件的原始码!为了这个计划,他开始使用原本Unix上面跑的软件,并自行撰写功能与Unix原有专利软件相仿的软件。
但不论史什么软件,都得要进行编译成为二进制文件(binary file)后才能够执行,因此他便开始撰写C语言的编译器,那就是现在相当有名的GNU C (gcc)!这点相当的重要!这是因为C语言编译器版本众多,但都是专利软件,如果他写的C编译器够棒,效果够好,那么会大大的让GNU计划出现在众人眼前!
但开始并不顺利,为此,他先转而将Emacs编译器写成可以在Unix上面跑的软件,并公开原始码,因为Emacs太优秀了,因此,很多人便直接向他购买。此时Internet尚未流行,所以,史托曼便借着Emacs以磁盘出售,赚了一点钱,进而开始全力撰写其他软件。终于还是完成了GCC,这比Emacs还有帮助!此外,他还撰写了更多可以被呼叫的C函数库(GNU C Libary)以及可以被使用来操作操作系统的基本界面BASH shell !这些都是在1990年完成的!
到了1985年,为了避免GNU所开发的自由软件被其他人所利用而成为专利软件,所以他与律师草拟了有名的通用公共许可证(General Public License GPL) ,并且称呼他为copyleft(相对专利软件的copyrigh!)。关于GPL的相关内容我们在下一个小节继续谈论,在这里,必须要说明的是,由于有GNU所开发的几个重要软件,如:
. Emacs
. GNU C ( GCC)
. GNU C Library(glibc)
. Bash shell
造成后来很多的软件开放者可以基于这些基础的工具来进行程序开放!进一步壮大了自由软件团体!这是很重要的!不过,对于GNU的最初构想“建立一个自由的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 Torvals 在BBS上面贴了一则消息,宣称他以bash ,gcc等工具写了一个小小的核心程序,这个核心程序可以在Intel的386机器上面运作,让很多人感兴趣!从此开始了Linux不平凡的路程。
关于GNU计划
1984年创立GNU计划与FSF基金会的Stallman先生认为,写程序最大的快乐是让自己发展的良好软件让大家来使用了!而既然程序是想要分享给大家使用的,不过,每个人所使用的电脑硬件构架并不相同,既然如此的话,那么该程序的原始码(Source code)就应该要同时释出,这样才能方便大家修改而适用于每个人的电脑中呢!这个将原始码释出的举动,就称为Open Source!此外,史托曼同时认为,如果您将您的程序的Source code 分享出来时,若该程序是很优秀的,那么将会有很多人使用,而每个人对于该程序都可以查阅Source code ,无形之中,就会有一票人帮您除错,您的这个程序就会越来越壮大,越来越优秀。
而为了避免自己所开放出来的Open source的自由软件被拿去做成专利软件,于是Stallman同时将GNU与FSF发展出来的软件,都挂上了GPL的版权宣告,这个FSF的核心观念是“版权制度是促进社会进步的手段,版权本身不是自然权利”对于FSF的兴趣或者对于GNU想要更深入的了解时,可以参考:http://saturn.stu.edu.tw/~ckhung/a/c_83.php.那么这个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 是一种自由的权利,并非是“价格”举例来说,你可以拥有自由呼吸的权利,你拥有自由发言的权利,但是,这并不代表您可以到处喝“免费的啤酒”也就是说,自由软件的重点并不是指“免费”的,而是指具有“自由度的,freedom"的软件,史托曼进一步说明了自由度的意义是:使用者可以自由的执行、拷贝,在发行、学习、修改与强化自由软件。这无疑是个好消息!因为如此一来,你所拿到的软件可能原先只能在Unix上跑,但是经过原始码的修改后,你将可以拿他在Linux或者是windows上面来跑!总之,一个软件挂上了GPL版权宣告后,他自然就成了自由软件,这个软件就具有如下特色:
. 取得软件与原始码:您可以根据自己的需求来执行这个自由的软件;
. 复制:您可以自由的复制该软件;
. 修改:您可以将取得的原始码进行程序修改工作,使之适合您的工作;
. 再发行:您可以将您修改过的程序,再度的自由发行,而不与原先的撰写者冲突;
. 回馈:您应该将您修改过的程序码回馈与社群;
但请特别留意,您所修改的任何一个自由软件都不应该这样:
. 修改授权:您不能将一个GPL授权的自由软件,在您修改后而将他取消GPL授权
. 单纯贩卖:您不能单纯的贩卖自由软件。
也就是说,既然GPL是站在互助互利的角度上去开发的,您自然不应该将大家的成果占为己有,而取消GPL授权的!对吧!因此您当然不可以将一个GPL软件的授权取消,即使您已经对该软件进行大幅度的修改!那么自由软件也不能贩卖吗,当然不是,自由软件是可以贩卖的,不过,不可仅贩卖软件,应同事搭配售后服务与相关手册,这些可就需要工本费了。
很多人还是有疑问,目前不是很多Linux开发商吗?为何他们可以贩卖Linux这个GPL授权的软件?原因狠简单,因为他们大多是贩卖“售后服务”所以,他们所使用的自由软件,都可以在他们的网站上面下载!(当然,每个厂商他们自己开发的工具软件就不是GPL的授权软件了!)但是,您可以购买他们的Linux光碟,如果您购买了光碟,他们会提供相关的手册说明文件,同时也会提供您数年不等的咨询,售后服务、软件升级与其他协力工作等等的附加价值。所以说,目前自由软件工作者,他们赖以生存的几乎都是在“服务”这个领域呢,毕竟自由软件并不是每个人都会撰写,有人有需要您的自由软件时,他就会请求您的协助,此时,您就可以透过服务来收费了!
上面提到的大多时与使用者相关的项目,那么GPL对于自由软件的作者有何优点呢?大致的优点有这些:
. 软件安全性能较佳
. 软件执行效能较佳
. 软件除错时间较短
. 贡献的原始码永远都存在
这是因为既然是Open Source 的自由软件,那么您的程序码将会有很多人帮您查阅,如此一来,程序的漏洞与程序的优化将会进展的很快,所以,在安全性与效能上面,自由软件一点都不输给商业软件,此外,因为GPL授权当中,修改者并不能修改授权,因此,您如果曾经贡献过程序代码,呵呵,您将留名青史呢,不错吧!!!
不过,GPL对于程序开发者的优点是相当多的,但对于不熟悉程序的一般人来说,GPL的优点其实不太容易看出来。首先,虽然它是随手可得的自由软件,但是您也必须要会使用基本的编译器才行!呵呵,这也是我重新转贴了鸟哥私房菜的原因,感觉,linux真是个好东西!!!!认识了、学习了Linux与自由软件的相关技巧,对于未来真的是有很不错的帮助!!
Torvalds的Linux发展
我们前面一节当中,提到了Linux是由Torvalds这个芬兰人所发明的。那么为何托瓦兹可以发明Linux呢?这里让我们来谈谈。
与Minix之间
Linux Torvalds 的外祖父是赫尔辛基大学的统计学家,他的外祖父为了让自己的小孙子能够学点东西,所以从小就将托瓦兹带到身旁来管理一些微电脑。这个时期,托瓦兹接触了汇编语言(Assmbly Language),那是一种直接与晶片对谈的程序语言,也就是所谓的低阶语言。必须要很了解硬件的构架,否则很难以组合语言撰写程序的。
在1988年间,托瓦兹顺利的进入赫尔辛基大学,并选择了电脑科学系。在就学期间,因为学业的需要与自己的兴趣,托瓦兹接触到了Unix这个操作系统。当时整个赫尔辛基只有一部最新的Unix系统,同时仅提供16个终端机。还记得我们上一节刚刚提到过的,早期的电脑仅有主机具有运算功能,terminal 仅负责提供Inpu/Output而已。这种情况下,实在很难满足托瓦兹的需求,因为。。。。。光是等待使用Unix的时间,就很耗时,为此,他不禁想到:“我何不自己搞一部Unix来玩?”不过,就如同Stallman当初的GNU计划一样,要写核心程序,谈何容易!
不过,幸运之神并未背离托瓦兹,因为不久以后,他就知道有一种类似Unix的系统,并且与Unix完全相容,还可以在Intel86机器上面跑的作业系统,那就是Minix系统!他在购买了最新的Intel386电脑后,就立即安装了Minix这个操作系统。另外,由于Minix系统是附有原始码的,所以,托瓦兹也经由这个原始码学习了很多的核心程序设计的设计概念。
对386硬件的多工测试
事实上,托瓦兹对于个人电脑的CPU其实并不满意,因为他之前碰到的电脑都是工作站的电脑,这类电脑的CPU特色就是可以进行“多工处理”的能力。什么是多工呢?理论上,一个CPU在一个时间内仅能进行一项工作,那如果有两个工作同时出现到系统当中呢?举例来说,您可以在现今的电脑中同时开启两个以上的办公软件,例如电子试算表与文书处理软件。这个同时开启的动作代表这两个工作同时要交给CPU来处理,CPU一个时间点内仅能处理一个工作,那怎么办?没关系,这个时候多工的CPU就会自动在不同的工作间切换,就是我先跑10%的电子试算表,在转动文书处理器跑10%,再回去电子试算表,。。。。一直到两个工作结束。
早期的Intel的X86架构电脑不是很受重视的原因,就是因为X86的晶片对于多工的处理不佳,CPU在不同的工作间的切换不是很顺畅。但是这个情况在386推出后,有很大的改善。托瓦兹在得知新的386晶片的相关资讯后,他认为,以价格性能比的观点来看,Intel的386便宜而且性能上也就稍微将就。所以他就贷款去买了一部Intel的386来玩。
前面提到,托瓦兹是玩汇编语言的,汇编语言对于硬件有很密切的关系,为了彻底发挥386的效能,于是托瓦兹花了不少时间在测试386机器上,他的重要测试就是在测试386的多功效能上。首先,他写了两个小程序,一个程序会持续输出A,另一个会持续输出B,他将两个程序同时执行,结果,他看到屏幕上很顺利的一直出现ABABABAB。。。。。。他知道,他成功了!
初次释出Linux0.02
探索完了386的硬件相关资讯,并且也安装了类似的Unix的Minix操作系统,同时还取得Minix的原始码,接下来,托瓦兹干吗去了?因为Minix的发展控制在谭宁邦教授手上,他希望Minix能以教育的立场去发展,所以对于Minix的开发并不是十分热衷,但是一堆人对于Minix的功能需求又很强烈,例如一些界面与周边的驱动程序,与新的协定等等。在无法得到解决后,托瓦兹就想,那我干脆自己写一个更适合我自己用的Minix好了,于是他就开始进行核心程序的撰写了。
对于托瓦兹来说,GNU真是个不可多得的好东东,因为他用来撰写对于自己小核心的工具,就是GNU的bash操作界面与gcc编译器等等自由软件。他以GNU的软件针对386并参考Minix的设计理念(注意,仅是程序设计理念,并没有使用Minix的原始码)来写这个小核心。呵呵,没想到竟然可以写出这个小玩意,而这个小玩意竟然可以在386上面顺利的跑起来,还可以读取Minix的文件系统。真是太好了!不过还不够,他希望这个程序可以获得大家的一些修改建议,于是他便将这个核心放置在网络上提供大家下载,同时在BBS上面贴了一则消息:
Hello everybody out there using minix- |
他说,他完成了一个很好玩的小核心操作系统,这个核心释用在386机器上的,同时,他真的仅是好玩,并不是想要做一个跟GNU一样大的计划!这则新闻引起很多人的注意,他们也去托瓦兹提供的网站上去下载这个核心来安装。有趣的是,因为托瓦兹放置核心的那个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核心放置在FTP上面,并请告知大家新的版本资讯,等到使用者下载了这个核心并且安装之后,如果发生问题,或者是由于特殊需求急需某些硬件的驱动程序,那么这些使用者就会主动回报给托瓦兹。在托瓦兹能够解决范围内,他都能很快速的进行Linux核心的更新与除错。
不过托瓦兹总是有些硬件无法取得的,那么他当然无法帮助进行驱动程序的撰写与相关软件的改良。这个时候,就会有有些志工跳出来说:“这个硬件我有,我来帮忙写相关的驱动程序”。因为Linux的核心是Open Source的,骇客志工们很容易就能够跟随Linux的原本设计构架,并且写出相容的驱动程序或者软件。志工们写完的驱动程序与软件托瓦兹是如何看待的呢?首先,他将该驱动程序/软件带入核心中,并且加以测试。只要测试可以运行,并且没有什么主要的大问题,那么他就会乐意的将志工们写的程序加入核心中,总之,托瓦兹是个很务实的人,对于Linux核心所欠缺的项目,他总是“先求有且能跑,在再求进一步改良”的心态!这让Linux使用者与志工得到相当大的鼓励!因为Linux的进步太快了!使用者要求虚拟内存,结果不到一个礼拜推出的新版Linux就有了,这不得不让人佩服。
另外,因为这种程序的加入,于是Linux便逐渐发展成具有模块的功能!也就是将某些功能独立出核心之外,在需要的时候才载入到核心中。如此一来,如果有新的硬件驱动程序或者其他的协定程序码进来时,就可以模组化,大大的增加了Linux核心的可维护能力!
后来,因为Linux核心加入了太多的功能,光靠托瓦兹一个人进行核心的实际测试并加入核心原始码程序实在太费力,结果就有很多的朋友跳出来帮忙处理这个前置作业!例如:考克斯、催迪等,这些重要的副手会先将来自志工们的修补程序或者新功能的程序码进行测试,并且结果上传给托瓦兹看,让托瓦兹作最后核心加入的原始码的选择与整并,这个分层负责的结果,让Linux的发展更加容易。
特别注意的是,这些托瓦兹的Linux发展副手,以及自愿传送修补程序的骇客志工,其实都没有见过面,而且彼此在地球的各个角落,大家群策群力的共同发展出现今的Linux,我们称这群人为虚拟团队,而为了虚拟团队资料的传输,于是Linux便成立了核心网站:http://www.kernel.org!而这群素未谋面的虚拟团队们,在1994年终于完成的核心正式版!version 1.0。这一版同时加入了X Window System的支援呢!更于1996年完成了2.0版,同时应商业版本中的需求,于是开始将核心版本以测试版及稳定版同时开发,次版本偶数为稳定版,奇数为测试版。测试版含有较多的功能,不过,稳定性可不敢说。并且托瓦兹指定企鹅为Linux标志。
Linux由于托瓦兹是针对386写的,跟386硬件的相关性很强,所以,早期的Linux确实是不具有移植性的。不过,大家知道Open Source的好处就是,可以修改程序源代码去适合作业环境。因此,在1994年以后,Linux便被开发到很多的硬件上面,目前除了X86外,IBM 、HP、Sun等公司出的硬件也都有被Linux支援!
Linux distributions
好了,经过上面的说明,我们知道了Linux其实就是一个操作系统最底层的核心及其提供的核心工具。他是GNU授权模式,所以,任何人均可取得原始码与可执行这个核心程序,并且可以修改。此外,因为Linux参考POSIX设计规范,于是相容于Unix操作系统,故也可称之为Unix Like的一种。
Linux的出现让GNU计划放下心里的一块大石头,因为GNU一直以来就是缺乏了核心程序,导致他们的GNU自由软件只能在其他的Unix上面跑。既然目前有Linux出现了,且Linux也用了很多的GNU相关软件,所以Stallman认为Linux的全名应该称为GNU/Linux呢!不管怎么说,Linux实在很不错,让GNU软件大多以Linux为主要操作系统来进行开发,此外,很多其他的自由软件团队,例如:send mail , wu-ftp , apache 等等也都是以Linux为开放测试平台的计划出现!如此一来,Linux除了主要的核心程序外,可以在Linux上面运行的软件也越来越多,如果有心,就能够将一个完整的Linux搞定了!
虽然由托瓦兹负责开发的Linux仅有Kernel 与Kernel提供的工具,不过,如上所述,很多的软件已经可以在Linux上面运行了,因此,Linux + 各家软件就可以完成一个相当完整的操作系统了。不过,要完成这样的操作系统。。。。。。。还真难,因为Linux早期都是由骇客工程师所开发维护的,他们并没有考虑一般使用者的能力。。。。。为了让使用者能够接触到Linux,于是很多的商业公司或非盈利团体,就将Linux Kernel(含tools)与可运行的软件整合起来,加上自己具有创意的工具程序,这个工具程序可以让使用者以光盘或者网络直接安装/管理Linux系统。这个Kernel + Softwares + Tools 的可完整安装的咚咚,我们称为 :Linux distribution ,一般中文翻译成可完整安装套件,或者安装套件。
我们前面说过,GNU的GPL授权并非不能从事商业行为,于是很多商业公司便成立来贩售Linux distribution。而由于Linux 的GPL版权宣告,因此,商业公司所贩售的Linux distributions 通常也都可以从internet上面来下载的,此外,如果您想要其他商业公司的服务,那么直接向该公司购买光盘来安装,也是一个不错的方式的!
不过,由于发展Linux distributions的公司实在太多了,例如有名的Red Hat,Mandriva,Debian,SuSE等等,所有很多都很担心,如此一来每个distribution是否都不相同呢?这就不需要要担心了,因为每个Linux distributions 使用的Kernel 都是http://www.kernel.org 所释放出来的,而他们所选择的软件,几乎都是目前很知名的软件,重复性相当的高,例如WWW伺服器的Apache,Mail伺服器的Postfix/sendmail,File伺服器的Samba等等。
此外,为了让所有的Linux distributions开发不致于差异太大,还有Linux Standard Base(LSB)来规范开发者,已经目录构架的File system Hierarchy Standard (FHS)规范!唯一差别的,可能是该开放者自家开发出来的管理工具,以及套件管理的模式吧!所以说,基本上,每个Linux distributions除了构架的严禁度与选择的套件的内容外,其实差异并不太大了!下面列出几个主要的Linux distribution发行者的网址:
当然发行套件者不仅如此,您可以查阅其他的Linux新闻来发现,但是值得大书特书的是中文Linux的延伸计划:CLE这个套件,早期的Linux因为工程师发展的,而这些工程师大多以英文语系的国家为主,所以,Linux对于国人的学习是比较困难的。后来由国人发起的CLE计划:http://cle.linux.org.tw/开发很多的中文套件级翻译了很多英文文件,使得我们目前得以使用中文的Linuxne !
自由软件技术交流网:http://freesf.tnc.edu.tw/index.php
B2D:http://b2d.tnc.edu.tw/
此外,如果只想看看Linux的话,还可以选择所谓的光盘启动进入Linux的Live CD版本。
如果您还想要知道更多的Linux distributions 的下载与使用资讯,可以参考:
那我到底应该选择那一个distributions?就如同我们上面提到的,其实每个distributions差异性并不大,不过,由于套件管理的方式主要分为Debian的pkg及Red Hat系统的RPM方式,目前的建议是,先学习RPM套件管理为主的Fedora/SuSe/Mandriva等使用者众多的版本,这样,发生问题时,可以提供解决的渠道比较多。如果您已经接触过Linux了,还想要更严禁的Linux版本,那可以考虑使用Debian,如果您是以效能至上考虑,那么或许Gentoo是不错的选择,总之,版本很多,但是个个版本的差异其实不大,建议您一定要先选定一个版本,先彻底的了解他,那在继续玩其他的版本时,就可以很快的进入状态。
文章评论(0条评论)
登录后参与讨论