GNU

文章用来认识GNU,表达对GNU的尊重。

我的理解是,GNU开发了很多好的能在Linux上运行的程序套件(尤其是GCC、BASH等),同时GNU也有自己亲生的操作系统内核“GNU Hurd”,最后GNU程序套件没有和Hurd打包发布,而是和Linux。有人用“Linux”称谓操作系统时,会引起误会,忽略GNU,也忽略了GNU的贡献。如果引用操作系统时,GNU/Linux才是正确的称谓;如若引用内核时,可以称Linux。据说,Linux开源也是收到了GNU的影响。

了解更多,参考https://www.gnu.org/ 。想更加快地了解Hurd,就拉倒最底下,我引用了关于Hurd的博客。

Richard Stallman之GNU/Linux问答

要了解更多,你还可以阅读我们关于Linux和GNU工程的网页、关于为什么是GNU/Linux?的网页和关于从未听说过GNU的GNU用户的网页。

当人们看到我们使用并建议GNU/Linux作为系统名称,而其他人称之为“Linux”时,他们会问许多问题。此处列举了常见问题以及我们的回答。

为什么你称该系统为GNU/Linux而不是Linux?(#why)
大多数使用Linux内核的操作系统发行版基本上是GNU操作系统的修改版。我们在1984年就开始开发GNU工程,比Linus Torvalds开始写他的内核要早好多年。我们的目标是开发一个完全的自由操作系统。当然,我们没有自己开发所有的部件—但是我们指引了方向。我们开发了大多数核心部件,它们构成了整个系统单一的最大贡献部分。基础版本也来自我们的贡献。

为了公平,我们至少应该被平等对待。

请参看Linux和GNU系统从未听说过GNU的GNU用户来了解更多说明,并参看GNU工程来了解历史。

为什么名称是重要的?(#whycare)
虽然Linux内核的开发者对自由软件社区做出了贡献,但是其中许多人并不关心自由。认为整个系统就是Linux的人往往弄混淆了,他们赋予了这些内核开发者实际上他们在社区中根本没有扮演的历史角色。然后,他们就给这些开发者的观点以超乎寻常的份量。

称该系统为GNU/Linux确认了我们的理想在社区建设中的角色,并帮助公众了解这些理念的实际重要性

GNU和Linux究竟是什么关系?(#what)
GNU操作系统和Linux内核是独立的软件项目,它们完成互补的工作。通常,它们会打包在GNU/Linux发行版里,并被一起使用。
为什么大多数人会叫该系统为“Linux”?(#howerror)
称该系统为“Linux”是一个混淆,该混淆传播得比正确的信息要快。

把Linux和GNU系统结合在一起的人不曾意识到他们的努力合起来是什么。他们的注意力集中在Linux部分,而没有意识到GNU才是更大的部分。他们开始称之为“Linux”,虽然这个名字并不适合他们所获得的系统。几年后我们才意识到这个问题,并请求人们更改。那时,这个混淆已经遥遥领先了。

大多数称该系统为“Linux”的人从来没有听说过为什么这不对。他们看到其他人这么用,就理所当然地认为这一定是对的。“Linux”这个名字还传播了错误的系统渊源,因为人们一般会认为系统的历史一定和该名字相关。比如,他们通常相信系统的开发是由Linus Torvalds在1991年开始的。这个错误的场景又会加强系统应该叫做“Linux”的想法。

本文中的许多问题表达了人们想要为他们习以为常的名字辩护的诉求。

我们是否总要说“GNU/Linux”而不要说“Linux”?(#always)
不是总要—只有当我们在谈论整个系统时。如果你特指内核,那么你应该说“Linux”,其开发者选择的名字。

当人们称整个系统为“Linux”时,其后果就是他们用内核的名字来称呼整个系统。这造成了许多混淆,因为只有专家才可以辨别什么时候说的是内核什么时候说的是整个系统。把整个系统称为“GNU/Linux”,并把内核称为“Linux”,你就避免了歧义。

如果没有GNU,Linux还会这么成功吗?(#linuxalone)
如果是那样的话,可能就不会有像今天这样的GNU/Linux系统,而且可能没有任何的自由操作系统。除了GNU工程和(后来的)Berkeley CSRG,在20世纪80年代没有人会开发自由的操作系统,CSRG也是在GNU工程的明确请求下开始代码自由化的。

Linus Torvalds部分受到1990年在芬兰的一场关于GNU的演讲的影响。没有这个演讲,他也可能会写出一个类Unix的内核,但是它可能不会是自由软件。Linux在1992年,当Linus把它按GNU GPL发布时,成为自由软件。(参看0.12版的发布说明。)

即使Torvalds使用其他自由许可证发布Linux,单单一个自由的内核也无法改变世界。Linux正好适合一个更大的框架、一个完全的自由操作系统:GNU/Linux,这样它才变得显眼。

如果你们不按这样的要求分裂人群,对社区不是更好吗?(#divide)
当我们请求人们说“GNU/Linux”时,我们不是在分裂群众。我们是在请求他们给予GNU操作系统的GNU工程荣誉。这并没有批评或驱赶任何人。

不过,有人不喜欢我们这样说。有时,这些人会反过来驱赶我们。有个别情况,这些人是如此粗鲁以至于我们不得不想,他们是不是存心要胁迫我们保持沉默。这没有使我们沉默,但是这确实要分裂社区,所以我们希望你们能够说服他们不要这样做。

不过,这只是分裂社区的一个次要因素。社区最大的分裂在于欣赏自由软件作为社会和道德问题并认为专属软件是社会问题的人(自由软件运动的支持者)和那些只讨论实际利益并只把自由软件当作有效的开发模式的人(开源运动者)之间的分裂。

这种分歧不只是名称的问题—这是基本价值观的不同。社区看到和思考这个分歧很重要。“自由软件”和“开源”这两个名字就是这两部分的旗帜。请参看为什么开源错失了自由软件的重点

这个价值分歧和人们关注GNU工程在社区中角色中的份量部分吻合。看重自由价值的人们更倾向于叫这个系统为“GNU/Linux”,而了解该系统为“GNU/Linux”的人也更倾向于关注我们对于自由和社区的哲学观点(这就是为什么系统名称的选择使社区非常不同的原因)。然而,即使每个人都知道系统的真正渊源和正确名称,分歧也可能还会存在,因为问题真的在那里。只有看重自由的我们说服每个人(不太容易)或者我们被完全打败(希望不要如此),问题才会消失。

难道GNU工程不支持每个人按自己的选择为系统命名的言论自由吗?(#freespeech)
是的,确实,我们相信你有按自己的意愿称呼该操作系统的言论自由权利。我们请求大家称之为GNU/Linux是为了公正地对待GNU工程、是为了促进GNU代表的自由价值、是为了告诉大家正是这些自由价值才使该系统能够存在。
由于每个人都知道GNU在系统开发中的角色,难道名字里不说“GNU/”不是一样吗?(#everyoneknows)
经验告诉我们该系统的用户以及普通的计算机用户通常对GNU并不了解。关于该系统的大多数文章没有提及“GNU”这个名字或者是GNU代表的理念。从未听说过GNU的GNU用户一文有更详细的解释。

问这个问题的人可能认为他们认识的极客1抱有这个想法。极客通常知道GNU,但是很多极客关于GNU的概念是完全错误的。比如,许多人认为GNU是一个“工具”集合,或者GNU是一个开发工具的项目。

此问题的用词也反映出了另一个典型的常见错误。谈及“GNU在开发中的角色”时认为GNU是一群人。GNU是一个操作系统。讨论GNU工程的角色或其他活动才有意义,而不是谈论GNU。

我了解GNU在系统中的角色,为什么我用什么名字还有关系?(#everyoneknows2)
如果你说的话没有表达出你的认识,那么你不是在教育别人。大多数听到过GNU/Linux系统的人认为这就是“Linux”,而它是由Linus Torvalds开始的,并且它要做的是“开源”。如果你不告诉人们事实,谁来告诉他们呢?
把“GNU/Linux”缩写为“Linux”不正好和把“Microsoft Windows”缩写“Windows”类似吗?(#windows)
把一个常用名称缩写是有用的,但是该缩写不能引起误解。

事实上,在发达国家里,几乎所有人都知道是Microsoft(微软)开发了“Windows”系统,所以把“Microsoft Windows”缩写为“Windows”不会使人们误解该系统的属性和来源。但是,把“GNU/Linux”缩写为“Linux”的确误导了该系统的起源。

此问题本身就具有误导性,因为GNU和Microsoft并不类似。Microsoft是一家公司;GNU是一个操作系统。

难道GNU作为编程工具的集合不是包含在Linux之中了?(#tools)
认为Linux就是整个操作系统的人,如果对GNU有所耳闻,对什么是GNU的概念往往是错误的。他们或许认为GNU是一个程序集合的名字—他们常常称之为“编程工具”,因为我们的一些编程工具本身也招人喜欢。“GNU”就是操作系统的名字这一概念很难被贴上“Linux”标签的操作系统这一概念所接纳.

GNU工程由于GNU操作系统而得名—它是开发GNU系统的工程。(请参看1983的初始声明。)

我们开发了诸如GCC、GNU Emacs、GAS、GLIBC、BASH等程序,因为GNU操作系统需要它们。GCC,GNU编译器集合是我们为GNU操作系统编写的编译器。我们,为GNU工程工作的一群人,也为GNU工程开发了Ghostscript、GNUCash、GNU Chess和GNOME。

操作系统和内核有什么不同?(#osvskernel)
操作系统,对我们来说,代表着程序的集合,它们足以支持使用电脑完成多种多样的任务。一个通用的操作系统,如果是完备的,就应该能够处理许多用户想要完成的所有任务。

内核是操作系统的程序之一—它为其他程序的运行分配机器的资源。内核也负责开始和终止其他程序。

混淆事情的是,有些人也使用“操作系统”一词表示“内核”。这两个意思都可以追溯到多年以前。使用“操作系统”一词表示“内核”的例子可以在80年代的一些系统设计教科书中找到。与此同时,也在80年代,“Unix操作系统”是按照包含所有系统程序来理解的,而Berkeley版的Unix甚至还包括游戏。由于我们意在使GNU成为一个类Unix的操作系统,所以我们在使用“操作系统”一词时是指和Unix一样的意思。

大多数时间,人们谈及“Linux操作系统”时,他们用“操作系统”指的就是我们所说的意思:他们说的是整个程序集合。如果你指的是这个,那么请叫它“GNU/Linux”。如果你只是指内核,那么“Linux”是正确的名字,但是请你也加上“内核”来避免混淆你要指明的程序。

如果你更爱使用诸如“系统发行版”之类的词来表示整个系统集合,而不用“操作系统”一词,也没问题。这时,你可能应该说GNU/Linux系统发行版。

系统的内核正如房屋的基础。在没有基础的时候,房屋怎么就几乎完成了?(#house)
内核并不像房屋的基础,因为构建操作系统并不像建造房屋一样。

房屋是由许多通用的小部件构造的,这些小部件在施工现场切割和组装。它们必须由下而上组装在一起。因此,如果根基没有建好,你无法建造其他部分;你只能看到一个地坑。

相反,操作系统由许多复杂的部件构成,它们可以以任何顺序开发。当你开发了大多数部件时,你就完成了大部分工作。这更像是构造一个国际空间站,而不是一个房屋。如果空间站的大多数部件都进入轨道,只是在等一两个重要模块,那么这就类似GNU系统在1992年的情形。

内核不是系统的大脑吗?(#brain)
电脑系统和人体不一样,其中没有一个部件担当和人脑一样的角色。
编写内核不是构建操作系统的主要工作吗?(#kernelmost)
不,许多部件都要花费大量的劳动。
如果我拿不到一个叫“GNU”的东西并安装之,GNU怎么能叫一个操作系统?(#notinstallable)
有许多打好包的、可安装的GNU版本。它们都不是简单地叫做“GNU”,但是它们基本上就是GNU。

我们本来预计发布GNU系统的安装版,不过该计划被一些活动取代了:其他人在1992年已经打包了带有Linux的GNU分支。从1993年起,我们开始资助构建一个更好、更自由的GNU/Linux发行版,它就是Debian GNU/Linux。Debian的创建者选的这个名字。我们不曾请他为之取名“GNU”,因为GNU这个名字将用于带GNU Hurd内核的系统版本—当时还未就绪。

GNU Hurd内核还没有充分准备好;我们仅向对为其工作感兴趣的人推荐GNU Hurd。所以我们没有将GNU和GNU Hurd内核一起打包。不过,Debian打包的Debian GNU/Hurd就是这个组合。

目前我们正在开发一个叫做Guix的基于Scheme的先进包管理系统,以及一个基于其上的完整系统发行版,叫做Guix系统发行版或GuixSD。它重新打包了大量的GNU系统的软件包。

我们从来没有踏出最后一步—用“GNU”之名打包GNU,但是这并不改变GNU的本质。GNU是一个操作系统。

我们用内核来称呼整个系统,Linux。用内核命名操作系统不是正常的吗?(#afterkernel)
这个用法似乎非常罕见—除了被错用的“Linux”之外,我们没有找到其他的例子。通常,操作系统是作为一个统一的项目开发的,而且其开发人员会为整个系统选择一个名字。内核通常没有自己的名字—反过来,人们会说“某某系统的内核”或者是“某某的系统内核”。

由于这两种用法是同义词,所以“Linux内核”很容易被误解为“Linux的内核”并暗示Linux必定不单单是一个内核。你可以通过说或者写“该内核,Linux”或“Linux,内核”来避免大家可能的误解。

另外的系统能不能有“Linux的感觉”?(#feel)
并没有一种叫“Linux的感觉”的东西,因为Linux没有用户界面。和所有当代内核一样,Linux是运行程序的基础;用户界面属于系统的其他部分。人们在GNU/Linux上的交互总是通过其他程序,而这就是“感觉”的来源。
问题是“GNU/Linux”太长了。用一个更短的名字怎么样?(#long)
有段时间,我们用了“LiGNUx”这个名字,它合并了“GNU”和“Linux”两个词。反应很不好。人们更接受“GNU/Linux”。

该系统最短的合法名称是“GNU”,不过我们称之为“GNU/Linux”,道理如下

该系统叫“GliNUx”(替换掉“GNU/Linux”)怎么样?(#long1)

“GNU”一词没有出现在“Glinux,”这个名字里,所以大多数人不会注意到GNU。即使写成大写的“GliNUx,”,大多数人也不会意识到这是在说GNU。

它就像是在写“GNU/Linux,”,但是把“GNU/”写得很小,而让大多数人根本看不到它。

问题是“GNU/Linux”太长了。为什么我要自找麻烦说“GNU/”?(#long2)

说出或者写出“GNU/”只需一秒钟。如果你对我们开发的系统心怀感激,难道你不愿意花一秒钟来表示肯定?

不幸的是,“GNU/Linux”有5个音节。人们不会使用这么长的术语。你难道不该找个更短的术语?(#long3)

实际上,“GNU/Linux”只有四个音节。“Unfortunately(不幸一词)”有五个音节,但是人们会毫不迟疑地使用它。

由于Linux是次要的贡献,难道简单称该系统为“GNU”有错吗?(#justgnu)
虽然这么说没错,但是这么做未见得最好。这里讲一下我们称整个系统版本为“GNU/Linux”而不仅仅是“GNU”的原因:
  • 它不是严格意义上的GNU—它带有不同的内核(就是,Linux)。区分GNU/Linux和GNU是有用的。
  • 请求人们停止给予Linus Torvalds荣誉不是绅士所为。他确实编写了系统的一个重要部件。我们希望因为发起和维护了该系统的开发而得到荣誉,但这并不是说我们要像那些称该系统为“Linux”的人对待我们一样对待Linus。我们强烈反对他的政治观点,但是我们对此采取真诚和公开的做法,而不是试图削弱他在系统贡献方面应得的荣誉。
  • 由于许多人对该系统的认识是“Linux”,如果我们说“GNU”,他们可能不会意识到我们说的是同一个系统。如果我们说“GNU/Linux”,他们就能够和他们原先听说的系统建立联系。

 

如果产品名称使用“Linux”要付费,那么使用“GNU/Linux”也一样付费。难道使用“GNU”而不带“Linux”不是可以省去该费用?(#trademarkfee)
将该系统叫做“GNU”并没有错;基本上,该系统就是这样的。给予Linus Torvalds应得的荣誉也很好,但是你并没有义务要为此支付费用。

所以如果你想简单称该系统为“GNU”,并以此避免因为叫它“Linux”而付费,我们不会指责你。

到今天,许多项目都为该系统做出了贡献;其中包括TeX、X11、Apache、Perl和许多其他程序。你的论点不是意味着它们也应该获得荣誉?(但是这样的话名字就长得可笑了。)(#many)
我们说的是你应该给予系统的主要开发者应得的荣誉。主要开发者就是GNU工程,而且该系统基本上就是GNU。

如果你还是强烈地想要给予人们应得的荣誉,那么你会觉得一些次要的贡献者也应该在系统名称中得到荣誉。这样的话,我们也就没什么好争论的了。如果你觉得X11应该体现在系统名称中,而且你想称之为GNU/X11/Linux,没问题。如果你觉得Perl也值得致意,而且想把系统名称写成GNU/Linux/Perl,尽管去做吧。

由于像GNU/X11/Apache/Linux/TeX/Perl/Python/FreeCiv这样长的名字会变得滑稽,所以你终究会限制一个长度而许多次要的贡献将无法写入该名称。因为限制长度并没有明显的对错,所以无论你怎么做,我们都不会反对。

不同的长度会形成不同的系统名称。但是一个名字,无论怎么样的长度限制,都不会是因为考虑到公平和荣誉而出现的,它就是“Linux”。给予一个次要贡献者(Linux)所有的荣誉而忽略主要的贡献者(GNU)不可能是公平的。

到今天,许多项目都为该系统做出了贡献,但是它们并没有坚持要叫XYZ/Linux。为什么要对GNU特殊对待呢?(#others)
今天的GNU/Linux系统通常包含有数千个项目开发的程序。它们的贡献都应该得到荣誉,但是整体来看它们不是系统的主要开发者,所以它们没有要求类似的荣誉。

GNU不同,因为它的贡献不只是一个程序,也不只是一个程序集合。GNU是整个系统得以构建的框架。

如今,GNU只是系统的一小部分,为什么我们要提及它呢?(#allsmall)
在2008年,我们发现GNU包在gNewSense GNU/Linux发行版的“主”包中占有15%的份额。Linux占有1.5%的份额。所以,同样的争议对“Linux”这一名称更有挑战性。

今天,GNU是系统的一小部分,而Linux就更小了。但是他们是系统的核心;系统由二者合并而成。因此,称之为“GNU/Linux”还是合适的。

如今,许多公司为系统做出了贡献;难道我们不应该称之为GNU/Red Hat/Novell/Linux?(#manycompanies)

不能把GNU和Red Hat或Novell相比较;GNU不是一个公司,也不是一个组织,更不是一个活动。GNU是一个操作系统。(当我们说GNU工程时,我们指的是开发GNU系统的工程。)GNU/Linux系统基于GNU,而这就是为什么GNU应该出现在系统名称里。

这些公司对GNU/Linux系统的贡献在于他们对多个GNU包的代码贡献,其中包括GCC和GNOME。命名GNU/Linux就是给予这些公司以及所有其他GNU开发者荣誉。

为什么要写成“GNU/Linux”而不是“GNU Linux”?(#whyslash)
根据英语语法规则,在“GNU Linux”中,“GNU”一词修饰“Linux”。它或者是说“GNU版的Linux”,或者是说“Linux,是一个GNU包。”哪个意思都不适合当下的情况。

Linux不是一个GNU包;就是说,它不是在GNU工程的庇护下开发的,也不是专门贡献给GNU工程的。Linus Torvalds独立编写了Linux,作为他自己的项目。所以“Linux,是一个GNU包”的说法不对。

我们不是在讨论特别针对GNU的Linux内核版本。GNU/Linux发行版确实有一个独立的Linux版本,这是由于“标准的”版本带有非自由的固件“blobs”。如果这曾是GNU工程的一部分,那么可以考虑叫它“GNU Linux”;不过我们不想这么叫,因为这太令人迷惑了。

我们讨论的是GNU操作系统的一个版本,它由于带有Linux内核而区别于其他GNU版本。斜杠适合此情况,因为它表示“联合。”(类似“输入/输出”。)该系统是GNU和Linux的联合;因此,它叫“GNU/Linux”。

还有其他的方法表示“联合”。如果你认为加号更清楚,请使用加号。在法语中,横线就很清楚:“GNU-Linux”。在西班牙语中,我们有时说“GNU con Linux”。

为什么是“GNU/Linux”而不是“Linux/GNU”?(#whyorder)

首先论及主要的贡献者是正当和合理的。GNU对系统的贡献不仅大于Linux,而且也早于Linux。实际上,是我们发起了整个活动。

另外,“GNU/Linux”这个名字对Linux是系统最底层而GNU是技术面的更上层这一情况也是恰当的。

不过,如果你更愿意说“Linux/GNU”,这也比大多数人完全不提GNU而把整个系统当作Linux要好得多。

发行版的开发者叫它“Foobar Linux”,但是该名字没有关于系统组成的任何信息。他们为什么不能愿意叫什么就叫什么呢?(#distronames0)
称系统为“Foobar Linux”暗示它是“Linux,”的一个分支,并且人们也是这样理解的

如果有人说一个GNU/Linux发行版“Foobar BSD”,你会说这是个错误。你可能会这样告诉他们,“这个系统不是BSD”。不过,它也不是Linux。

我的发行版叫“Foobar Linux”;难道它不就是Linux吗?(#distronames)

这意味着制作“Foobar Linux”发行版的人在重复这个常见的错误。我们感谢Debian、Dragora、Musix、Trisquel和Venenux等发行版采纳了GNU/Linux作为它们的正式名称的一部分,而且如果你参与了其他的发行版,我们鼓励你也这样做。

我的发行版正式名称是“Foobar Linux”;不叫它“Foobar Linux”不就错了吗?(#distronames1)

当有人通过将“GNU”改为“Linux”并称其系统版本为“Foobar Linux”来散布错误信息时,你通过叫该系统为“Foobar GNU/Linux”而纠正错误是正确的做法。

难道让诸如Mandrake、Red Hat和IBM之类的公司称它们的发行版为“GNU/Linux”不是比普通群众更有效?(#companies)
这不是二选一的问题—我们请求公司、组织和个人都来帮助我们传播正确的信息。事实上,我已经请求上述三个公司这么做。Mandrake说它有时会使用“GNU/Linux”的名字,但是IBM和Red Hat不愿意帮忙。其中一个管理曾说,“这是一个纯粹的商业决定;我们希望通过叫系统为‘Linux’而赚到更多的金钱。”换句话说,该公司不关心什么是正确的。

我们不能让它们对此做正确的事,但是我们不会因为历程艰难而放弃。或许你的影响力无法和IBM或Red Hat相提并论,但是你还是可以帮忙的。我们一起可以将事情改变到一个程度,此时称系统为“GNU/Linux”的公司会赚到更多。

把名称“GNU/Linux”保留给完全的自由软件不是更好吗?归根结底,这就是GNU的理想嘛。(#reserve)
对我们的社区来说,在GNU/Linux系统里添加非自由软件的普遍做法是一个主要问题。它教育用户非自由软件是可以的,而且使用非自由软件是“Linux”精神的一部分。许多“Linux”用户组把帮助用户使用非自由的附加组件当成自己的一个使命,甚至不惜邀请销售人员来为此营销。他们接纳了以下目标:“帮助GNU/Linux用户”(包括帮助他们使用非自由的应用和驱动),甚或是以自由为代价让系统更流行。

问题是怎么才能改变这个情况。

由于大多数使用GNU加Linux的社区用户并没有意识到他们用的是什么,所以让我们和这些掺假的版本脱离关系,说它们不是真正的GNU,并不能更多地教育用户自由的价值。他们将不能获得应得的信息。他们首先只会反应出他们从来没想到该系统是GNU。

让这些用户看到该系统和自由的关联的方法正好相反:告诉他们所有这些系统版本都是GNU,这些系统都是建立在一个特意为用户自由而存在的系统之上的。有了这样的理解,他们就能够开始意识到包含非自由软件的发行版是反常的、掺假的GNU版本,而不再认为它们是合理和适当的“Linux版本”。

发起GNU/Linux用户组会非常有用,它会称系统为GNU/Linux并接纳GNU工程是系统的基础这一理念。如果你当地的Linux用户组有以上提及的问题,那么我们建议你或者发起改变其倾向(和名称)的活动,或者开展一个新的用户组。关注表面目标的人们有权顾及他们的观点,但是请不要让他们把你带到沟里去!

为什么不构造一个Linux(sic)的GNU发行版并称之为GNU/Linux?(#gnudist)
所有的“Linux”发行版实际上都是GNU系统的版本加上Linux内核。“GNU/Linux”这一名称就是来沟通这个重点。开发一个新的发行版并单独叫“GNU/Linux”势必会模糊我们的重点。

关于开发一个GNU/Linux发行版,我们已经做过一次,就是我们资助Debian GNU/Linux早期开发的时候。再做一次看来并不会有用;新的发行版要耗费大量工作,并且除非它比其他发行版有非常大的实际优势,它的目的不明确。

反之,我们会帮助100%自由的GNU/Linux发行版的开发者,比如gNewSense和Ututo的开发者。

为什么不简单地说“Linux是GNU的内核”并把现有的GNU/Linux版本用“GNU”发布? (#linuxgnu)
回到1992年,采纳Linux作为GNU的内核也许是一个好主意。假如我们那时就意识到要使GNU Hurd能够工作会花多长时间的话,我们也许会那么做。(呜呼,这是一个马后炮。)

如果我们使用一个现有的GNU/Linux版本并重新冠名为“GNU”,那么它差不多就和使用一个GNU版本并冠以“Linux”之名一样。这不对,而且我们不想这么做。

GNU工程早期指责和反对过使用Linux吗?(#condemn)
我们早期没有采纳Linux作为内核,但是我们也没有指责或反对过它。在1993年,我们开始讨论资助Debian GNU/Linux开发的事情。我们还寻求和修改了某些GNU包以使之能和Linux一起工作的人来协作。我们曾想把他们的更改包含在标准发布中,这样这些GNU包和Linux就可以直接工作了。但是这些改变经常是专门的、不可移植的;它们需要清理才能安装。

这些做出更改的人对和我们合作并没有什么兴趣。实际上,其中一个人告诉我们他不关心GNU工程的工作,因为他是一个“Linux用户”。这使我们震惊,因为将GNU包移植到其他系统的人一般希望和我们一起工作来使这些更改进入安装程序。不过这些人,开发了一个基本上是基于GNU的系统,是第一个(实际上还是仅有的一个)不愿意和我们一起工作的团体。

正是这个经历第一次向我们展示了人们会把一个GNU系统的版本叫做“Linux”,而且这种混淆淡化了我们的工作。请求你叫系统为“GNU/Linux”是我们对此问题的回应,也是对“Linux”这一误称带来的其他问题的回应。

为什么你们等了这么久才请求人们使用GNU/Linux这个名称?(#wait)

事实上,我们没有。我们在1994年就开始私下和开发者以及贡献者谈论此事,并在1996年采取了更公开的活动。只要有必要,我们会继续下去。

GNU/name这一命名规则要应用于所有的GPL程序吗?(#allgpled)
我们从未使用“GNU/name”来指代单个的程序。当一个程序是一个GNU包时,我们也许会叫它“GNU name”。

GNU,作为操作系统,是由很多不同的程序构成的。GNU中的有些程序是作为GNU工程的一部分或者是专门为GNU编写的;这些是GNU包,而且我们经常在它们的名字里使用“GNU”一词。

一个程序是否贡献出来成为GNU包是由其开发者决定的。如果你开发了一个程序,并且想让它成为一个GNU包,那么请写信给<gnu@gnu.org>,这样我们就能够评估并决定是否需要它。

为每个按照GPL发布的程序都加上GNU之名是不公平的。如果你写了一个程序并按照GPL发布,这并不意味着GNU工程写了该程序或者是你为我们写了该程序。例如,Linux内核,是按照GNU GPL发布的,但是Linus并不是作为GNU工程的一部分来写它的—他独立地编写了它。如果东西不是GNU包,GNU工程不会拿走这个荣誉,而且在其名称上添加“GNU”也是不合适的。

反之,我们确实应得GNU操作系统作为整体的荣誉,即使不是因为其中每一个程序。这个系统之所以存在就是因为我们的决心和锲而不舍,从1984年起,比Linux的开始早许多年。

Linux在其中变得流行的操作系统基本上就是GNU操作系统。它不是完全相同,因为有不同的内核,但是几乎就是一样的系统。它是GNU的一个变化版。它就是GNU/Linux系统。

Linux主要还是继续在该系统的演化版中使用—在今天的GNU/Linux系统中使用。系统身份的代表是位于其中心的GNU和Linux,而不是Linux自己。

由于GNU基本来自Unix,难道GNU不应该尊重Unix并以“Unix”作为名字的一部分?(#unix)
实际上,没有GNU的成分是从Unix来。Unix曾是专属软件(现在还是),在GNU中使用任何Unix代码都是不合法的。这并非巧合;这正是我们开发GNU的原因:由于你使用Unix或者当时的其他操作系统时,无法获得自由,所以我们需要一个自由系统来代替它们。我们不能复制Unix程序,甚至一部分也不行;所有程序必须重新写起。

GNU中没有Unix的代码,但GNU是一个兼容Unix的系统;所以,许多GNU的想法和规格确实来自Unix。“GNU”,代表“GNU并非Unix”,就是给予Unix致意的幽默方式,这也遵循了70年代黑客使用递归缩写的传统。

第一个这样的递归缩写是TINT,表示“TINT不是TECO(TINT Is Not TECO)”。TINT的作者写了TECO的另一种实现(当时有很多实现,用在不同的系统上),但是不再叫它为无聊的“另一种TECO”,该作者想出了这个精灵、有趣的名字。(这就是黑客的意义:玩得机灵。)

其他黑客非常喜欢这个名字,他们开始模仿这个做法。这成了一个传统,当你重新开始写一个和现有程序类似的程序时(设想现有程序名字叫“Klever”),你就可以给新程序起递归缩写名,比如代表“MINK Is Not Klever”的“MINK”。本着这种精神,我们替代Unix的系统就叫做“GNU并非Unix”。

历史上,开发了Unix的AT&T却不想其他人在类似的系统上使用“Unix”的名字来向它致意,即使是99%复制Unix的系统也也不行。实际上,AT&T曾威胁会起诉这样做的人。这就使每一个Unix的修改版(和Unix一样,都是专属软件)都有一个不带“Unix”的完全不同的名字,

我们也应该说“GNU/BSD”吗?(#bsd)
我们不叫BSD系统(比如FreeBSD。)为“GNU/BSD”系统,因为这样叫不符合BSD系统的历史。

BSD系统是由UC Berkeley在80年代开发的非自由系统,并在90年代早期成为自由软件。现今的自由操作系统几乎可以确定不是GNU系统的变化版,就是BSD系统的一种。

人们有时会问BSD是否也是GNU的一个变化版,就像GNU/Linux一样。它不是。BSD的开发者受到GNU工程的榜样激励而把代码变成自由软件,而且明确受到来自GNU活动家的请求,这些请求帮助说服他们开始走向自由软件,但是他们的代码和GNU没有什么重合。

今天,BSD系统使用一些GNU包,正如GNU系统及其变化版会使用一些BSD程序;不过,整体来看,他们是两个分开发展的不同系统。BSD开发者没有编写一个内核并添加到GNU系统中,所以GNU/BSD这样的名字不适合此情况。

GNU/Linux和GNU的关联要紧密得多,而且这就是为什么“GNU/Linux”这个名字是合适的。

有一个版本的GNU系统使用来自NetBSD的内核。其开发者称之为“Debian GNU/NetBSD”,但是“GNU/kernelofNetBSD”可能更准确些,这是因为NetBSD是整个系统,而不仅仅是内核。这不是一个BSD系统,因为其系统的大部分和GNU/Linux系统一样。

如果我在Windows上安装了GNU工具,这意味着我要说我运行了GNU/Windows系统?(#othersys)
这和我们说“GNU/Linux”并不一样。GNU的工具只是GNU软件的一部分,也就只是GNU系统的一部分,而且在它们的下层你还有另一个完整的操作系统,该操作系统和GNU没有共同的代码。总而言之,这和GNU/Linux的情况大不相同。
Linux没有GNU就不能用了吗?(#justlinux)
Linux自己也在一些应用中被使用,或者是和其他一些小程序一起。这些小的软件系统远没法和GNU/Linux系统相提并论。比如,用户不会在电脑上安装它们,而且会感到这些应用令人失望。这些运行Linux的应用可以用来展示它们和GNU/Linux系统有多么的不同。
需要多少GNU的系统才要叫做GNU/Linux系统?(#howmuch)
“多少”不是一个有意义的问题,因为GNU系统并没有准确的边界。

GNU是一个由社区维护的操作系统。它包含的内容远远多于仅仅是GNU软件包(对此我们有一个列表),并且人们一直在添加更多的包。除了这些更改,它还是GNU系统,加上Linux就产生了GNU/Linux。如果你使用了一部分GNU系统,那么说你用了“多少”并没有什么意义。

如果我们看看包的级别,Linux是GNU/Linux系统的一个重要的包。包含一个重要的GNU包已经足够我们要求在名称上平等对待了。

有没有不带GNU的完整的Linux系统[sic]?(#linuxsyswithoutgnu)
有一些完整的系统带有Linux而没有GNU,Android就是一个例子。但是叫它们“Linux”系统是一个错误,正如叫GNU为“Linux”系统是个错误一样。

Android和GNU/Linux系统非常不同—因为它们两个共同的代码很少。事实上,它们唯一的共同点就是Linux。

如果你称整个GNU/Linux系统为“Linux”,那么你就会发现有些类似的东西的叫法使你犯难,比如“Android包含Linux,但它不是Linux,因为它没有你所说的Linux [sic]常常带有的库和应用[就是GNU系统]。”

Android和GNU/Linux带有的Linux一样多。它没有的是GNU系统。Android把GNU用Google软件代替,其工作方式也大有不同。使Android和GNU/Linux不同的原因正是GNU的缺失。

如果我们指的是使用GNU/Linux和Android,那么我们说“使用Linux”对吗?(#usegnulinuxandandroidlinuxsyswithoutgnu)
完全不对。这种用法太牵强,人们是无法知道其确切的意思的。

公众会觉得用“使用Linux”来说使用Android非常奇怪。就像你在和别人谈话,但是你说你是在和内脏或循环系统谈话一样。

公众把事实上的使用GNU/Linux理解为“使用Linux”,这就是常见的误解:认为整个系统就是“Linux”。

使用Android和使用GNU/Linux是完全不同的,就像开车和骑车不同一样。它们都包含Linux和使用它们并没有关系,就像汽车和自行车都有金属和使用它们没有关系一样。如果你想谈的是开车和骑车,那么你不会谈“驾驶金属物体”—除非你是在和读者开玩笑。你会说,“使用汽车和自行车”。同样的,谈论使用GNU/Linux和Android的明确方法是说“使用GNU/Linux和Android”。

为什么不就干脆叫该系统为“Linux”,并以此强化Linus Torvalds作为社区的广告人物?(#helplinus)
Linus Torvalds是他自己追求的“广告人物”(其他人挑选的词语,而不是我们说的),不是我们的。他的目的是使该系统更流行,而且他坚信该系统的社会价值仅在于它提供的实用优势:其能力、可靠性和易得性。他从来没有致力于把自由合作作为一个道德原则,这就是公众没有把“Linux”这一名称和该道德原则连接到一起的原因。

Linus公开陈述他不同意自由软件运动的理念。他在工作中开发非自由软件多年(并且在“Linux”世界巡展上对众多听众这么说),而且公开邀请Linux内核的开发者和他一起使用非自由软件来工作。他甚至走得更远,他指责那些建议工程师和科学家应该考虑技术进步对社会影响的人们—拒绝学习原子弹的开发对社会的教训。

为了学习和快乐编写一个自由软件并没有什么错;Linus因此编写的内核对我们的社区是一个重要的贡献。但是这些动机并不是整个自由系统,GNU/Linux,存在的理由,而且它们也不能保证我们将来的自由。公众应该知道这个道理。Linus有权利推动其观点;不过,人们应该知晓我们讨论的操作系统源自自由的理念,而不是他的观点。

难道我们把Linus Torvalds的成果标记为GNU不是错误吗?(#claimlinux)
因为那是错误的,所以我们没有那样做。Torvalds的工作是Linux,内核;我们很谨慎,并没有把它作为GNU工程的贡献,也没有把它贴上“GNU”的标签。当我们谈论整个系统时,我们使用“GNU/Linux”的名字来给予他应得的荣誉。
Linus Torvalds同意Linux只是内核的说法吗?(#linusagreed)

他一开始是这样看的。Linux最早的发布声明曾说,“大多数和linux一起使用的工具是GNU软件,是使用GNU copyleft发布的。这些工具不在此发布之列——请向我(或者是GNU)咨询详情”

为什么不完成GNU Hurd内核、发布整个GNU系统并把GNU/Linux的问题抛在脑后?(#finishhurd)
无论使用哪个内核,我们都希望GNU操作系统获得荣誉。

要使GNU Hurd能够和Linux竞争是一个艰巨的工作,而且并没有明确的必要。Linux作为内核唯一的道德错误是它带有固件“blobs”;对其最好的解决方案是开发这些blobs的自由替代软件

战斗已经失败了—社区已经做出了选择而我们无法更改,为什么还纠结这事儿?(#lost)
这不是战斗,这是教育活动。系统应该叫什么不是一个单一的决定,它不应该由“社会”在短时间内决定:每个人、每个组织都能决定使用什么名字。你不能强求其他人说“GNU/Linux”,但是你能够决定自己叫该系统为“GNU/Linux”—你这样做,你就是在教育其他人。
社区已经做出了选择而我们无法更改,如果我说“GNU/Linux”又有什么用呢?(#whatgood)
这不是一个全部或者没有的情况:正确和错误的概念或多或少地被人们传播着。如果你称该系统为“GNU/Linux”,那么你就是在帮助他人了解该系统的真正历史、渊源和存在的理由。你也许不能凭借一己之力更正所有的误传,但是你能够起到帮助。哪怕仅有几百个人看到你在使用“GNU/Linux”,你也已经不费吹灰之力地教育了相当数目的人了。而且其中会有一些人继续向另外的人传播正确的概念。
把系统叫做“Linux”再花10分钟教育人们其来龙去脉不是更好吗?(#explain)
如果你帮助我们这样向他人解释,我们感谢你的努力,但是这并不是最好的方式。它不如直接叫系统为“GNU/Linux”有效,也没有有效地利用你的时间。

它效果不佳是因为它可能无法打动人心,而且无法广泛传播。有些听你解释的人会专心,并体会到系统渊源的正确历史画面。但是他们不大会在每次谈起该系统时都向人重复这样的解释。他们可能只会称该系统为“Linux”。不经意之间,他们会帮助扩散错误的画面。

由于要花许多时间,所以它不那么有效率。每天说出和写出“GNU/Linux”只需花几秒钟,所以你能够告诉非常多的人。在书面和口头区别Linux和GNU/Linux是目前帮助GNU工程的最有效的方法。

当你让他们叫该系统为GNU/Linux时,人们会嘲笑你。你何苦让自己受这个刺激呢?(#treatment)
称该系统为“Linux”会给人们展示该系统历史和存在理由的错误画面。那些嘲笑我们的请求的人可能已经看了错误的画面—他们以为Linus做了这一切,所以他们在我们请求荣誉时嘲笑我们。如果他们了解了事实,可能他们就不会笑了。

我们为什么要冒被嘲弄的风险来发出我们的请求呢?因为通常这样做对GNU工程是有帮助的。我们要冒着受不该受的侮辱的风险实现我们的目标。

如果你看到如此可笑的不公平事件,请不要坐视不管。请教育那些在嘲笑的人历史的真相。当他们看到我们的请求是合理的时候,任何有正义感的人都不会再笑了。

当你让他们叫该系统为GNU/Linux时,人们会指责你。疏远他们,不也是损失?(#alienate)
损失不大。不感谢我们在系统开发中的角色的人也不大会努力帮助我们。如果他们做了推动我们目标的工作,比如发布自由软件等,那可能是由于其他不相干的原因,并非因为我们的请求。同时,他们在教育其他人把我们的贡献赋予另外的人,这实际上消弱了我们获得帮助的能力。

担心疏远那些本来就不那么合作的人毫无意义,为了避免激怒那些始作俑者而规避主要矛盾会带来更大的伤害。所以我们会继续纠正这个名称误用。

无论你做了什么贡献,你有权重命名系统吗?(#rename)
我们不是在命名所有的东西;我们自从1983年声明以来,就一直叫该系统为“GNU”。那些将系统改称为“Linux”的人本不该那么做。
强制人们叫它“GNU/Linux”系统不是错误吗?(#force)
如果我们是强制,那么我们错了;我们没有那样。我们称该系统为“GNU/Linux”,并且我们也请求你这么做。
为什么不控告哪些叫整个系统为“Linux”的人?(#whynotsue)
控告没有法律基础,由于我们坚信言论自由,即使有理我们也不会诉之法律。我们请求人们称系统为“GNU/Linux”是因为这是在做正确的事。
难道不能在GNU GPL中要求人们称该系统为“GNU”吗?(#require)
GNU GPL的目的是保护用户的自由不受那些会把自由软件变成专属软件的人的限制。虽然称系统为“Linux”的人经常会做些限制用户自由的事,比如在GNU/Linux中加入非自由软件,甚至是为此开发非自由软件,仅仅是称系统为“Linux”本身并不剥夺用户的自由。让GPL限制人们对所用系统的名称并不合适。
由于你曾经反对原始BSD许可证要求通过广告致谢加利福尼亚大学,所以你现在要求致谢GNU工程不是虚伪吗?(#BSDlicense)
把GNU/Linux这一名称作为许可证要求也许是虚伪,而且我们没有那样做。我们只是请求你给予我们应得的荣誉。

请注意至少有两种不同的BSD许可证。为了清晰起见,请不要在没有明确是哪一个许可证时使用“BSD许可证”一词。

由于你没有在GNU GPL中要求人们称该系统为“GNU”,所以事情就应该发生;为什么你现在又抱怨呢?(#deserve)
此问题假定了一个相当矛盾的一般道德前提:如果人们没有强迫你公平对待他们,那么你就有权任意利用他们。换句话说,该问题认为这样的假定是对的。

希望你和我们一样不同意该假定。

如果你们不和这么多人作对,情况不是更好吗?(#contradict)
我们不认为我们应该由于数目大的人群被误导而跟随他们。我们也希望你的决定是因为事实更重要。

如果我们没有首先挑战大多数人的信仰:专属软件是合理和可接受的,那么我们可能就永远不能开发出一个自由的操作系统。

由于许多人都叫它“Linux”,不正说明这是正确的?(#somanyright)
我们认为将一个流行的错误当成事实是不对的。
把系统名称按照大多数用户已知的名称来叫不是更好吗?(#knownname)
用户有学习的能力。由于“GNU/Linux”包含了“Linux”,他们会了解你指的是什么。如果你时不时地加上“(经常错误地被认为是‘Linux’)”,他们就全都明白了。
许多人在乎的是哪里方便或谁个获胜,而不是谁是谁非。通过不同的方式不是能获得更多的支持吗?(#winning)
只在乎哪里方便或谁个获胜是一个非道德的生活方式。非自由软件就是这种非道德方式的例子,而且因之繁荣。所以,长期来看,我们接受该方式就是搬起石头砸自己的脚。我们要继续在正确和错误的框架下讨论问题。

我们希望你是看重谁是谁非的一员。

译注

  1. geek,极客。是指对某事、尤指电脑相关的事非常痴迷或了解的人。

 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

【from:http://www.ha97.com/3188.html

Hurd原本是要成为GNU操作系统的真正内核,然而它从未真正降临人间。Linus Torvalds曾经写过,如果GNU kernel在1991年春天发布,他不会启动Linux项目。GNU操作系统项目始于1984年,在Linux出现之前它有7到8年的时间创造出一个可用的内核,然而它的开发进程,不时被频繁的改变中断。Richard Stallman为了无止境寻找完美内核,而忘记了HURD的原本目的:能用的操作系统。

Debian GNU/Hurd screenshot 2

Debian GNU/Hurd screenshot 1

Richard Stallman(RMS)在1983年9月建立了GNU项目,当时没人相信他能创建一个类似UNIX的完整操作系统,但十分固执的RMS没有改变他的伟大目标。在内核诞生之前,前期的工作已经陆续完成,如编辑器、编译器、bash、make、autoconf和emacs等都已经开发了出来。但RMS在开发GNU Emacs时的遭遇对整个项目产生深远影响。

RMS听说了名叫“Free University Compiler Kit(简称VUCK)”的编译器,于是写信给作者询问是否可以在GNU中使用,结果作者傲慢的回信称,大学也许“免费(Free)”,但编译器要收费。RMS于是创造了GCC。在此期间RMS改变了GNU项目背后的哲学概念,强调了自由软件的意义,并将其写入GPL许可证中。
这一变化对HURD项目的影响是:内核必须发布到公有领域…HURD最初取名为Alix,这一名字来自RMS的“恋人”,不过内核架构师Thomas Bushnell更偏爱HURD这个名字,它是“HIRD of Unix Replacing Daemons”的间接递归缩写….GNU项目与卡内基梅隆大学达成协议,于1991年5月正式宣布HURD项目,它将基于卡内基梅隆大学的Mach微内核。但在当年的4月,Torvalds已经开始酝酿Linux项目。

Hurd 简介

GNU Hurd 是 GNU 工程中取代 Unix 的核心。 Hurd 是一组运行在 Mach 微内核上的服务器,用来实现 Unix 或其他核心(如 Linux)实现了的文件系统、网络协议、及文件访问控制等其他功能。

目前,Hurd 运行在 IA32 系统上。未来 Hurd 应该,而且可能会被移植到其他硬件系统或微内核上。

Hurd 的优点

Hurd 不是一个已知的最先进的内核,但它有一些诱人的特点:

它是自由软件
任何人在遵守 GNU General Public License (GPL) 的条件下,都可以使用、修改或重新发布它。

它的兼容性
Hurd 提供了一个熟悉的编程和用户环境。对於所有的意图和目的来说,Hurd 都是一个现代的类 Unix 的内核。 Hurd 使用了 GNU C 库,而此库的开发紧紧追踪 ANSI/ISO、BSD、POSIX、Single Unix、SVID 及 X/Open 等标准。

可持续发展的构造
与其他流行的内核软件不同,Hurd 拥有面向对象的结构,这就使得它不断发展而不用改变当前的设计。这种结构将有助於完成 Hurd 主要的重设计和修改而不必完全重写代码。

它的规模很大
Hurd 实现了强有力的多线程,以便它在单处理器和对称多处理器上都可以高效运行。 Hurd 的接口设计成允许透明网络组的共有,但这个特性尚未实现。

它是可扩展的
对於学习怎样成为一个内核黑客或者在内核技术中实现新想法来说, Hurd 是一个有吸引力的平台。系统的每一个部分都设计成可修改和扩展的。

它是稳定的
在开发和测试新的 Hurd 内核组件时,可能不需重新启动机器(即使是意外的)。运行自己的内核组件不会妨碍其他用户,而且这并不需要特殊的系统权限。由於这种设计,扩展内核的程序是安全的:除非他们认可这种改动或者你是系统管理员,否则你的修改不可能影响到其他用户。

它已经存在
Hurd 是正在工作中的真实的软件。不是一个研究项目或提案。你可以开始使用并开发它,而根本不必等待。

Hurd 的含义

据 Thomas Bushnell,BSG,Hurd 的主设计师所述:

『Hurd』代表『Hird of Unix-Replacing Daemons』,而『Hird』又代表了『Hurd of Interfaces Representing Depth』。据我所知,这里,我们拥有了第一个以一对双关语命名的软件。

此工程的重要地位

今天,Hurd 与 GNU Mach 微内核、GNU C 库和其他 GNU 系统中的 GNU 以及非 GNU 程序一起,提供了一个相当完整且可用的操作系统。因为还有许多错误和未完成的特性,所以 Hurd 还不能用作生产。然而,它应该为更深入的开发和非关键性程序的使用提供了一个良好的基础。

GNU 系统 (也称作 GNU/Hurd) 完全是自我包含的(你可以使用 GNU 自身编译它的所有部分)。你可以并行运行若干个 Hurd ,甚至可以用在另一个 Hurd 上运行的的 gdb 来调试某一 Hurd 上运行的关键服务。你可以运行 X 窗口系统,使用它的应用程序和 Apache 等高级服务器应用程序。

反过来看,对块设备(如声卡)和其他设备的支持大部分还处在短缺之中。即使提供了 POSIX 接口,一些额外的接口,像 POSIX 共享内存或旗语等都仍在开发之中。

所有这些适用於目前正在开发的版本,而不是上次的发布(0.2)。我们鼓励每一个感兴趣的人试用最新的开发版,并将反馈信息发送给 Hurd 的开发者。

 

GNU Hurd官方主页:http://www.gnu.org/software/hurd/

GNU Hurd开发版下载:http://ftp.debian-ports.org/debian-cd/hurd-i386/L1/

参考资料:http://en.wikipedia.org/wiki/GNU_Hurd

 

posted @ 2019-10-17 14:03  mapleay  Views(325)  Comments(0Edit  收藏  举报