Linux和GNU系统

Richard Stallman 著

http://www.gnu.org/gnu/linux-and-gnu.zh-cn.html

更多信息,请同时参看GNU/Linux常见问题为什么是GNU/Linux?

每天都有许多计算机用户使用一个被改动过的GNU系统,但是他们并没有意识到。经过一系列的事件,现在被广泛使用的GNU版本则经常被称作“Linux”,而且许多用户并不了解它基本上就是GNU系统,是由GNU工程开发的。

Linux确实存在,许多人都在使用它,但它仅仅是所用系统的一部分。Linux是内核:它是为你运行的其他程序分配计算机资源的程序。内核是操作系统的基本部分,但是它自己并无用处;它只能在完整的操作系统框架下才能发挥作用。Linux一般和GNU操作系统一起使用:整个系统基本上就是GNU加上Linux,或叫GNU/Linux。所有被叫做“Linux”的发行版实际上是GNU/Linux发行版。

许多用户并不了解作为内核的Linux和也被称作“Linux”的整个系统的区别。而不加区别地使用该名称并不能帮助人们对此的理解。这些用户常常认为Linus Torvalds在1991年凭借一些帮助完成了整个操作系统的开发。

程序员一般知道Linux是一个内核。但是他们一般也听到整个系统叫“Linux”,他们通常会设想的历史是整个系统要以内核命名。例如,许多人相信一旦Linus Torvalds完成了Linux内核,其用户就搜索一些自由软件来和内核一起工作,此时他们发现(没有特别的原因)构成一个类似Unix系统的大多数必要组件已经有了。

他们的发现不是巧合—它正是还没有全部完成的GNU系统。这些已经完成的自由软件加在一起就构成了完整的系统,因为GNU工程从1984年起就在做这件事。在GNU宣言中,我们已经阐明了开发一个自由的类似Unix的系统的目标,它叫做GNU。GNU工程的初始声明也勾画了GNU系统的一些原始计划。在Linux开始时,GNU几乎已经完成。

大多数自由软件项目以完成某项具体工作为目标。例如,Linus Torvalds编写一个类似Unix的内核(Linux);Donald Knuth编写一个文本排版软件(TeX);Bob Scheifler开发一个窗口系统(X Window系统)。测量该工程里各个程序的贡献是一件自然的事情。

如果我们这样测量GNU工程的贡献,我们会得出什么结论?一个CD-ROM提供商发现在他们的“Linux发行版”中,GNU软件占单一最大的比重,大约是整个源代码的28%,其中包括一些关键性主要部件,没有它们,就没有整个系统。Linux自身占大约3%。(这个比例在2008年也差不多:在gNewSense的“主”库中,Linux占1.5%,而GNU包占15%。)所以如果你要根据谁的代码多来命名系统,最合适的单个选择是“GNU”。

但是这不是考虑此问题的最深刻方法。GNU工程过去不是、现在也不是,一个开发专门软件包的项目。它不是一个开发C编译器的工程,不过我们做了。它也不是一个开发文本编辑器的工程,我们也做了。GNU工程是要开发一个完全自由的类似Unix的系统:GNU。

许多人已经为系统中的自由软件作出了重大贡献,他们都应该获得荣誉。但GNU是一个整合系统—而不是一些实用程序集合的原因是,GNU工程的最初目标就是做一个完整系统。我们曾经为完成一个完整的自由系统列了一个所需程序的清单,而且我们系统地寻找、编写、或者征询别人编写清单上的每一个程序。我们编写了关键的但是十分枯燥的(1)主要部件,因为这是系统所必需的。有些系统部件,比如编程工具,自己也变成程序员使用的流行工具,但是我们还编写了许多不是工具的部件(2)。我们甚至还开发了一个国际象棋游戏,叫GNU Chess,因为一个完整的系统也需要游戏。

到了90年代初期,我们曾经把除了内核以外的东西放到一起组成了一个系统。我们也在开始开发一个内核,称为GNU Hurd,运行在Mach1之上。开发这个内核比我们的预期要难得多;GNU Hurd在2001年开始可以稳定工作,但是距离能够被人们正常使用还有很长的路要走。

庆幸的是,我们不必再等Hurd了,因为有了Linux。当Linus Torvalds在1992年使Linux成了自由软件,它填补了GNU系统的一个重要空白。人们可以把Linux和GNU系统结合起来组成一个完整的自由系统—一个带有Linux的GNU系统。换句话说,就是GNU/Linux系统。

