鸟哥的 Linux 私房菜.pdf

什么是 Linux 计算器:计算的辅助工具 1.2 什么是操作系统? Linux 之前,Unix 的历史 关于 GNU 计划 Torvalds 的 Linux 发展 与 Minix 之间 对 386 硬件的多任务测试 初次释出 Linux 0.02 Linux 的发展:虚拟团队的产生 Linux distributions Linux 的特色 Linux 的特色 Linux 的优缺点 其它 Linux 相关

内容截取

众所皆知的, Linux 的核心原型是 1991 年由托瓦兹 (Linus Torvalds) 写出来的,但是托瓦兹为何可以写 出 Linux 这个操作系统?为什么他要选择 386 的计算机来开发? 为什么 Linux 的发展可以这么迅速? 又为什么 Linux 是免费的? 以及目前为何有这么多的 Linux 版本 (distributions) 呢? 了解这些东西后, 才能够知道为何 Linux 可以免除专利软件之争, 并且了解到 Linux 为何可以同时在个人计算机与大型主 机上面大放异彩! 所以,在实际进入 Linux 的世界前,就让我们来谈一谈这些有趣的历史故事吧! ^_^

1. 什么是 Linux
1.1 计算器:计算的辅助工具 1.2 什么是操作系统?
1.3 Linux 之前,Unix 的历史
1.4 关于 GNU 计划
2. Torvalds 的 Linux 发展 2.1 与 Minix 之间
2.2 对 386 硬件的多任务测试 2.3 初次释出 Linux 0.02
2.4 Linux 的发展:虚拟团队的产生
2.5 Linux distributions
3. Linux 的特色
3.1 Linux 的特色
3.2 Linux 的优缺点
3.1 其它 Linux 相关
4. 重点回顾
5. 本章练习
6. 参考数据

什么是 Linux ? Linux 这玩意儿是在计算机上面运作的,所以,当然得要了解一下计算机这玩意儿。首先,到底有哪些种 类的计算机呢? 而 Linux 可以在哪些种类的计算机上面运作?且 Linux 源自哪里?这些我们都得来谈
一谈先!
计算器:计算的辅助工具
在目前的都市生活中,您应该很难不接触到计算机这个玩意儿吧? 这个计算机当初在开发的时候,是希望 可以辅助与简化人们进行大量的运算工作, 后来才发展成为一些特殊用途。无论如何,计算机基本的功能
就是:『接受使用者输入指令,经由 CPU 的数学与逻辑单元运算处理后, 以产生或储存成有用的信息』。
为了达成这个功能,当然计算机就必须要有:
• 输入单元:例如鼠标、键盘、卡片阅读机等等

• 中央处理器(CPU):含有算数逻辑、控制、记忆等单元 • 输出单元:例如屏幕、打印机等等
如果您看过计算机的话,那么上面的东西其实就是组成您计算机的主要组件啰! 而为了连结各个组件,因 此有了主机板,所以,您的主机里面就包含了主机板以及 CPU , 还有各种需要的适配卡。而屏幕、键盘、
鼠标则透过与主机的连结,就构成一部可以运作的计算机了。 另外,由于计算机仅认识 0/1 ,因此计算
机主要是以二进制的方式来计算的, 因此,通常计算机的记忆/储存单位都是以 Byte 或 bits 为基本单
位。他们的单位是这样的:

