开源的起源:GNU与Linux

abstract: 分享这篇文章的目的是以一个故事的形式, 告诉大家, 一个小的Idea和行动逐步积累可以改变世界, 今天就来回顾一下远古的 GNU 和 Linux 的诞生, 了解开源世界之初的故事.

开源的起源:GNU与Linux


分享这篇文章的目的是以一个故事的形式, 告诉大家, 一个小的Idea和行动逐步积累可以改变世界.

关于操作系统的重要性和发展, 可能很多非计算机专业的同学不太了解, 我这里简单的说一下: 改变世界的苹果设备搭载的 MacOS 和 IOS 和非常流行的 Andorid 都是本文提到的操作系统 Unix 的后代. 而其中 GNU 的诞生对于催生 MacOS 和 Android 有着至关重要的作用, 没有 GNU, 也许我们用不到今天的智能手机.

免费, 开源, 分享, 利他主义曾经改变了世界.

GNU的诞生来源于 Richard Mathew Stallman 的一个小小的Idea, 以及坚持不懈的努力. 让我们一起看看GNU的诞生, 相信你我都会从中受到启发.

本文以下大部分转载自《鸟哥的Linux私房菜》.

Linux的诞生前

早在 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 计划的人员中,已经从该计划当中获得一些点子, Ken Thompson 就是其中一位!Thompson 因为自己的需要,希望开发一个小小的操作系统, 以提供自己的需求。在开发时,有一部 DEC (Digital Equipment Corporation) 的 PDP-7 没人使用, 于是他就准备针对这部主机进行操作系统核心程序的撰写。本来 Thompson 是没时间的, 有趣的是,在 1969 年八月份左右,刚好 Thompson 的妻儿去了美西探亲, 于是他有了额外的一个月的时间好好的待在家将一些构想实现出来! 经过四个星期的奋斗,他终于以组译语言 (Assembler) 写出了一个核心程序,同时包括一些核心工具程序, 以及一个小小的文件系统。那个系统就是 Unix 的原型! 当时 Thompson 将 Multics 庞大的复杂系统简化了不少,于是同实验室的朋友都戏称这个系统为: Unics 。 Thompson 的这个文件系统有两个重要的概念,分别是:

  • 所有的程序或系统装置都是档案
  • 不管建构编辑器还是附属档案,所写的程序只有一个目的,且要有效的完成目标。

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 的核心原始码后,着手修改成适合自己机器的版本, 并且同时增加了很多工具软件与编译程序,最终将他命名为 Berkeley Software 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 (生于 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 语言的编译程序,那就是现在相当有名的 GNU C (gcc)! 这个点相当的重要!这是因为 C 语言编译程序版本众多,但都是专利软件, 如果他写的 C 编译程序够棒,效能够佳,那么将会大大的让 GNU 计划出现在众人眼前!

但开始时并不顺利,为此,他先转而将 Emacs 编辑器写成可以在 Unix 上面跑得软件, 并公开公布原始码,因为 Emacs 太优秀了,因此,很多人便直接向他购买。此时 Internet 尚未流行, 所以,史托曼便借着 Emacs 以磁带(tape)出售,赚了一点钱 ,进而开始全力撰写其他软件。并且成立 自由软件基金会 (FSF, Free Software Foundation),请更多工程师与志工撰写软件。 终于还是完成了 GCC,这比 Emacs 还更有帮助! 此外,他还撰写了更多可以被呼叫的 C 函式库(GNU C library), 以及可以被使用来操作操作系统的基本接口 BASH shell ! 这些都在 1990 年左右完成了!

Tips: 如果纯粹使用文本编辑器来编辑程序的话,那么程序语法如果写错时, 只能利用编译时发生的错误讯息来修订了,这样实在很没有效率。 Emacs 则是一个很棒的编辑器!注意!是编辑(editor)而非编译(compiler)! 他可以很快的立刻显示出您写入的语法可能有错误的地方,这对于程序设计师来说, 实在是一个好到不能再好的工具了!所以才会这么的受到欢迎啊!

到了 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 的出现…

1991 年: 芬兰大学生 Linus Torvalds 的一则简讯

到了 1991 年,芬兰的赫尔辛基大学的 Linus Torvalds 在 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,或直接到 GNU 去: http://www.gnu.org 里面有更为深入的解说!

Tips:
为什么要称为 GNU 呢?其实 GNU 是 GNU’s Not Unix 的缩写, 意思是说, GNU 并不是 Unix 啊!那么 GNU 又是什么呢? 就是 GNU’s Not Unix 嘛!…如果您写过程序, 就会知道,这个 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 (自由软件) 是一种自由的权力,并非是『价格!』 举例来说,你可以拥有自由呼吸的权力、你拥有自由发表言论的权力, 但是,这并不代表您可以到处喝『免费的啤酒!(free beer)』,也就是说, 自由软件的重点并不是指『免费』的,而是指具有『自由度, freedom』的软件, 史托曼进一步说明了自由度的意义是: 使用者可以自由的执行、复制、再发行、学习、修改与强化自由软件。 这无疑是个好消息!因为如此一来,你所拿到的软件可能原先只能在 Unix 上面跑, 但是经过原始码的修改之后,你将可以拿他在 Linux 或者是 Windows 上面来跑!总之,一个软件挂上了 GPL 版权宣告之后,他自然就成了自由软件! 这个软件就具有底下的特色:

  • 取得软件与原始码:您可以根据自己的需求来执行这个自由软件;
  • 复制:您可以自由的复制该软件;
  • 修改:您可以将取得的原始码进行程序修改工作,使之适合您的工作;
  • 再发行:您可以将您修改过的程序,再度的自由发行,而不会与原先的撰写者冲突;
  • 回馈:您应该将您修改过的程序代码回馈于社群!

但请特别留意,您所修改的任何一个自由软件都不应该也不能这样:

  • 修改授权:您不能将一个 GPL 授权的自由软件,在您修改后而将他取消 GPL 授权~
  • 单纯贩卖:您不能单纯的贩卖自由软件。

也就是说,既然 GPL 是站在互助互利的角度上去开发的,您自然不应该将大家的成果占为己有, 而取消 GPL 授权的!对吧!因此您当然不可以将一个 GPL 软件的授权取消, 即使您已经对该软件进行大幅度的修改!那么自由软件也不能贩卖吗?当然不是!还记得上一个小节里面, 我们提到史托曼藉由贩卖 Emacs 取得一些经费,让自己生活不至于匮乏吧??是的! 自由软件是可以贩卖的,不过,不可仅贩卖该软件,应同时搭配售后服务与相关手册~ 这些可就需要工本费了呢!

很多人还是有疑问,目前不是有很多 Linux 开发商吗?为何他们可以贩卖 Linux 这个 GPL 授权的软件? 原因很简单,因为他们大多都是贩卖『售后服务!』所以,他们所使用的自由软件, 都可以在他们的网站上面下载!(当然,每个厂商他们自己开发的工具软件就不是 GPL 的授权软件了!) 但是,您可以购买他们的 Linux 光盘,如果您购买了光盘,他们会提供相关的手册说明文件, 同时也会提供您数年不等的咨询、售后服务、软件升级与其他协力工作等等的附加价值! 所以说,目前自由软件工作者,他们所赖以维生的,几乎都是在『服务』这个领域呢! 毕竟自由软件并不是每个人都会撰写,有人有需要您的自由软件时,他就会请求您的协助, 此时,您就可以透过服务来收费了!这样来说, 自由软件确实还是具有商业空间的喔!

Tips:
很多人对于 GPL 授权一直很疑惑,对于 GPL 的商业行为更是无法接受! 关于这一点,鸟哥在这里还是要再次的申明, GPL 是可以从事商业行为的! 而很多的作者也是藉由这些商业行为来得以取得生活所需,更进一步去发展更优秀的自由软件! 千万不要听到『商业』就排斥!这对于发展优良软件的朋友来说,是不礼貌的! 鸟哥的图示

上面提到的大多是与用户有关的项目,那么 GPL 对于自由软件的作者有何优点呢? 大致的优点有这些:

  • 软件安全性较佳;
  • 软件执行效能较佳;
  • 软件除错时间较短;
  • 贡献的原始码远永都存在。

这是因为既然是 Open Source 的自由软件,那么您的程序代码将会有很多人帮您查阅, 如此一来,程序的漏洞与程序的优化将会进展的很快!所以,在安全性与效能上面, 自由软件一点都不输给商业软件喔!此外,因为 GPL 授权当中,修改者并不能修改授权, 因此,您如果曾经贡献过程序代码,嘿嘿!您将名留青史呢!不错吧! _

不过,就鸟哥的观点来看, GPL 对于程序开发者的优点是相当多的,不过, 对于不熟悉程序的一般人来说, GPL 的优点其实不太容易看出来~ 首先,虽然他是随手可得的自由软件,不过,您也必须要会使用基本的编译程序才行吧! (呵呵!这也是您为何要买这本书/察看鸟哥的网站的原因吧! _) 这对于一般人来说并不容易!当然啦,如果每个人都跟 Stallman 一样神,那商业公司就不用存在啦! 嘿嘿!对于不懂程序的人来说,商业公司是一个很快速的解决之道啊! 而对于我们广大的读者群来说,认识了/学习了 Linux 与自由软件的相关技巧后, 对于未来真的是有很不错的帮助喔!

Linux的诞生与繁荣

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… 他知道,他成功了! _

image-20200505234401645

初次释出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的存在,才有了Linux发展的可能,而 Posix是IEEE指定的一个规范,老外是很看重标准化的! 】

POSIX是可携式操作系统接口(Portable Operating System Interface)的缩写,重点在规范核心与应用程序之间的接口, 这是由美国电器与电子工程师学会(IEEE)所发布的一项标准喔!

这个正确的决定让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核心的可维护能力!

*Tips:* 核心是一组程序,如果这组程序每次加入新的功能都得要重新编译与改版的话会变成如何? 想象一下,如果你只是换了显示适配器就得要重新安装新的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的吉祥物。

Tips: 奇怪的是,托瓦兹是因为小时候去动物园被企鹅咬了一口念念不忘, 而正式的2.0推出时,大家要他想一个吉祥物。他在想也想不到什么动物的情况下, 就将这个念念不忘的企鹅当成了Linux的吉祥物了…

Linux由于托瓦兹是针对386写的,跟386硬件的相关性很强,所以, 早期的Linux确实是不具有移植性的。不过,大家知道Open source的好处就是, 可以修改程序代码去适合作业的环境。因此,在1994年以后,Linux便被开发到很多的硬件上面去了! 目前除了x86之外,IBM、HP、Sun等等公司出的硬件也都有被Linux所支持呢!

话外:BSD的故事

历史

Unix谱系

PDP-11开始

最初的Unix套件源自1970年代的贝尔实验室,作业系统中包含原始码,这样研究人员以及大学都可以参与修改扩充。1974年,第一个柏克莱[注 1]的Unix系统被安装在PDP-11机器上,计算机科学系而后将其用作扩展研究。

其他大学开始对柏克莱的软件感兴趣,在1977年,柏克莱的研究生比尔·乔伊将程式整理到磁带上,作为First Berkeley Software Distribution(1BSD)发行。 1BSD被作为第六版Unix系列,而不是单独的作业系统。主要程式包括Pascal编译器,以及比尔·乔伊的ex行编辑器

Second Berkeley Software Distribution(2BSD)于1978年发布,除了对1BSD中的软件进行升级,还包括了比尔·乔伊写的两个新程式:vi文字编辑器(ex可视版本),以及C Shell。这两个新添的程式,在Unix系统中至今仍被使用。

2BSD以后的版本逐渐从PDP-11结构向VAX计算机移植。最新的2.11BSD于1992年发布,更新维护一直持续到2003年。

VAX版本

1978年,柏克莱安装了第一台VAX计算机,但将Unix移植到VAX构架的UNIX/32V,并没有利用VAX虚拟记忆体的能力。柏克莱的学生重写了32V的大部分核心,以实现虚拟记忆体的支援。1979年,3BSD诞生了,这个新系统完整包括了一个新核心、从2BSD移植到VAX的工具,还有32V原来的工具。

3BSD的成功使得美国国防高等研究计划署(DARPA)决定资助柏克莱的电脑系统研究小组(CSRG),以开发一个Unix标准平台,供DARPA未来研究。1980年10月,该小组发布了4BSD,此版本对3BSD有许多改进。

相较于VAX机器的主流系统VMS,用户对BSD时有批评。1981年6月,4.1BSD发布,比尔·乔伊大幅度提高了该版本核心的效能,使之在多个平台上与VMS相媲美。为了避免与AT&TUNIX System V(UNIX第五版)混淆,这个版本没有取名为5BSD。

4.2BSD历经两年后才得以问世,实现了多项重大改进。之前有三个中间版本相继推出:4.1a引入了BBN科技预试中的TCP/IP协定栈的修改版;4.1b引入了由马绍尔·克尔克·麦库锡克实现的新型档案系统(Berkeley Fast File System,FFS);4.1c是4.2BSD开发最后几个月的过渡版。

1983年8月,4.2BSD正式发布。这是1982年比尔·乔伊离开小组、前去建立Sun公司后的第一个版本,自那时起马绍尔·克尔克·麦库锡克和Mike Karels和一直负责领导该项目。值得一提的是,这次BSD小恶魔正式出场,最初是马绍尔·克尔克·麦库锡克的画作,出现在列印好的文件封面上,由USENIX发行。

BSD版本

1986年6月,4.3BSD发布。该版本主要是将4.2BSD的许多新贡献作效能上的提高,原来的4.1BSD没有很好地协调。在该版本之前,BSD的TCP/IP实现已经跟BBN的官方实现有较大差异。经过数月测试后,DARPA认为4.2BSD更合适,所以在4.3BSD中作了保留。 (参见网际网路历史

4.3BSD后,BSD逐渐抛开老式的VAX平台。 Computer Consoles有限公司开发的Power 6/32平台(代号为"Tahoe"),当时看来大有可为,但不久即被他们的开发员所遗弃。然后,1988年6月移植的4.3BSD-Tahoe却表现不俗,BSD将依赖于机器跟不依赖于机器的代码分离,为未来系统的可移植性打下了良好的基础。

到此为止,所有的BSD版本都混合了专属的AT&T UNIX代码,这样继续使用就需要从AT&T获得授权条款。原始码授权条款当时非常地昂贵,几个其他组织对单独的网路代码版感兴趣,完全独立于AT&T,这样就可不受授权条款的支配。 1989年6月,Networking Release 1Net/1)诞生了,没有AT&T授权也能使用,可遵照BSD授权条款进行自由再发布

1990年初,推出了4.3BSD-Reno。该版本是4.4BSD早期开发的过渡版,使用该版本被戏称为是一种赌博,因为Reno就是内华达州的赌城雷诺

Net/2以及法律问题

Net/1以后,Keith Bostic提议,BSD系统中应该有更多的非AT&T部分,以Net/1的协定发布。随后,他开始一个项目,着手重新实现一些Unix标准工具,其中不使用原来的AT&T代码。例如,Vi,也就是基于最初Unix上ed的编辑器,被重写为nvi(new vi)。 18个月后,所有AT&T的工具被替换,剩下的只是存留在核心的一些AT&T档案。残余档案被剔除后,1991年6月,Net/2诞生了,这是一个全新的作业系统,并且可以自由发布。

Net/2成为Intel 80386构架上两种移植版的主要组成部分,包括由William Jolitz负责,自由的386BSD;以及专属的BSD/OS,由Berkeley Software Design(BSDi)负责。386BSD本身虽然短命,但在不久之后成为了NetBSDFreeBSD原始代码的基础。

BSDi很快就与AT&T的Unix系统实验室(Unix System Laboratories,USL)附属公司产生了法律纠纷,后者将拥有System V著作权,以及Unix商标。 1992年,USL正式对BSDi提起诉讼,这导致Net/2发布被中止,直到其原始码能够被鉴定为符合USL的著作权。

由于最后判决悬而未决,这桩法律诉讼将BSD后裔,特别是自由软件后裔的开发,延迟了两年,这导致没有法律问题的Linux核心获得了极大的支援。Linux跟386BSD的开发几乎同时起步,其作者林纳斯·托瓦兹曾说,当时如果有基于80386平台的自由类Unix作业系统,他就可能不会创造Linux。尽管无法预料这给以后的软件业究竟造成了什么样的影响,但有一点可以肯定,Linux更加丰富了这块土壤。

4.4BSD及其后裔

这桩诉讼在1994年1月了结,更多地满足了柏克莱的利益。柏克莱套件的18,000个档案中,只有3个档案被要求删除,另有70个档案被要求修改,并显示USL的著作权说明。这项调解另外要求,USL不得对下面的4.4BSD提起诉讼,不管是用户还是柏克莱代码的分发者。

1994年6月,4.4BSD以两种形式发布:可自由再发布的4.4BSD-Lite,不包含AT&T原始码;另有4.4BSD-Encumbered,跟以前的版本一样,遵照AT&T的授权条款。

柏克莱的最终版本是1995年的4.4BSD-Lite Release 2,而后CSRG解散,在柏克莱的BSD开发告一段落。在这之后,几种基于4.4BSD的套件(比如FreeBSDOpenBSDNetBSD)得以继续维护。

另外,由于BSD授权条款的宽容,许多其他的作业系统,不管是自由还是专属,都采用了BSD的代码。例如,Microsoft WindowsTCP/IP的实现上引入了BSD代码;经过重新编译,在当前Windows版本中,还采用了许多BSD命令行下的网路工具。

参考

[1]BSD 中文 wiki

https://zh.wikipedia.org/wiki/BSD

[2]鸟哥的私房菜-Linux的发展

http://linux.vbird.org/linux_basic/0110whatislinux.php#torvalds

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值