把它们组合到一起并不是一个简单的工作。有些GNU部件(3)需要作大量的修改才能适应Linux。把系统集成到一个完整的发行版本中、使之“能够直接安装并工作”也是一项艰巨的工作。它需要考虑如何安装和启动系统—我们那时还未处理此问题,因为我们还没有走到那一步。因此,那些开发了不同的发行版的人们作出了许多重要的工作。但是这些工作的属性是,它们终究会被某些人做的。

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

今天有很多不同的GNU/Linux系统(通常叫做“发行版”)。它们大多数包含了非自由软件—它们的开发者遵循的是和Linux相关的“开源”哲学,而不是GNU的“自由软件”哲学。然而,也有完全自由的GNU/Linux发行版。FSF支持其中一些发行版相关的电脑及其周边件。

制作一个自由的GNU/Linux发行版不止是剔除非自由软件。现在,常规的Linux版本也带有非自由程序。这些程序会在系统启动时加载到I/O(输入输出)设备,它们以很长的数字形式包含在Linux的“源代码”中。所以,维护自由的GNU/Linux发行版现在承担着维护一个自由版Linux的责任。

无论你是否使用GNU/Linux,请不要含糊不清地使用“Linux”这一名称来混淆大众。Linux是一个内核,是系统的主要基本部件之一。整个系统基本上是GNU系统,加上Linux。如果你说的是这个组合,请称之为“GNU/Linux”。

如果你想为“GNU/Linux”提供参考链接,本页面和http://www.gnu.org/gnu/the-gnu-project.html是好的选择。如果你说的是作为内核的Linux,要为它提供参考链接,http://foldoc.org/linux是一个好的URL。

后记

除了GNU,还有一个独立进行的工程开发了一个自由的类似Unix的操作系统。这个系统是BSD,它是由UC Berkeley开发的。在80年代,BSD还不是自由的,但是它在90年代初变成了自由软件。今天,一个自由的操作系统(4)差不多如果不是GNU系统的派生版本,就是BSD系统的派生版本。

人们有时会问BSD是否也是一个GNU的派生版本,像GNU/Linux那样。BSD的开发者受到GNU工程的激励而将他们的代码变成了自由软件,尤其受到来自GNU的活动家的明确吸引和帮助,但是他们的代码和GNU并不重合。BSD系统现在也使用一些GNU程序,正如GNU系统及其派生版使用一些BSD程序一样;然而,整体来看,他们是两个独立发展的不同系统。BSD的开发者并没编写一个内核,并将之添加到GNU系统,进而起个譬如叫GNU/BSD的名字,并不是这个情况。(5)