1 Bytes = 8 bits • 1 KB = 1024 Bytes • • 1 MB = 1024 KB 1 GB = 1024 MB
而计算机也因为他的复杂度,而分为数种等级,例如:
• 超级计算机(Supercomputer): 超级计算机是运作速度最快的计算机,但是他的维护、操作费用也最高! 主要是用于需要有高速 计算的计划中。例如:国防军事、气象预测、太空科技, 用在模拟的领域较多。详情也可以参考:
国家高速网络与计算中心http://www.nchc.org.tw/ 的介绍!至于全世界的 500 大超级计算机,
则请参考:http://www.top500.org/ • 大型计算机(Mainframe Computer): 大型计算机通常也具有数个高速的 CPU ,功能上虽不及超级计算机, 但也可用来处理大量资料 与复杂的运算。例如大型企业的主机、 全国性的证券交易所等每天需要处理数百万笔数据的企业
机构, 或者是大型企业的数据库服务器等等。 • 迷你计算机(Minicomputer): 迷你计算机仍保有大型计算机同时支持多使用者的特性,但是主机可以放在一般作业场所, 不必 像前两个大型计算机需要特殊的空调场所。通常用来作为科学研究、 工程分析与工厂的流程管理
等。 • 微电脑(Microcomputer): 又可以称为个人计算机,也是我们这本书主要探讨的目标!体积最小,价格最低, 但功能还是五 脏俱全的!大致又可分为桌上型、笔记型等等。
虽然在目前个人计算机的使用甚为广泛,但是在 1990 年以前,个人计算机是比较不被重视的! 因为(1) 他的运算速度在当时实在很差,而且(2)当时比较有名的操作系统也没有对个人计算机支持。 所以才会流
行不太起来~ 嘿嘿!提到操作系统啰~ 底下我们就来谈一谈之前的操作系统。
什么是操作系统
什么是操作系统 (Operation System, OS) 呢?我们先来想一想, 上面介绍的计算器(计算机)是如何工作 的?举例来说,您计算机屏幕上面显示的讯息, 是如何显示出来的呢?嗯!是藉由显示卡与屏幕显像的。
那么如果你想要看 VCD 呢? 呵呵,就需要 1.)有影音数据的光盘片、 2.)可读取光盘片的光驱、 3.) 可
以转换影音数据输出的中央处理器 (CPU)、 4.)可以显示影像的显示芯片(显示卡)、 5.) 可以传输声音的
音效芯片(声卡)、 6.)可以输出影像的屏幕以及 7.)可以发出声音的喇叭! 也就是说:所有在『工作』的
东西都是『硬件』呀! 对啦!就是硬件在工作!

那么问题来了,现在我们知道,计算机所进行的工作都是计算机硬件帮我们达成的,但是, 为什么这些硬 件知道如何播放 VCD 呢?这当然是因为有某个东西在正确的控制硬件的工作了, 那个咚咚就是: 操作系
统 啦! 操作系统可以管理整部计算机的硬件,他可以控制 CPU 进行正确的运算, 他可以分辨硬盘里头
的数据并进行读取,他还必须要能够认识所有的适配卡,这样,才能够将所有的硬件通通正确的使用上啊!
所以,如果没有这个操作系统,那么您的计算机就等于是一堆废铁而已啊!
虽然操作系统可以完整的掌控所有的硬件资源,但是,对于使用者来说,还是不够的! 因为操作系统虽然 可以掌控所有的硬件,但是,如果使用者无法与操作系统沟通, 那么这个操作系统就没有什么用处了。简
单的来说,以上面的 VCD 为例, 虽然操作系统可以控制硬件播放 VCD ,但是,如果使用者没有办法控制
何时要播出 VCD 的话, 那么到底我们要怎么看 VCD 啊?对吧!
所以说,一个比较『完整的操作系统』应该要包含 两个东西,一个是『核心与其提供的接口工具』、 一 个是『利用核心提供的接口工具所开发出来的软件』。 我们以大家常使用的 Windows 计算机来做一个简
单的说明好了。大家应该都使用过 Windows 计算机里面的『档案总管』吧!当你开启档案总管的时候,他
就会显示你硬盘当中的数据, 这个『显示硬盘里面的数据,就是核心帮你做的』,但是, 『你要核心去
显示硬盘哪一个目录下的数据,则是由档案总管这个工具帮你达成的』! 这样可以理解吗?
那么核心有没有作不到的事?当然有的,举例来说, 如果您曾经自行安装过比较新的显示卡在您的个人计 算机上面,那么应该常常会发生 Windows 计算机告知您:『找不到合适的驱动程序来显示』的问题吧? 也
就是说,即使您有最新的显示卡安装在您的个人计算机上面,而且也有播放 VCD 的程序, 但是因为『核
心』无法操控这个最新的显示卡,所以,就无法正常的显示您的 VCD 了。 没错!你的整个硬件是由核心
来管理的,而如果核心不认识你的硬件, 那么你将无法使用该硬设备,例如上面提到的最新的显示卡。
Tips:
在定义上,只要能够让计算机硬件正确无误的运作,那就算是操作 系统了。所以说,操作系统其实就是核心与其提供的接口工具,不
过,就如同上面讲的,因为最阳春的核心缺乏了与使用者沟通的亲
和接口, 所以在目前,一般我们提到的『操作系统』都会包含核
心与相关的使用者应用软件呢!
核心就是『Kernel』, 他是一个操作系统的最底层的东西,由他来掌管整个硬件资源的工作状态,而 每 个操作系统都有自己的核心,所以说, 当有新的硬件加入到你的系统中的时候,若你的『 Kernel 』并没
有支援他的时候,呵呵,这个新的硬件就肯定无法工作的,因为控制他的 Kernel 并不认识他呀!这样了
解了吗?!先有个概略性的了解, 后面我们提到『核心编译』的时候会再更详细的谈到他!
一般来说,Kernel 为了达成使用者所需要的正确运算结果,他必须要管理的事项有:
• 系统呼叫接口(System call interface) : 为了方便程序开发者可以轻易的透过与 kernel 的沟 通,将硬件的资源进一步的利用, 于是需要有这个简易的接口来方便程序开发者。 • 行程管理(Processcontrol) : 总有听过所谓的『多任务环境』吧?一部计算机可能同时间有很 多的工作跑到 CPU 等待运算处理, Kernel 这个时候必须要能够控制这些工作,让 CPU 的资源
作有效的分配才行! • 内存管理(Memorymanagement) : 控制整个系统的内存管理,若内存不足, Kernel 最好还能够 提供虚拟内存的功能!

