要了解更多,你还可以阅读我们关于Linux和GNU工程的网页、关于为什么是GNU/Linux?的网页和关于从未听说过GNU的GNU用户的网页。
当人们看到我们使用并建议GNU/Linux作为系统名称,而其他人称之为“Linux”时,他们会问许多问题。此处列举了常见问题以及我们的回答。
为了公平,我们至少应该被平等对待。
请参看Linux和GNU系统与从未听说过GNU的GNU用户来了解更多说明,并参看GNU工程来了解历史。
称该系统为GNU/Linux确认了我们的理想在社区建设中的角色,并帮助公众了解这些理念的实际重要性。
把Linux和GNU系统结合在一起的人不曾意识到他们的努力合起来是什么。他们的注意力集中在Linux部分,而没有意识到GNU才是更大的部分。他们开始称之为“Linux”,虽然这个名字并不适合他们所获得的系统。几年后我们才意识到这个问题,并请求人们更改。那时,这个混淆已经遥遥领先了。
大多数称该系统为“Linux”的人从来没有听说过为什么这不对。他们看到其他人这么用,就理所当然地认为这一定是对的。“Linux”这个名字还传播了错误的系统渊源,因为人们一般会认为系统的历史一定和该名字相关。比如,他们通常相信系统的开发是由Linus Torvalds在1991年开始的。这个错误的场景又会加强系统应该叫做“Linux”的想法。
本文中的许多问题表达了人们想要为他们习以为常的名字辩护的诉求。
当人们称整个系统为“Linux”时,其后果就是他们用内核的名字来称呼整个系统。这造成了许多混淆,因为只有专家才可以辨别什么时候说的是内核什么时候说的是整个系统。把整个系统称为“GNU/Linux”,并把内核称为“Linux”,你就避免了歧义。
Linus Torvalds部分受到1990年在芬兰的一场关于GNU的演讲的影响。没有这个演讲,他也可能会写出一个类Unix的内核,但是它可能不会是自由软件。Linux在1992年,当Linus把它按GNU GPL发布时,成为自由软件。(参看0.12版的发布说明。)
即使Torvalds使用其他自由许可证发布Linux,单单一个自由的内核也无法改变世界。Linux正好适合一个更大的框架、一个完全的自由操作系统:GNU/Linux,这样它才变得显眼。
不过,有人不喜欢我们这样说。有时,这些人会反过来驱赶我们。有个别情况,这些人是如此粗鲁以至于我们不得不想,他们是不是存心要胁迫我们保持沉默。这没有使我们沉默,但是这确实要分裂社区,所以我们希望你们能够说服他们不要这样做。
不过,这只是分裂社区的一个次要因素。社区最大的分裂在于欣赏自由软件作为社会和道德问题并认为专属软件是社会问题的人(自由软件运动的支持者)和那些只讨论实际利益并只把自由软件当作有效的开发模式的人(开源运动者)之间的分裂。
这种分歧不只是名称的问题—这是基本价值观的不同。社区看到和思考这个分歧很重要。“自由软件”和“开源”这两个名字就是这两部分的旗帜。请参看为什么开源错失了自由软件的重点。
这个价值分歧和人们关注GNU工程在社区中角色中的份量部分吻合。看重自由价值的人们更倾向于叫这个系统为“GNU/Linux”,而了解该系统为“GNU/Linux”的人也更倾向于关注我们对于自由和社区的哲学观点(这就是为什么系统名称的选择使社区非常不同的原因)。然而,即使每个人都知道系统的真正渊源和正确名称,分歧也可能还会存在,因为问题真的在那里。只有看重自由的我们说服每个人(不太容易)或者我们被完全打败(希望不要如此),问题才会消失。
问这个问题的人可能认为他们认识的极客1抱有这个想法。极客通常知道GNU,但是很多极客关于GNU的概念是完全错误的。比如,许多人认为GNU是一个“工具”集合,或者GNU是一个开发工具的项目。
此问题的用词也反映出了另一个典型的常见错误。谈及“GNU在开发中的角色”时认为GNU是一群人。GNU是一个操作系统。讨论GNU工程的角色或其他活动才有意义,而不是谈论GNU。
事实上,在发达国家里,几乎所有人都知道是Microsoft(微软)开发了“Windows”系统,所以把“Microsoft Windows”缩写为“Windows”不会使人们误解该系统的属性和来源。但是,把“GNU/Linux”缩写为“Linux”的确误导了该系统的起源。
此问题本身就具有误导性,因为GNU和Microsoft并不类似。Microsoft是一家公司;GNU是一个操作系统。
GNU工程由于GNU操作系统而得名—它是开发GNU系统的工程。(请参看1983的初始声明。)
我们开发了诸如GCC、GNU Emacs、GAS、GLIBC、BASH等程序,因为GNU操作系统需要它们。GCC,GNU编译器集合是我们为GNU操作系统编写的编译器。我们,为GNU工程工作的一群人,也为GNU工程开发了Ghostscript、GNUCash、GNU Chess和GNOME。
内核是操作系统的程序之一—它为其他程序的运行分配机器的资源。内核也负责开始和终止其他程序。
混淆事情的是,有些人也使用“操作系统”一词表示“内核”。这两个意思都可以追溯到多年以前。使用“操作系统”一词表示“内核”的例子可以在80年代的一些系统设计教科书中找到。与此同时,也在80年代,“Unix操作系统”是按照包含所有系统程序来理解的,而Berkeley版的Unix甚至还包括游戏。由于我们意在使GNU成为一个类Unix的操作系统,所以我们在使用“操作系统”一词时是指和Unix一样的意思。
大多数时间,人们谈及“Linux操作系统”时,他们用“操作系统”指的就是我们所说的意思:他们说的是整个程序集合。如果你指的是这个,那么请叫它“GNU/Linux”。如果你只是指内核,那么“Linux”是正确的名字,但是请你也加上“内核”来避免混淆你要指明的程序。
如果你更爱使用诸如“系统发行版”之类的词来表示整个系统集合,而不用“操作系统”一词,也没问题。这时,你可能应该说GNU/Linux系统发行版。
房屋是由许多通用的小部件构造的,这些小部件在施工现场切割和组装。它们必须由下而上组装在一起。因此,如果根基没有建好,你无法建造其他部分;你只能看到一个地坑。
相反,操作系统由许多复杂的部件构成,它们可以以任何顺序开发。当你开发了大多数部件时,你就完成了大部分工作。这更像是构造一个国际空间站,而不是一个房屋。如果空间站的大多数部件都进入轨道,只是在等一两个重要模块,那么这就类似GNU系统在1992年的情形。
这个标准太严格,它并不是判断贡献者贡献大小的好办法。
Linus Torvalds 对这个操作系统做出了重要贡献;GNU 工程开始得更早、贡献也更多。“GNU/Linux” 这个名字给了双方荣誉。
我们本来预计发布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内核”很容易被误解为“Linux的内核”并暗示Linux必定不单单是一个内核。你可以通过说或者写“该内核,Linux”或“Linux,内核”来避免大家可能的误解。
该系统最短的合法名称是“GNU”,不过我们称之为“GNU/Linux”,道理如下。
“GNU”一词没有出现在“Glinux,”这个名字里,所以大多数人不会注意到GNU。即使写成大写的“GliNUx,”,大多数人也不会意识到这是在说GNU。
它就像是在写“GNU/Linux,”,但是把“GNU/”写得很小,而让大多数人根本看不到它。
说出或者写出“GNU/”只需一秒钟。如果你对我们开发的系统心怀感激,难道你不愿意花一秒钟来表示肯定?
实际上,“GNU/Linux”只有四个音节。“Unfortunately(不幸一词)”有五个音节,但是人们会毫不迟疑地使用它。
省略 “Matthew” 不会严重曲解 Stallman 的本性、来源、理想和目标。省略 “GNU” 确实会对 GNU/Linux 系统的这些方面带来曲解。
这是一种隐藏谬误的常见方式:将谬误埋藏在错误的类比之中。更好的类别应该是,“为什么我们不应该叫 Stallman ‘Torvalds’?”
所以如果你想简单称该系统为“GNU”,并以此避免因为叫它“Linux”而付费,我们不会指责你。
如果你还是强烈地想要给予人们应得的荣誉,那么你会觉得一些次要的贡献者也应该在系统名称中得到荣誉。这样的话,我们也就没什么好争论的了。如果你觉得X11应该体现在系统名称中,而且你想称之为GNU/X11/Linux,没问题。如果你觉得Perl也值得致意,而且想把系统名称写成GNU/Linux/Perl,尽管去做吧。
由于像GNU/X11/Apache/Linux/TeX/Perl/Python/FreeCiv这样长的名字会变得滑稽,所以你终究会限制一个长度而许多次要的贡献将无法写入该名称。因为限制长度并没有明显的对错,所以无论你怎么做,我们都不会反对。
不同的长度会形成不同的系统名称。但是一个名字,无论怎么样的长度限制,都不会是因为考虑到公平和荣誉而出现的,它就是“Linux”。给予一个次要贡献者(Linux)所有的荣誉而忽略主要的贡献者(GNU)不可能是公平的。
GNU不同,因为它的贡献不只是一个程序,也不只是一个程序集合。GNU是整个系统得以构建的框架。
今天,GNU是系统的一小部分,而Linux就更小了。但是他们是系统的核心;系统由二者合并而成。因此,称之为“GNU/Linux”还是合适的。
不能把GNU和Red Hat或Novell相比较;GNU不是一个公司,也不是一个组织,更不是一个活动。GNU是一个操作系统。(当我们说GNU工程时,我们指的是开发GNU系统的工程。)GNU/Linux系统基于GNU,而这就是为什么GNU应该出现在系统名称里。
这些公司对GNU/Linux系统的贡献在于他们对多个GNU包的代码贡献,其中包括GCC和GNOME。命名GNU/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” 来发音。如果你不说出斜杠,人们就会以为你在说 “GNU Linux”,这其实 不是一个对该组合的恰当称呼。
根据英语语法规则,在 “GNU Emcas” 这个组合中,“GNU” 一词修饰 “Emacs”。这是描述 GNU 软件包中有一个程序叫 Emacs 的正确方法。
“GNU/Emacs” 说的是 GNU 这个操作系统和 Emacs 这个程序的组合。这个单用来指 Emacs 程序不合适,所以 “GNU/Emacs” 是一个错误的名字。
首先论及主要的贡献者是正当和合理的。GNU对系统的贡献不仅大于Linux,而且也早于Linux。实际上,是我们发起了整个活动。
另外,“GNU/Linux”这个名字对Linux是系统最底层而GNU是技术面的更上层这一情况也是恰当的。
不过,如果你更愿意说“Linux/GNU”,这也比大多数人完全不提GNU而把整个系统当作Linux要好得多。
如果有人说一个GNU/Linux发行版“Foobar BSD”,你会说这是个错误。你可能会这样告诉他们,“这个系统不是BSD”。不过,它也不是Linux。
这意味着制作“Foobar Linux”发行版的人在重复这个常见的错误。我们感谢Debian、Dragora、Musix、Trisquel和Venenux等发行版采纳了GNU/Linux作为它们的正式名称的一部分,而且如果你参与了其他的发行版,我们鼓励你也这样做。
当有人通过将“GNU”改为“Linux”并称其系统版本为“Foobar Linux”来散布错误信息时,你通过叫该系统为“Foobar GNU/Linux”而纠正错误是正确的做法。
我们不能让它们对此做正确的事,但是我们不会因为历程艰难而放弃。或许你的影响力无法和IBM或Red Hat相提并论,但是你还是可以帮忙的。我们一起可以将事情改变到一个程度,此时称系统为“GNU/Linux”的公司会赚到更多。
问题是怎么才能改变这个情况。
由于大多数使用GNU加Linux的社区用户并没有意识到他们用的是什么,所以让我们和这些掺假的版本脱离关系,说它们不是真正的GNU,并不能更多地教育用户自由的价值。他们将不能获得应得的信息。他们首先只会反应出他们从来没想到该系统是GNU。
让这些用户看到该系统和自由的关联的方法正好相反:告诉他们所有这些系统版本都是GNU,这些系统都是建立在一个特意为用户自由而存在的系统之上的。有了这样的理解,他们就能够开始意识到包含非自由软件的发行版是反常的、掺假的GNU版本,而不再认为它们是合理和适当的“Linux版本”。
发起GNU/Linux用户组会非常有用,它会称系统为GNU/Linux并接纳GNU工程是系统的基础这一理念。如果你当地的Linux用户组有以上提及的问题,那么我们建议你或者发起改变其倾向(和名称)的活动,或者开展一个新的用户组。关注表面目标的人们有权顾及他们的观点,但是请不要让他们把你带到沟里去!
关于开发一个GNU/Linux发行版,我们已经做过一次,就是我们资助Debian GNU/Linux早期开发的时候。再做一次看来并不会有用;新的发行版要耗费大量工作,并且除非它比其他发行版有非常大的实际优势,它的目的不明确。
反之,我们会帮助100%自由的GNU/Linux发行版的开发者,比如gNewSense和Ututo的开发者。
如果我们使用一个现有的GNU/Linux版本并重新冠名为“GNU”,那么它差不多就和使用一个GNU版本并冠以“Linux”之名一样。这不对,而且我们不想这么做。
这些做出更改的人对和我们合作并没有什么兴趣。实际上,其中一个人告诉我们他不关心GNU工程的工作,因为他是一个“Linux用户”。这使我们震惊,因为将GNU包移植到其他系统的人一般希望和我们一起工作来使这些更改进入安装程序。不过这些人,开发了一个基本上是基于GNU的系统,是第一个(实际上还是仅有的一个)不愿意和我们一起工作的团体。
正是这个经历第一次向我们展示了人们会把一个GNU系统的版本叫做“Linux”,而且这种混淆淡化了我们的工作。请求你叫系统为“GNU/Linux”是我们对此问题的回应,也是对“Linux”这一误称带来的其他问题的回应。
事实上,我们没有。我们在1994年就开始私下和开发者以及贡献者谈论此事,并在1996年采取了更公开的活动。只要有必要,我们会继续下去。
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的系统;所以,许多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”的完全不同的名字,
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系统一样。
GNU是一个由社区维护的操作系统。它包含的内容远远多于仅仅是GNU软件包(对此我们有一个列表),并且人们一直在添加更多的包。除了这些更改,它还是GNU系统,加上Linux就产生了GNU/Linux。如果你使用了一部分GNU系统,那么说你用了“多少”并没有什么意义。
如果我们看看包的级别,Linux是GNU/Linux系统的一个重要的包。包含一个重要的GNU包已经足够我们要求在名称上平等对待了。
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的缺失。
公众会觉得用“使用Linux”来说使用Android非常奇怪。就像你在和别人谈话,但是你说你是在和内脏或循环系统谈话一样。
公众会把事实上的使用GNU/Linux理解为“使用Linux”,这就是常见的误解:认为整个系统就是“Linux”。
使用Android和使用GNU/Linux是完全不同的,就像开车和骑车不同一样。它们都包含Linux和使用它们并没有关系,就像汽车和自行车都有金属和使用它们没有关系一样。如果你想谈的是开车和骑车,那么你不会谈“驾驶金属物体”—除非你是在和读者开玩笑。你会说,“使用汽车和自行车”。同样的,谈论使用GNU/Linux和Android的明确方法是说“使用GNU/Linux和Android”。
Linus公开陈述他不同意自由软件运动的理念。他在工作中开发非自由软件多年(并且在“Linux”世界巡展上对众多听众这么说),而且公开邀请Linux内核的开发者和他一起使用非自由软件来工作。他甚至走得更远,他指责那些建议工程师和科学家应该考虑技术进步对社会影响的人们—拒绝学习原子弹的开发对社会的教训。
为了学习和快乐编写一个自由软件并没有什么错;Linus因此编写的内核对我们的社区是一个重要的贡献。但是这些动机并不是整个自由系统,GNU/Linux,存在的理由,而且它们也不能保证我们将来的自由。公众应该知道这个道理。Linus有权利推动其观点;不过,人们应该知晓我们讨论的操作系统源自自由的理念,而不是他的观点。
他一开始是这样看的。Linux最早的发布声明曾说,“大多数和linux一起使用的工具是GNU软件,是使用GNU copyleft发布的。这些工具不在此发布之列——请向我(或者是GNU)咨询详情”。
要使GNU Hurd能够和Linux竞争是一个艰巨的工作,而且并没有明确的必要。Linux作为内核唯一的道德错误是它带有固件“blobs”;对其最好的解决方案是开发这些blobs的自由替代软件。
它效果不佳是因为它可能无法打动人心,而且无法广泛传播。有些听你解释的人会专心,并体会到系统渊源的正确历史画面。但是他们不大会在每次谈起该系统时都向人重复这样的解释。他们可能只会称该系统为“Linux”。不经意之间,他们会帮助扩散错误的画面。
由于要花许多时间,所以它不那么有效率。每天说出和写出“GNU/Linux”只需花几秒钟,所以你能够告诉非常多的人。在书面和口头区别Linux和GNU/Linux是目前帮助GNU工程的最有效的方法。
我们为什么要冒被嘲弄的风险来发出我们的请求呢?因为通常这样做对GNU工程是有帮助的。我们要冒着受不该受的侮辱的风险实现我们的目标。
如果你看到如此可笑的不公平事件,请不要坐视不管。请教育那些在嘲笑的人历史的真相。当他们看到我们的请求是合理的时候,任何有正义感的人都不会再笑了。
担心疏远那些本来就不那么合作的人毫无意义,为了避免激怒那些始作俑者而规避主要矛盾会带来更大的伤害。所以我们会继续纠正这个名称误用。
请注意至少有两种不同的BSD许可证。为了清晰起见,请不要在没有明确是哪一个许可证时使用“BSD许可证”一词。
希望你和我们一样不同意该假定。
如果我们没有首先挑战大多数人的信仰:专属软件是合理和可接受的,那么我们可能就永远不能开发出一个自由的操作系统。
我们希望你是看重谁是谁非的一员。