注:

  1. 这些关键但枯燥的部件包括GNU汇编器(GAS)和连接器(GLD),他们现在都是GNU Binutils软件包的一部分,以及GNU tar,还有其他许多软件。
  2. 比如,Bourne Again SHell(BASH),PostScript解释器Ghostscript,和GNU C库都不是编程工具。GNUCash、GNOME和GNU Chess也不是。
  3. 例如,GNU C库
  4. 自从本文出版以来,有一个几乎完全自由的类似Windows的系统已经开发完成,但是从技术上说,它根本不像GNU或Unix,所以它不影响这个问题。Solaris内核的大部分都变成了自由软件,但是如果你要根据这些制作一个自由系统,除了要添加内核缺少的部分,你还需要把它添加到GNU或BSD中去。
  5. 另一方面,自从本文发表之后,GNU C库已经移植到多个BSD内核版本,这就使组合GNU系统和这些内核变得直截了当。正如GNU/Linux一样,这些也是GNU系统的派生版本,而且他们也因此根据内核的不同,被称为,比如,GNU/kFreeBSD和GNU/kNetBSD。普通桌面版本用户很难分辨出GNU/Linux和GNU/*BSD。

译注

  1. Mach,一个由卡内基.梅隆大学开发的微内核系统。其中一个衍生版本成为GNU Hurd的内核。

【转帖】Linux和GNU系统的更多相关文章

  1. GNU/Linux的GNU是什么意思

    这个组织中黑客云集,而且多是掌握核心技术的真正高手,他们的作品多是编译器.词法/语法分析器.底层函数库等大作.更重要的不是他们的技术,而是他们的哲学!他们的哲学就是技术上的“共产主义”——人人为我,我 ...

  2. 世纪大争论:Linux还是GNU/Linux?

    我们在网上已经习惯用“Linux”来称呼Linux操作系统了,然而,偶尔也用“GNU/Linux”来称呼和指代同样的操作系统和软件.同时人们也在争论这两种称呼哪个更合适. 本文将不会选边站队,仅力图向 ...

  3. Monitorix:一款面向Linux的轻型系统和网络监测工具

    Monitorix是一款功能非常强大的免费开源轻型工具,目的在于监测Linux中的系统和网络资源.它可以定期收集系统和网络数据,并使用自己的Web界面,通过图形显示相关信息.Monitorix让用户可 ...

  4. x86、Linux、GNU、GNOME是什么

    一.指令集架构: 指令集架构(英语:Instruction Set Architecture,缩写为ISA),又称指令集或指令集体系,是计算机体系结构中与程序设计有关的部分,包含了基本数据类型,指令集 ...

  5. 浅析 Linux 初始化 init 系统

    近年来,Linux 系统的 init 进程经历了两次重大的演进,传统的 sysvinit 已经逐渐淡出历史舞台,新的 UpStart 和 systemd 各有特点,越来越多的 Linux 发行版采纳了 ...

  6. 【转】Linux 初始化 init 系统 [sysvinit systemd upstart]

    http://www.ibm.com/developerworks/cn/views/linux/libraryview.jsp?sort_by=&show_abstract=true& ...

  7. Linux下获得系统时间的C语言实现

    Linux下获得系统时间的C语言的实现方法 #include<time.h> //C语言的头文件#include<stdio.h> //C语言的I/O   int main() ...

  8. 浅析 Linux 初始化 init 系统,第 1 部分: sysvinit 第 2 部分: UpStart 第 3 部分: Systemd

    浅析 Linux 初始化 init 系统,第 1 部分: sysvinit  第 2 部分: UpStart 第 3 部分: Systemd http://www.ibm.com/developerw ...

  9. 手把手VirtualBox虚拟机下安装rhel6.4 linux 64位系统详细文档

    下面演示安装的是在VirtualBox里安装rhel 6.4 linux 64位系统. 一.VirtualBOX 版本. 二.虚拟机的配置. 1.现在开始演示安装,一起从零开始.点击“新建”,创建新的 ...

随机推荐

  1. PHP mysqli_fetch_field_direct() 函数

    返回结果集中某个单一字段(列)的 meta-data,并输出字段名称.表格和最大长度: mysqli_fetch_field_direct(result,fieldnr); 参数 描述 result ...

  2. hdu 5536 Chip Factory 字典树+bitset 铜牌题

    Chip Factory Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)T ...

  3. 微信内置浏览器不支持APK附件下载的原因

    由于微信的限制,应用文件在内置浏览器中下载全部被屏蔽掉,造成很多人用微信扫描二维码下载时点击下载按钮没反应,我想到的是做一个提示用户在浏览器中打开下载.其实原来很简单,就是判断当前是在微信内置浏览器中 ...

  4. 比较全的解释了:JAVA反射机制

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制 ...

  5. js反混淆

    var esprima = require('esprima') var escodegen = require('escodegen') content = "function _0x35 ...

  6. TCP拥塞控制算法

    转自浅谈TCP拥塞控制算法 本篇文章介绍了几种经典的TCP拥塞控制算法,包括算法原理及各自适用场景. 回顾上篇文章:浅谈 redis 延迟 前言 TCP 通过维护一个拥塞窗口来进行拥塞控制,拥塞控制的 ...

  7. EBS 查看输出HTML报表问题总结

    问题一: 请求输出格式为HTML(如下图,默认浏览器输出),希望 查看输出 的时候能够实现excel输出. 解决方法: 路径:系统管理员/安装/浏览器选项 注:维护如下记录 文件格式:HTML    ...

  8. 阿里云 docker image 加速

    使用的国内网络下载docker image太困难了,简直龟速,于是上网查看如何加速docker image的下载,没想到网上还真有,看来现在自己的知识圈子太小了,还需要多接触新的知识.找到第一个atu ...

  9. ios-runtime拦截touch事件,展示用户触摸效果

    [展示效果说明] 对 app 操作录屏时,展示出手指在 app 上的触摸效果可以看到具体点击情况,感觉这样比较直观方便,也不用做视频后期了. 这里简单用 runtime 实现了一个这样的效果,不需要修 ...

  10. qcow2镜像制作

    windows 1.准备windows镜像.驱动镜像. 驱动下载地址: https://docs.fedoraproject.org/en-US/quick-docs/creating-windows ...