• 档案系统管理(File system management) : 档案系统的管理,例如数据的输入输出 (I/O) 等等 的工作啦! 还有不同档案格式的支持啦等等,如果你的核心不认识某个档案系统, 那么您将无
法使用该档案格式的档案啰!例如: Windows 98 就不认识 NTFS 档案格式的硬盘; • 装置的驱动(Device drivers) : 就如同上面提到的,硬件的管理是 Kernel 的主要工作之一, 当然啰,装置的驱动程序就是核心需要做的事情啦! 好在目前都有所谓的『可加载模块』功能,
可以将驱动程序编辑成模块, 就不需要重新的编译核心啦!这个也会在后续的核心编译当中提到
的!
所以啦!所有硬件的资源都是 kernel 来管理的!至于我们要达成一些工作时,除了藉由核心本身提供的 功能 ( 例如上面提到的档案总管 ) 之外,还可以藉由其它的应用软件来达成喔!举个例子来说,你要看
VCD 影片是吧!那么除了 Windows 提供的媒体播放程序之外,你也可以自行安装 VCD 播放程序来播放 VCD
啰!这个播放程序就是应用软件啰,而这个应用软件可以帮你去控制核心来工作 ( 就是放映影片啰 ) ,
因此,我们可以这样说, 核心是控制整个硬件支持的咚咚,也是一个操作系统的最底层, 然而要让整个
操作系统更完备的话,那还需要含有相当丰富的核心提供的工具, 以及核心相关的应用软件来支持。
OK!提到这里那么您知道 Linux 是什么了吗?呵呵!对啦!其实 Linux 就是一个操作系统,这个操作系 统里头含有最主要的 kernel 以及 kernel 提供的工具啦!他提供了一个完整的操作系统当中最底层的硬
件控制与资源管理的完整架构, 这个架构是沿袭 Unix 良好的传统来的,所以相当的稳定而功能强大!此
外, 由于这个优良的架构可以在目前的个人计算机(X86 系统 ) 上面跑, 所以很多的软件开发者将他们
的工作心血移转到这个架构上面,那就是很多的应用软件啦! 虽然 Linux 仅是其核心与核心提供的工具,
不过,由于核心、核心工具与这些软件开发者提供的软件的整合,使得 Linux 成为一个更完整的、功能强
大的操作系统啰!我们可以将 Linux 的系统与使用者的相关性看成底下的图示:
图一、使用者、使用者接口与核心工具、核心、与硬件之相关性

