Linux 和 GNU 工程

什么是linux

linux操作系统(linux),是一种计算机操作系统。linux操作系统的内核的名字也是“linux”。linux操作系统也是自由软件和开放源代码发展中最著名的例子。

在开始的时候,linux只是个人狂热爱好的一种产物。但是现在,linux已经成为了一种受到广泛关注和支持的一种操作系统。包括ibm和惠普在内的一些计算机业巨头也开始支持linux。很多人认为,和其他的商用unix系统以及微软 windows相比,作为自由软件的linux具有低成本,安全性高,更加可信赖的优势。

linux内核最初只是由芬兰人林纳斯•托瓦兹(linus torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。最初的设想中,linux是一种类似minix这样的一种操作系统。linux的第一个版本在1991年9月被发布在internet上,随后在10月份第二个版本就发布了。

linux的历史是和gnu紧密联系在一起的。从1983年开始的gnu计划致力于开发一个自由并且完整的类unix操作系统,包括软件开发工具和各种应用程序。到1991年linux内核发布的时候,gnu已经几乎完成了除了系统内核之外的各种必备软件的开发。在linus torvalds和其他开发人员的努力下,gnu组件可以运行于linux内核之上。整个内核是基于gnu通用公共许可,也就是gpl(general pubic license)的,但是linux内核并不是gnu 计划的一部分。

linux的标志和吉祥物是一只名字叫做tux的企鹅,linux的注册商标是linus torvalds所有的。这是由于在1996年,一个名字叫做william r. della croce的律师开始向各个linux发布商发信,声明他拥有linux商标的所有权,并且要求各个发布商支付版税,这些发行商集体进行上诉,要求将该注册商标重新分配给linus torvalds。

linux的某些版本是不需要安装就能使用的版本,他们称为livecd

什么是GNU

GNU计划,又称革奴计划,是由richard stallman在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。richard stallman最早是在net.unix-wizards新闻组上公布该消息,并附带一份《gnu宣言》等解释为何发起该计划的文章,其中一个理由就是要“重现当年软件界合作互助的团结精神”。
Stallman 倡导 FSF 的宗旨,是要建立一个软体 free 的王国。他所谓的 free 并不是意谓著便宜或免费,因为在 FSF 下的有些软体还是必需付些工本费。他所谓的 free 是指使用上的自由。

GNU 的本意代表 "Gnu"s Not Unix";虽然如此,它却是一个与 UNIX 完全相容的软体系统。二者最大不同在於,GNU 是一个 free 的 软体, UNIX 却是一个要付费的软体系统。stallman宣布gnu应当发音为guh-noo,与canoe发音相同,以避免与gnu(非洲牛羚,发音与new相同)这个单词混淆。unix是一种广泛使用的商业操作系统的名称。
由于gnu将要实现unix系统的接口标准,因此gnu计划可以分别开发不同的操作系统部件。
gnu计划采用了部分当时已经可自由使用的软件,例如tex排版系统和x window视窗系统等。不过gnu计划也开发了大批其他的自由软件。

为保证gnu软件可以自由地“使用、复制、修改和发布”,所有gnu软件都在一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款,gnu通用公共许可证(gnu general public license,gpl)。这个就是被称为“反版权”(或称copyleft)的概念。

1985年Richard Stallman又创立了自由软件基金会(Free Software Foundation, FSF)。

到了1990年,gnu计划已经开发出的软件包括了一个功能强大的文字编辑器emacs,c语言编译器gcc,以及大部分unix系统的程序库和工具。唯一依然没有完成的重要组件就是操作系统的内核(称为hurd)。

1991年linus torvalds编写出了与unix兼容的linux操作系统内核并在gpl条款下发布。linux之后在网上广泛流传,许多程序员参与了开发与修改。1992年linux与其他gnu软件结合,完全自由的操作系统正式诞生。(尽管如此gnu计划自己的内核hurd依然在开发中,目前已经发布beta版本。)

许多unix系统上也安装了gnu软件,因为gnu软件的质量比之前unix的软件还要好。gnu工具还被广泛地移植到windows和mac os上。

注:以上内容来自维基百科gnu词条(http://zh.wikipedia.org/wiki/gnu)

gnu/linux是什么玩意儿

通过回答上面两个问题,我们很明显可以注意到linux只是一个操作系统内核而已,而gnu提供了大量的自由软件来丰富在其之上各种应用程序。

因此,严格来讲,linux这个词本身只表示linux内核,但在实际上人们已经习惯了用linux来形容整个基于linux内核,并且使用gnu 工程各种工具和数据库的操作系统。基于这些组件的linux软件被称为linux发行版。一般来讲,一个linux发行套件包含大量的软件,比如软件开发工具,数据库,web服务器(例如apache),x window,桌面环境(比如gnome和kde),办公套件(比如openoffice.org),等等。

绝大多数基于linux内核的操作系统使用了大量的gnu软件,包括了一个shell程序、工具、程序库、编译器及工具,还有许多其他程序,例如emacs。正是由于linux使用了许多gnu程序,gnu计划的开创者richard stallman博士提议将linux操作系统改名为gnu/linux。但有些人只把操作系统叫做"linux"。

有部分linux套件,包括了debian,采用了“gnu/linux”的称呼。但大多数商业linux套件依然将操作系统称为linux。有些人也认为“操作系统”一词指的应该只是系统的内核,其他程序都只能算是应用软件,这么一来,该操作系统的内核应叫linux,而linux套件是在linux内核的基础上加入各种gnu工具。

一些人拒绝使用“gnu/linux”作为操作系统名称的人认为:

  1. linux朗朗上口;名字较短又好记;
  2. richard stallman博士直到1990年代中期,linux开始流行后才要求更名。

结语

我相信,坚持看完这些枯涩文字的读者一定明白了我需要探讨的问题,我们常说的linux,准确地来讲,应该是叫“gnu/linux”。虽然,我们没有为gnu和linux的开发做出什么贡献,但是我们可以为gnu和linux的宣传和应用做出微薄的努力,至少我们能够准确地去向其他人解释清楚gnu、linux以及gnu/linux之间的区别。让我们一起为gnu/linux的推广贡献出自己的力量!


Richard Stallman

理查德·马修·斯托曼(Richard Matthew Stallman, RMS,生于1953年),自由软件运动的精神领袖、GNU计划以及自由软件基金会(Free Software Foundation)的创立者、著名黑客。他的主要成就包括Emacs及后来的GNU Emacs,GNU C 编译器及GNU 调试器。 他所写作的GNU通用公共许可证(GNU GPL)是世上最广为采用的自由软件许可证,为copyleft观念开拓出一条崭新的道路。

每天都有许多计算机用户使用一个被改动过的GNU 系统 (18k 字节),但是他们并没有意识到它。 经过一系列的事件,现在被广泛使用的 GNU 版本则经常被称作“Linux”,可是许多用户并不了解与之相关的 GNU 工程

Linux 确实存在;它是一个内核,许多人都在使用它。但是你不能仅使用内核本身。内核只有作为整个系统的一个部分才有用处。Linux 是和 GNU 操作系统结合在一起使用:系统本身是 GNU,与 Linux 作为内核一起工作。

许多用户没有并不完全了解 Linux 内核和被称作“Linux”的整个系统的区别。而不加区别地使用这个名字并不能对理解有帮助。

程序员一般都知道 Linux 是一个内核。但是因为他们也听到整个系统被称作“Linux”,他们会根据名字去想象历史。比如,很多人认为当 Linus Torvalds 完成了内核后,他的朋友四处寻找其他的自由软件,而且所有的可以被组装成一个类似 Unix 系统的程序都是现成的。

他们的发现不是巧合 -- 这就是 GNU 系统。 可用的自由软件加在一起就组成了一个完整的系统,这是由于自 1984 年就开始的 GNU 工程一直在为此努力。GNU 宣言(31k 字节) 早已设立了开发一个类似 Unix 的自由系统的目标,称作 GNU。GNU 工程的最初公告 也勾画了 GNU 系统的原始提纲。在 Linux 被编写时,这个系统几乎已经完成。

大多数自由软件的工程都是为了特定的工作开发特定的程序。比方说,Linus Torvalds 编写类似 Unix 的内核(Linux); Donald Knuth 编写一个文本格式化工具(TeX); Bob Scheifler 开发一个窗口系统(X Window System)。对于这项工程编写的程序都作出了贡献,对这些贡献进行评估是很自然的。

如果以这种方法来衡量对 GNU 工程的贡献,我们会得出什么结论?一个 CD-ROM的提供商发现在他们的“Linux 发行版”中,GNU 软件 占最大的比重,大约占全部源代码的 28% ,而且这还包括一些关键的部件,没有这些部件,系统就无法工作。Linux 本身占大约 3%。所以如果你要根据程序的作者来选择一个名字的话,最合适的选择是“GNU”。

但是我们不认为这是一个解决问题的适当方法。GNU 工程以前不是,现在也不是一个开发某个软件包的工程。它不是一个 开发 C 编译器的工程, 尽管我们做了。它也不是一个开发一个文本编辑器的工程,尽管我们也做了。GNU 工程的目标是开发一个完全自由的类似 Unix 的系统: GNU。

许多人已经为系统中的自由软件作出了重大贡献,他们都应该获得荣誉。但 GNU 是一个系统而不是一些实用程序的组合的原因是,GNU 工程的最初目标就是做一个完整系统。我们曾经为完成一个完整的系统做了一个所需程序清单,而且我们有系统地寻找,编写这些程序,并且寻找别人编写清单上的每一个程序。我们编写了关键的但是十分枯燥的主要部件,比如汇编语言和连接器,因为这是系统所必需的。除了编程工具,一个完整的系统还需要更多的东西, Bourne Again SHell 程序, PostScript 解释器 Ghostscript, 和 GNU C 库 同样是很重要的。

到了 90 年代初期,我们曾经把除了内核以外的东西放到一起组成了一个系统(我们同时也在做内核的工作)称为 GNU Hurd, 运行在 Mach 上)。开发这个内核比我们想象的要难得多,我们现在仍然在 为此工作

庆幸的是,你不必再等了,因为 Linux 开发成功。当 Linus Torvalds 写成了 Linux,他填补了一个重要的空白。人们可以将 Linux 和 GNU 系统组成一个完整的自由系统:基于 Linux 的 GNU 系统(或简称为 GNU/Linux 系统)。

把它们组合到一起听起来很容易,但是这并不是一个简单的工作。 GNU C 库 (简称 glibc) 需要作大量的修改。集成到一个完整的发行系统中也是一项很大的工作。它需要对如何安装和启动系统进行定位 -- 这个问题直到现在还在完善,因为我们还没有抓住要点。那些开发了不同的发行系统的人们作出了巨大贡献。

除了 GNU,还有一个独立进行的工程开发了一个自由的类似 Unix 的操作系统。这个系统被称为 BSD,它是由 UC Berkeley 开发的。 在 GNU 工程的鼓舞下,BSD 的开发者开始进行他们自己的自由软件的开发工作,并时常受到 GNU 人士的鼓励,但是他们的实际工作与 GNU 差别不大。今天 BSD 系统采用一些 GNU 软件,就象不同版本的 GNU 系统也采用 BSD 的软件一样。总的说来,它们是两套独立开发的不同的系统。今天一个免费的操作系统几乎都是采用 GNU 或 BSD 系统的一个派生版本。

GNU 工程支持 GNU/Linux 系统,就象支持 GNU 系统一样 -- 包括资金的支持。我们为重写与 Linux 相关的 GNU C 库提供资金,以至于它们现在可以很好地集成在一起,直到最新版本的 GNU/Linux 仍在使用这个库而无需修改。我们也为早期 Debian GNU/Linux 的开发提供资金。

今天我们的绝大多数的工作都在基于 Linux 的 GNU 系统上完成,我们希望你也如此。但是请不要含糊地使用 Linux 而使公众迷惑。Linux 是内核,系统的关键部件之一。系统或多或少实际上都应该是 GNU 系统,再加上 Linux。当你在讨论到这个组合系统时,请使用 “GNU/Linux”。

如果要为 GNU/Linux 作链接,本页和 http://www.gnu.org/gnu/the-gnu-project.html 都是很好的选择。如果你想为 Linux(内核)作链接,http://www.kernel.org/是一个很好 URL。


参考:

陆伟峰:论GNU、Linux和GNU/Linux之间的关系
GNU官网-Linux 和 GNU 工程
王垠:完全用GNU/Linux工作
百度百科-Linux
世纪大争论:Linux还是GNU/Linux?

文章导航