谈谈 Linux 与 GNU/Linux

前言

之前看到提问「Linux 与 GNU/Linux 的区别」,当时刚好在读《自由软件,自由社会:理查德·斯托曼选集》这本书,里面提到了这个,就按着记忆写了个回答。

以下算是读书笔记吧……

虽然我常觉得对着一个定义深究它到底是啥玩意没太大意义,但是导致这种结果的这个过程还是很有趣的。就像是「这也太像我的叔叔奥斯卡了吧!」,没什么技术性质的偶然被民意裹携成为官方钦定的例子数不胜数……「动画」还是「动漫」?「ins」还是「IG」?

不过在当前的环境下,任何一个偶然都会被当作(背后势力)营销就是了……


正文

百科版:WIKI_Linux 命名爭議

首先引入自由软件(free software)这个概念,注意是「自由软件」而非「免费软件」。自由软件意味着用户可以自由地对该软件进行使用、复制、修改等。

Richard 是个代码界的革命者,一生都在为「消灭代码私有制」这一目标奋斗,他倡导自由软件,那要做自由软件得先做个自由操作系统啊,你软件是自由的,运行在别人的非自由操作系统也不大合适吧。

为了这个目的,Richard 便尝试着组织开发一个自由的操作系统,这个操作系统被命名为 GNU。

实际上,GNU 往往指代着自由软件这一整个计划甚至思想 —— 即消灭代码私有制。

比如 GNU General Public License,缩写是 GPL,就是基于 GNU 的一种软件分发协议,用这个协议的话就代表你的代码遵循 GNU 的哲学,用户可以随意地使用、复制、巴拉巴拉……

GNU 是 「GNU is not Unix」的缩写,Unix 是当时的商业操作系统,GNU 这个名字就代表着与私有操作系统的界限划分。(有那味儿了)

GNU 开发到后面就差一个内核了,这个时候项目组也正在做自己的内核 Hurd,不过 Hurd 离可用还有一定距离,刚好 Linus 的 Linux 内核也发布一阵子了,完成度也不错,就使用了 Linux。

当时 GNU 已经完成了除操作系统内核外的大部分软件,比如 Bash、Glibc、Gcc……

Linus 在上面这些软件的基础上开发出 Linux。(GNU 兼容 Unix,所以虽然 GNU 操作系统尚未完成,但上述这些软件是可以运行的。)

(PS:Richard 当时本来想提议命名项目组开发的内核为自己女朋友的名字,后来这事因为用了 Linux 就泡汤了,而且 Richard 后来也和女朋友分手了。)

使用了 Linux 内核的 GNU 便是 GNU/Linux —— 但这个称呼有争议,部分人提倡使用 Linux 命名。两个称呼的优劣以及由此产生的争议不多提。

现在的语境下,Linux 基本泛指一切使用 Linux 内核的操作系统。

我觉得,按哲学思想与功能来区分的话:Linux 指 Linux 内核,GNU/Linux 指 GNU 项目与 Linux 组成的操作系统。

Linux 内核的开源协议是 GPL。

GNU/Linux 遵循 GNU 的哲学,系统只使用自由软件。而现在的各种「基于 Linux 的发行版」,便是基于 GNU/Linux ,再打包一些其它软件(比如桌面环境),做一些配置,提供给用户。

打包些软件这一步骤,为了提供便利,可能就会打包些非自由软件。

如果打包了非自由软件,这时再称 GNU/Linux 其实也不大合适了。

啥是非自由软件呢?不遵循自由软件协议(GPL)的都是非自由软件……还是排除法好理解些。值得注意的是,开源不一定意味着自由 —— 虽然 GPL 是一种开源协议,但开源协议有好多种呢。开源只意味着公布源代码。

Richard 与 Linus 对该命名的发言

对命名的讨论太多了,还是拿 GNU 与 Linux 各自的领袖人物的发言举例吧……

今天有数千万个用户,正在使用的这个操作系统,是早就已经开发好,让他们可以自由的使用。但是他们不晓得,因为他们以为这个系统是 Linux,而它是由一个学生“只是为了好玩”(just for fun)而发展出来的。 ——理查德·斯托曼

好的,我认为这个称呼是合理的,但只有你真的做了一个 Linux 的 GNU 发行版时,这才是合理的……这就像是我觉得“Red Hat Linux”,或“SuSE Linux” 或“Debian Linux”这些名称是很好的,因为如果你真的做了一个你自己的 Linux 发行版时,你必须要帮它取个名称,但是要把 Linux 全部通称“GNU Linux”,我觉得这很荒谬。——林纳斯·托瓦兹

上面是从 WIKI_Linux 命名爭議 摘取的两人发言,单独看可能有歧义。