约略了解 Linux 是何物之后,接下来,我们要谈一谈,『为什么说 Linux 是很稳定的操作系统呢?他是 如何来的?』
Tips:
Torvalds 先生在写出 Linux 的时候,其实该核心仅能『驱动 386 所有的硬件』而已, 所谓的『让 386 计算机开始运作,并且等待
使用者指令输入』而已,事实上, 当时能够在 Linux 上面跑得软
件还很少呢!
Tips:
由上面的说明中,我们知道硬件是由『核心』来控制的,而每种操 作系统都有他自己的核心。 这就产生了一个很大的问题,因为早
期硬件的开发者所开发的硬件架构或多或少都不相同,举例来说,
2006年以前的麦金塔是请 IBM 公司开发自己的硬件与操作系统,
Windows 则是开发在 x86 架构上的操作系统之一,那么 Windows
是否可以在麦金塔上面跑?答案是『不行』的!不过,在 2006 年
以后, 麦金塔转而请 Intel 设计其硬件架构,亦即其硬件架构已
经转为 x86 系统,因此在 2006 年以后的麦金塔若使用 x86 架构
时,其硬件则『可能』可以安装 Windows 操作系统了。
Tips:
因为 Windows 操作系统本来就是针对个人计算机 x86 架构的硬 件去设计的,所以他当然只能在 x86 的个人计算机上面运作,在
不同的平台,当然就无法运行了。也就是说, 每种操作系统都是
在他专门的机器上面运行的喔!这点得要先了解。不过,Linux 由
于是 Open Source 的操作系统,所以他的程序代码可以被修改成
适合在各种机器上面运行的, 也就是说, Linux 是具有『可移植
性』,这可是很重要的一个功能喔! ^_^
Linux 之前, Unix 的历史
早在 Linux 出现之前的二十年 ( 大约在 1970 年代 ), 就有一个相当稳定而成熟的操作系统存在了!那 就是 Linux 的老大哥『 Unix 』是也! 怎么这么说呢?!他们这两个家伙有什么关系呀?这里就给他说
一说啰!众所皆知的, Linux 的核心是由 Linus Torvalds 在 1991 年的时候给他开发出来的, 并且丢
到网络上提供大家下载,后来大家觉得这个小东西 ( Linux Kernel ) 相当的小而精巧,所以慢慢的就有
相当多的朋友投入这个小东西的研究领域里面去了! 但是为什么这的小东西这么棒呢?!然而又为什么大
家都可以免费的下载这个东西呢?! 嗯!等鸟哥慢慢的唬xx….喔不!听我慢慢的道来!
• 1969 年以前:一个没有完成的梦想: Bell, MIT 与 GE 的『 Multics』系统 早期的计算机并不像现在的个人计算机一样,他可不是一般人碰的起的呢~ 除非是军事或者是高 科技用途,或者是学术单位的学术研究,否则,真的很难接触到。 非但如此,早期的计算机架构
还很难使用,除了运算速度并不快之外,操作接口也很困扰的! 在那个时候,写程序是件很可怜
的事情,因为,程序设计者,必须要将程序相关的信息在读卡纸上面打洞, 然后再将读卡纸插入
卡片阅读机来将信息读入主机中运算。光是这样就很麻烦了,如果程序有个小地方写错, 哈哈!
光是重新打卡就很惨,加上主机少,使用者众多,光是等待,就耗去很多的时间了!

在之后,经由操作系统的改良,使得后来可以使用键盘来进行信息的输入/输出。 不过,在一间 学校里面,主机毕竟可能只有一部,如果多人等待使用,那怎么办? 好在 1960 年代初期麻省理
工学院 (MIT) 发展了所谓的: 『兼容分时系统( Compatible Time-Sharing System, CTSS )』,
它可以让大型主机透过提供数个终端机(terminal)以联机进入主机,来利用主机的资源进行运算
工作。 架构有点像这样:
图二、早期主机与终端机的相关性图标
如此一来,无论主机在哪里,只要在终端机前面进行输入输出的作业,就可利用主机提供的功能 了。 不过,需要注意的是,此时终端机只具有输入/输出的功能,本身完全不具任何运算或者软
件安装的能力。 而且,比较先进的主机大概也只能提供 30 个不到的终端机而已。
为了更加强化大型主机的系统,以让主机的资源可以提供更多使用者来利用,所以在 1965 年前 后, 由贝尔实验室 (Bell)、麻省理工学院 (MIT) 及奇异公司 (GE) 共同发起了 Multics 的计
划,Multics 目的是想要让大型主机可以达成提供 300 个以上的终端机联机使用的目标。不过,
到了 1969 年前后,计划进度落后,资金也短缺,所以该计划就宣告不治…..喔!是宣告失败~
(注: Multics 有复杂、多数的意思存在。) • 1969 年: Ken Thompson 的小型 file server system 在认为 Multics 计划不可能成功之后,贝尔研究室 就退出该计划。不过,原本参与 Multics 计 划的人员中,已经从该计划当中获得一些点子, KenThompson 就是其中一位!Thompson 因为自
己的需要,希望开发一个小小的操作系统, 以提供自己的需求。在开发时,有一部 DEC(Digital
EquipmentCorporation) 的 PDP-7 没人使用, 于是他就准备针对这部主机进行操作系统核心程
序的撰写。本来 Thompson 是没时间的, 有趣的是,在 1969 年八月份左右,刚好 Thompson 的
妻儿去了美西探亲, 于是他有了额外的一个月的时间好好的待在家将一些构想实现出来! 经过
四个星期的奋斗,他终于以组译语言 (Assembler) 写出了一个核心程序,同时包括一些核心工具
程序, 以及一个小小的档案系统。那个系统就是 Unix 的原型! 当时 Thompson 将 Multics 庞
大的复杂系统简化了不少,于是同实验室的朋友都戏称这个系统为: Unics 。 Thompson 的这个
档案系统有两个重要的概念,分别是:
o 所有的程序或系统装置都是档案 o 不管建构编辑器还是附属档案,所写的程序只有一个目的,且要有效的完成目标。
这些概念在后来对于 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 在此时当然是不容易被一般人所
接受的! 此外,也需要特别强调,由于 Unix 是以较高阶的 C 语言写的,相对于组译语言需要
与硬件有密切的配合, 高阶的 C 语言与硬件的相关性就没有这么大了!所以,这个改变也使得
Unix 很容易被移植到不同的机器上面喔! • 1977 年: 重要的 Unix 分支: BSD 的诞生 前面说到,虽然贝尔属于 AT&T ,但是 AT&T 此时对于 Unix 是采取开放的态度,此外,Unix 是 以高阶的 C 语言写成的,理论上是具有可移植性的! 所以,只要取得 Unix 的原始码,并且针
对大型主机的特性加以修订原有的原始码( Source Code ), 就可能将 Unix 移植到另一部不同
的主机上头了。所以在 1973 年以后, Unix 便得以与学术界合作开发!最重要的接触就是与加
州柏克莱 ( Berkeley ) 大学的合作了。 柏克莱大学的 Bill Joy 在取得了 Unix 的核心原始码
后,着手修改成适合自己机器的版本, 并且同时增加了很多工具软件与编译程序,最终将他命名
为 BerkeleySoftwareDistribution(BSD) 。这个 BSD 是 Unix 很重要的一个分支, BillJoy
也是 Unix 业者『 Sun 』这家公司的创办者! Sun 公司即是以 BSD 发展的核心进行自己的商业
Unix 版本的发展的。 (后来可以安装在 x86 硬件架构上面 FreeBSD 即是 BSD 改版而来!) • 1979 年: 一个措手不及的版权宣告!
由于 Unix 的高度可移植性与强大的效能,加上当时并没有版权的纠纷, 所以让很多商业公司开 始了 Unix 操作系统的发展,例如 AT&T 自家的 SystemV、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 这个 UnixLike
的核心程序! 在撰写的过程中,为了避免版权纠纷,谭宁邦完全不看 Unix 核心原始码! 并且
强调他的 Minix 必须能够与 Unix 兼容才行!谭宁邦在 1984 年开始撰写核心程序, 到了 1986
年终于完成,并于次年出版 Minix 相关书籍,同时与新闻群组相结合~
这个 Minix 版本比较有趣的地方是,他并不是完全免费的,无法在网络上提供下载! 必须要透 过磁盘/磁带购买才行!虽然真的很便宜~不过,毕竟因为没有在网络上流传, 所以 Minix 的传
递速度并没有很快速!此外,购买时,随磁盘还会附上 Minix 的原始码! 这意味着使用者可以
学习 Minix 的核心程序设计概念喔! (这个特色对于 Linux 的启始开发阶段,可是有很大的关
系喔!) 此外,开发者仅有谭宁邦教授,因为学者很忙啊!加上谭宁邦始终认为 Minix 主要用在
教育用途上面, 所以对于 Minix 是点到为止!所以, Minix 很受欢迎没错, 不过,使用者的
要求/需求的声音可能就比较没有办法上升到比较高的地方了! 这样说,您明白吧??? ^_^ • 1984 年之二: GNU 与 FSF 计划的成立 RichardMathewStallman(史托曼) 在 1984 年发起的 GNU 计划,对于现今的自由软件风潮,真 有不可磨灭的地位!目前我们所使用得很多自由软件,几乎均直接或间接帮助于 GNU 这个计划呢!
那么史托曼是何许人也?为何他会发起这个 GNU 计划呢?
RichardMathewStallman(生于 1953 年,网络上自称的 ID 为 RMS) 从小就很聪明!他在 1971 年的时候,进入黑客圈中相当出名的人工智能实验室(AI Lab.), 这个时候的黑客专指计算机功
力很强的人,而非破坏计算机的怪客 (cracker) 喔! 当时的黑客圈对于软件的着眼点几乎都是
在『分享』,所以并没有专利方面的困扰! 这个特色对于史托曼的影响很大!不过,后来由于管
理阶层的问题,导致实验室的优秀黑客离开该实验室, 并且进入其它商业公司继续发展优秀的软
件。但史托曼并不服输,仍然持续在原来的实验室开发新的程序与软件。 后来,他发现到,自己
一个人并无法完成所有的工作,于是想要成立一个开放的团体来共同努力!
1983 年以后,因为实验室硬件的更换,使得史托曼无法继续以原有的硬件与操作系统继续自由程 序的撰写~ 而且他进一步发现到,过去他所使用的 Lisp 操作系统,是麻省理工学院的专利软件,
是无法共享的,这对于想要成立一个开放团体的史托曼是个阻碍。于是他便放弃了 Lisp 这个系
统。 后来,他接触到 Unix 这个系统,并且发现, Unix 在理论与实际上,都可以在不同的机器
间进行移植。 于是他开始转而使用 Unix 系统。因为 Lisp 与 Unix 是不同的系统, 所以,他
原本已经撰写完毕的软件是无法在 Unix 上面运行的!为此,他就开始将软件移植到 Unix 上面。
并且,为了让软件可以在不同的平台上运作, 因此,史托曼将他发展的软件均撰写成可以移植的
型态!
1984 年,史托曼开始 GNU 计划,这个计划的目的是想要: 建立一个自由的开放的 Unix 操作系 统。 但是建立一个操作系统谈何容易啊!而且在当时的 GNU 是仅有自己一个人单打独斗的史托
曼~ 这实在太麻烦,但又不能不做这个计划,于是史托曼反其道而行~『既然操作系统太复杂,
我就先写可以在 Unix 上面运行的小程序,这总可以了吧?呵呵!』在这个想法上, 史托曼便开
始了程序的写作。在写作期间,为了不让自己吃上官司,他绝对不看专利软件的原始码! 为了这

个计划,他开始使用原本 Unix 上面跑的软件, 并自行撰写功能与 Unix 原有专利软件相仿的软 件。
但不论是什么软件,都得要进行编译成为二进制档案(binary file)后才能够执行, 因此他便开 始撰写 C 语言的编译器,那就是现在相当有名的 GNUC(gcc)! 这个点相当的重要!这是因为 C
语言编译器版本众多,但都是专利软件, 如果他写的 C 编译器够棒,效能够佳,那么将会大大
的让 GNU 计划出现在众人眼前!
Tips:
我们在前面稍微提过,计算机仅认识 0/1 的数据,但是人类不认 识啊!人类对于纯文字的数据(就是所谓的 ASCII 档案格式)比较
有感觉。 但是偏偏计算机又不认识 ASCII 格式的文字,很头痛,
不是吗? 为此,就会有很多的所谓的『编译器』来辅助我们撰写
程序。 我们一般使用文字编辑器以 ASCII 纯文字格式来撰写程
序, 再透过所谓的『编译器(compiler)』』将刚刚完成的文本文
件『编译』成为计算机认识的二进制制(binaryfile)的档案,以
让计算机认识且可以执行的程序啊!
但开始时并不顺利,为此,他先转而将 Emacs 编辑器写成可以在 Unix 上面跑得软件, 并公开 公布原始码,因为 Emacs 太优秀了,因此,很多人便直接向他购买。此时 Internet 尚未流行,
所以,史托曼便借着 Emacs 以磁带(tape)出售,赚了一点钱 ,进而开始全力撰写其它软件。并
且成立 自由软件基金会 (FSF,FreeSoftwareFoundation),请更多工程师与志工撰写软件。 终
于还是完成了 GCC,这比 Emacs 还更有帮助!此外,他还撰写了更多可以被呼叫的 C 函式库(GNU
C library), 以及可以被使用来操作操作系统的基本接口 BASH shell ! 这些都在 1990 年左
右完成了!
Tips:
如果纯粹使用文字编辑器来编辑程序的话,那么程序语法如果写错 时, 只能利用编译时发生的错误讯息来修订了,这样实在很没有
效率。 Emacs 则是一个很棒的编辑器!注意!是编辑(editor)而
非编译(compiler)! 他可以很快的立刻显示出您写入的语法可能
有错误的地方,这对于程序设计师来说, 实在是一个好到不能再
好的工具了!所以才会这么的受到欢迎啊!
到了 1985 年,为了避免 GNU 所开发的自由软件被其它人所利用而成为专利软件, 所以他与律 师草拟了有名的通用公共许可证 (GeneralPublicLicense,GPL), 并且称呼他为 copyleft(相
对于专利软件的 copyright!)。 关于 GPL 的相关内容我们在下一个小节继续谈论,在这里,必
须要说明的是, 由于有 GNU 所开发的几个重要软件,如:
o Emacs o GNU C (GCC) o GNU C Library (glibc) o Bash shell
造成后来很多的软件开发者可以藉由这些基础的工具来进行程序开发!进一步壮大了自由软件团 体!这是很重要的!不过,对于 GNU 的最初构想 『建立一个自由的 Unix 操作系统』来说,有

这些优秀的程序是仍无法满足, 因为,当下并没有『自由的 Unix 核心』存在…..所以这些软 件仍只能在那些有专利的 Unix 平台上工作~~一直到 Linux 的出现…… • 1988 年: 图形接口 XFree86 计划
有鉴于图形使用者接口 (GraphicalUserInterface,GUI) 的需求日益加重,在 1984 年由 MIT 与其它协力厂商首次发表了 X Window System ,并且更在 1988 年成立了非营利性质的 XFree86
这个组织。所谓的 XFree86 其实是 X Window System + Free + x86 的整合名称呢! 而这个
XFree86 的 GUI 界面更在 Linux 的核心 1.0 版于 1994 年释出时,整合于 Linux 操作系统当
中!
Tips:
为什么称图形使用者接口为 X 呢?因为由英文单字来看,Window 的 W 接的就是 X 啦!意指 Window 的下一版就是了! 需注意的
是, X Window 并不是 X Windows 喔!
• 1991 年: 芬兰大学生 Linus Torvalds 的一则简讯 到了 1991 年,芬兰的赫尔辛基大学的 Linus Torvalds 在 BBS 上面贴了一则消息, 宣称他以 bash,gcc 等工具写了一个小小的核心程序,这个核心程序可以在 Intel 的 386 机器上面运作,
让很多人很感兴趣!从此开始了 Linux 不平凡的路程!
关于 GNU 计划
1984 年创立 GNU 计划与 FSF 基金会的 Stallman 先生认为, 写程序最大的快乐就是让自己发展的良好 的软件让大家来使用了! 而既然程序是想要分享给大家使用的,不过,每个人所使用的计算机软硬件并不
相同, 既然如此的话,那么该程序的原始码 (Sourcecode) 就应该要同时释出, 这样才能方便大家修改
而适用于每个人的计算机中呢!这个将原始码释出的举动, 就称为 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,或直接到 GNU 去:
http://www.gnu.org 里面有更为深入的解说!
Tips:
为什么要称为 GNU 呢?其实 GNU 是 GNU’sNotUnix 的缩写,意 思是说, GNU 并不是 Unix 啊!那么 GNU 又是什么呢? 就是
GNU’sNotUnix 嘛!…..如果您写过程序, 就会知道,这个 GNU
= GNU’s Not Unix 可是无穷循环啊!忙碌~
另外,什么是 Open Source 呢?所谓的 source 是程序发展者写 出的原始程序代码, Open Source 就是,软件在发布时,同时将
作者的原始码一起公布的意思!
那么这个 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 (自由软件) 是一种自由的权力,并非是『价格!』 举例来说,你可以拥有自 由呼吸的权力、你拥有自由发表言论的权力,但是,这并不代表您可以到处喝『免费的啤酒!(freebeer)』,
也就是说, 自由软件的重点并不是指『免费』的,而是指具有『自由度,freedom』的软件, 史托曼进一
步说明了自由度的意义是: 使用者可以自由的执行、复制、再发行、学习、修改与强化自由软件。 这无
疑是个好消息!因为如此一来,你所拿到的软件可能原先只能在 Unix 上面跑, 但是经过原始码的修改之
后,你将可以拿他在 Linux 或者是 Windows 上面来跑!总之,一个软件挂上了 GPL 版权宣告之后,他自
然就成了自由软件! 这个软件就具有底下的特色:
• 取得软件与原始码:您可以根据自己的需求来执行这个自由软件; • 复制:您可以自由的复制该软件; • 修改:您可以将取得的原始码进行程序修改工作,使之适合您的工作; • 再发行:您可以将您修改过的程序,再度的自由发行,而不会与原先的撰写者冲突; • 回馈:您应该将您修改过的程序代码回馈于社群!
但请特别留意,您所修改的任何一个自由软件都不应该也不能这样:
• 修改授权:您不能将一个 GPL 授权的自由软件,在您修改后而将他取消 GPL 授权~ • 单纯贩卖:您不能单纯的贩卖自由软件。
也就是说,既然 GPL 是站在互助互利的角度上去开发的,您自然不应该将大家的成果占为己有, 而取消 GPL 授权的!对吧!因此您当然不可以将一个 GPL 软件的授权取消, 即使您已经对该软件进行大幅度的
修改!那么自由软件也不能贩卖吗?当然不是!还记得上一个小节里面, 我们提到史托曼藉由贩卖 Emacs
取得一些经费,让自己生活不至于匮乏吧??是的! 自由软件是可以贩卖的,不过,不可仅贩卖该软件,
应同时搭配售后服务与相关手册~ 这些可就需要工本费了呢!
很多人还是有疑问,目前不是有很多 Linux 开发商吗?为何他们可以贩卖 Linux 这个 GPL 授权的软件? 原因很简单,因为他们大多都是贩卖『售后服务!』所以,他们所使用的自由软件, 都可以在他们的网站
上面下载!(当然,每个厂商他们自己开发的工具软件就不是 GPL 的授权软件了!) 但是,您可以购买他
们的 Linux 光盘,如果您购买了光盘,他们会提供相关的手册说明文件, 同时也会提供您数年不等的咨
询、售后服务、软件升级与其它协力工作等等的附加价值! 所以说,目前自由软件工作者,他们所赖以维
生的,几乎都是在『服务』这个领域呢! 毕竟自由软件并不是每个人都会撰写,有人有需要您的自由软件
时,他就会请求您的协助, 此时,您就可以透过服务来收费了!这样来说, 自由软件确实还是具有商业
空间的喔!

相关文件下载地址
©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!

本站原创文章,作者:小 编,如若转载,请注明出处:https://www.mzbky.com/1135.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小 编的头像小 编新注册
上一篇 2020年1月6日 下午11:17
下一篇 2020年1月7日 下午10:11

相关推荐

发表回复

登录后才能评论