---

title: "GNU"
slug: "GNU"
description: 
date: "2025-10-01T10:11:03+08:00"
lastmod: "2025-10-01T10:11:03+08:00"
image: cover.png
math: 
license: 
hidden: false
draft: false 
categories: [""]
tags: [""]

---







## 自由与非自由软件的分类

<img src="https://chenalna.oss-cn-hangzhou.aliyuncs.com/img/image-20251008104020070.png" alt="image-20251008104020070" style="zoom: 67%;" />

## 自由软件的定义

如果一个软件是自由软件，那么它必须为用户提供以下四项基本自由：

- 自由度0：无论用户出于何种目的，必须可以按照用户意愿，自由地运行该软件。
- 自由度1：用户可以自由地学习并修改该软件，以此来帮助用户完成用户自己的计算。作为前提，用户必须可以访问到该软件的源代码。
- 自由度2：用户可以自由地分发该软件的拷贝，这样就可以助人。
- 自由度3：用户可以自由地分发该软件修改后的拷贝。借此，用户可以把改进后的软件分享给整个社区令他人也从中受益。作为前提，用户必须可以访问到该软件的源代码。

一个软件只有提供了以上所有的自由给它的用户，才可以被成为自由软件。否则，它就是非自由的。尽管我们也可以比较非自由软件为其用户提供的自由度，但是我们认为，无论如何，非自由软件本身是不道德的。

无论在哪种情况下，只有所有用户使用的代码都满足了这四项基本自由，该程序才能被视作自由软件。

自由软件关乎自由而非价格。但是专有软件[1](https://www.gnu.org/philosophy/categories.html#TransNote1)公司一般使用“free software”这一短语来指代价格。有时它们的意思是您可以免费获得一份二进制副本；有时它们的意思是在您所购买的计算机上捆绑了一份副本，而整台计算机的价格包含了二者各自的价格。不管是哪种方式，这都与我们在 GNU 计划中所指的自由软件无关。

[自由软件的标准](https://www.gnu.org/philosophy/free-sw.html)并非在于谁有权“访问”该程序；四项基本自由关注的是拥有该程序副本的用户可以使用该程序做什么。

## 开源的定义

如果某个程序是开源的，则其源代码可供用户免费使用。其用户（以及任何其他人）有权获取该源代码、对其进行修改并分发他们自己的程序版本。用户还可以根据需要分发任意数量的原始程序副本。任何人都可以出于任何目的使用该程序；该软件无需支付许可费或其他限制。OSI[ 在其网站上](http://opensource.org/osd)对“开源”有更详细的定义。

例如，Ubuntu Linux 是一个开源操作系统。您可以下载 Ubuntu，创建任意数量的副本，并将它们赠送给您的朋友。您可以在无限数量的计算机上安装 Ubuntu。您可以创建 [Ubuntu 安装光盘的混音版本](https://www.howtogeek.com/127259/choose-your-ubuntu-8-ubuntu-derivatives-with-different-desktop-environments/)并分发它们。如果您有特别的动力，您可以下载 Ubuntu 中某个程序的源代码并进行修改，创建您自己的该程序或 Ubuntu 本身的定制版本。所有开源许可证都允许您这样做，而闭源许可证则会对您施加限制。

## 各类许可证及其评论

我们有对许可证进行分类的一些关键标准：

- 许可证是否为合格的 [自由软件](https://www.gnu.org/philosophy/free-sw.html) 许可证。
- 许可证是否是一个 [copyleft](https://www.gnu.org/licenses/copyleft.html) 许可证。
- 许可证是否 [兼容 GNU GPL](https://www.gnu.org/licenses/gpl-faq.html#WhatDoesCompatMean)。除非特别说明，此处兼容是指同时兼容 GPLv2 和 GPLv3。
- 许可证是否有其他实际操作问题。

![image-20251008162343671](https://chenalna.oss-cn-hangzhou.aliyuncs.com/img/image-20251008162343671.png)





## 开源软件

“开源软件”这一短语被某些人用于指代与自由软件或多或少地相同的一类软件。它们并不是与自由软件严格一致的一类软件：它们接受某些在我们看来约束性过强的许可证（条款），也有一些自由软件许可证（条款）是它们所拒绝接受的。然而，两者外延的差别并不大：就我们所知，只有很少的开源软件不是自由软件。理论上，可能也会有自由软件不被接受为是开源软件，但是我们还没有看到实际的例子。

可是，“开源软件”的字面意思——同样也是人们普遍以为的意思——是“你可以看到源代码”。这样的意思比起自由软件定义来说要宽松得多，也比开源软件的定义宽松得多。这样的字面意思囊括了很多既非自由也非开源的软件。

为什么人们会有这种误解呢? 原因就是 “开源” 一词的字面意思。但是开源理念本来推广的就是自由软件的另外一种说法。

[开源而不自由的程序](https://www.gnu.org/philosophy/free-open-overlap.html) 最重要的案例就是 [太龌龊（tivoized）可执行程序](https://www.gnu.org/philosophy/tivoization.html)。这种程序的源代码是自由的，但在硬件上运行其可执行文件需则要硬件制造商的电子签名。

我们倾向于使用自由软件这一概念，由于它代表自由——这是“[开源](https://www.gnu.org/philosophy/open-source-misses-the-point.html)”这一短语所不能体现的。

开源软件和自由软件这两个词在很大程度上描述的是同一类软件，但是它们所基于的价值观却有着本质上的区别。对于自由软件运动而言，自由软件是一个道德底线，是对用户自由的基本尊重。开源软件则与此不同，开源哲学考虑的是怎么做把软件做得“更好”—仅仅从实用的角度。开源的哲学里，非自由软件之所以不好，是因为他们采用了一种劣等的开发方式。

在实践中，开源的要求比自由软件宽松一些。据我们所知，迄今发布的自由软件源代码都是开源软件。尽管大多数开源软件也同样是自由软件，但会有一些例外。

首先，有些开源许可证对用户过于苛刻，它们就没有被列为自由软件。比如，Open Watcom 就非自由的，因为其许可证不允许修改该软件和私自使用该软件。幸运的是，很少软件会使用这些许可证。

其次，在代码的许可证里添加了商标的要求就会把程序变成非自由软件。比如，Rust 的编译器可能是非自由的，因为其商标条款禁止销售或分发修改过的版本，除非你完全删除了所有的 *商标使用*。而仅仅是这要怎么做也不太清楚。

第三，开源的标准只关心源代码的使用。确实，几乎所有 [开源定义](https://opensource.org/osd) 中的条款都是关于软件 *源代码许可证* 的条款，而不是用户 *有自由做* 什么。不过，人们通常会把可执行文件也称为 “开源”，只因为其源代码就是那样。这就会导致某些自相矛盾的困惑，比如有时源代码是可得的（也是自由的），但是可执行文件本身却是非自由的。

这种矛盾情形的简单例子就是一个程序的源代码是弱自由许可证，即不是 copyleft 许可证，但是其可执行文件带有附加的非自由条款。假设可执行文件严格和发布的源代码对应——这个可能成立也可能不成立—用户可以编译源代码来发布自由的可执行文件。这个就是简单的例子; 这个并不是一个严重的问题。

不简单的案例会是有害的而且很重要。很多产品带有检测可执行文件签名功能的计算机，它会禁止用户安装另外不同的可执行文件；而只有一家特权公司才能生产可执行文件或完全控制该产品。我们把这种设备称作“tyrants”，即“专制暴君”；把这种行为称为“tivoization”，该名称来自我们首先看到TiVo公司使用该方法发布产品。在这样的产品上运行的可执行软件，哪怕是以自由软件许可证的名义发布了源代码，但是用户却无法运行修改后的可执行文件，所以其可执行文件不是自由软件。



![image-20251008175335470](https://chenalna.oss-cn-hangzhou.aliyuncs.com/img/image-20251008175335470.png)

对所有的开源程序来说，其中只有非常小的一部分是非自由程序。如果上图的最后一行要按比例画出，那么它的文字可能会小到看不清楚。

Tivoized 的或 [“暴君型” 设备](https://www.gnu.org/philosophy/proprietary/proprietary-tyrants.html) 带有非自由的可执行程序，而生成这些程序的源代码是自由的。在 2013 年，许多 Android 设备是暴君型的，但是也有些不是。

图中的 “O” 表示 “其他（other）”，是指源代码许可证是开源但是并不自由的程序。其中一些许可证是 2000 年左右写成的，它们被用来发布了一些程序。现在已经很久没有程序按照这些许可证发布了。我们并不清楚是否还有人在用这些许可证。

大多数非自由许可证也不是开源许可证。

## 公有领域软件（Public Domain Software）

公有领域软件是指不受版权保护的软件。如果源代码也在公有领域中，这将成为一种[非 copyleft 自由软件](https://www.gnu.org/philosophy/categories.html#Non-CopyleftedFreeSoftware)的特例。这意味着某些副本或者修改版本可能完全不是自由的。

在某些情况下，可执行程序可能位于公有领域中，但源代码不可获得。这不是自由软件，由于自由软件要求源代码的可获得性。与此同时，大部分自由软件不在公有领域中，它们是受版权保护的，并且版权持有人通过使用自由软件许可证合法地赋予任何人使用它们的自由许可。

有人以一种不严格的方式来使用“公有领域”这一概念来指代[“自由”](https://www.gnu.org/philosophy/categories.html#FreeSoftware)或“免费得到”。然而，“公有领域”是一个法律概念，准确表示“不受版权保护”之意。为了澄清，我们建议将“公有领域”仅仅用于它所严格指代的涵义，而使用其他短语来指代其他涵义。

根据伯尔尼保护文学和艺术作品公约（大多数国家已经签署），任何写下的东西自动获得版权；在大多数国家，这也包括计算机程序。因此，如果您想要使您的程序进入公有领域，您必须采取某些法律步骤以放弃其版权；否则该程序是受版权保护的。



## Copyleft

Copyleft是一种让程序或其它作品保持自由的通用方法，并要求对Copyleft程序的任何修改和扩展都保持自由。

让程序成为自由软件最简单的方法是放弃对它的版权并把它放到公有领域中。这使得他人在需要的时候可以共享这个软件及其对它的改进。但这也使得其它一些不愿合作的人把它们转变成专有软件。他们可以或多或少的进行修改，并把成果作为商业产品发布。这些修改过的程序不再像它们的原始作者所期望的那样允许用户自由的使用，这种自由被中间商剥夺了。

所谓Copyleft是指任何人都可以重新分发软件，不管有没有进行修改，但必须同时保留软件所具有的自由特性。Copyleft是为了保证所有用户都拥有自由。

在GNU项目中，我们对大多数软件使用的一种实现Copyleft的法律文件是GNU通用公共许可证。GNU通用公共许可证通常被简写为GNU GPL。

另一种实现Copyleft的法律文件，是Affero通用公共许可证（AGPL）。这个许可证的目标用户是针对服务器的软件。如果一个以AGPL授权的软件被运行在向公众提供服务的服务器上，那么对该软件的任何修改也必须要以源代码的形式对外发布。

还有一种比较退让的 Copyleft 的许可证：GNU宽通用公共许可证（LGPL），它被应用于一部分（不是所有的） GNU 函数库。 

Copyleft 软件是一类自由软件，其发布条款可以保证它所有版本的所有副本都或多或少带有相同的发布条款。例如，这意味着 copyleft 许可证普遍禁止他人为该软件添加额外的限制条款（尽管有限的一些安全的附加条款可能被允许），并且要求源代码可获得。这可以保护该程序及其修改版本，使得常见的某些方式无法将其变为专有软件。

一些 copyleft 许可证例如 GNU 通用公共许可证（GNU GPL）第三版阻止了其他一些专有化的方式，例如 Tivo 化（tivoization）。

在 GNU 计划中，我们为我们所写的几乎*所有*软件使用了 copyleft 许可证，由于我们的终极目标是赋予每位用户自由软件所蕴含的所有基本自由。

Copyleft 是一个通用的概念，为了以 copyleft 许可证发布一个实际存在的程序，您需要使用特定的一系列发布条款。有多种可能的方式编写 copyleft 发布条款，因此原则上可以有很多种 copyleft 自由软件许可证。然而实际上几乎所有 copyleft 软件都使用 GNU GPL。

### 非copyleft软件

非 copyleft 的自由软件带有来自作者的再分发和修改的许可，也带有添加额外限制条款的许可。

如果一个程序是自由的但并未采用 copyleft 许可证，那么某些副本或者修改版本可能完全不是自由的。软件公司可以编译该程序，不论是否对其进行修改，都可以将可执行文件作为[专有软件](https://www.gnu.org/philosophy/categories.html#ProprietarySoftware)产品发布。

使用包容型许可证的软件（Lax Permissive Licensed Software）

包容型许可证包括 X11 许可证和[两种 BSD 许可证](https://www.gnu.org/licenses/bsd.html)。这些许可证几乎允许对其代码进行任何方式的使用，包括发布专有的二进制版本，不论是否更改了源代码。

使用 GPL 许可的软件（GPL-Covered Software）

[GNU GPL](https://www.gnu.org/licenses/gpl.html) 是一类特定的发布条款集合，用于使该程序成为 copyleft 软件。GNU 计划将其用作大部分 GNU 软件的发布条款。

因此，将自由软件等同于使用 GPL 许可的软件是一种错误。

## GNU 操作系统（The GNU Operating System）

[GNU 操作系统](https://www.gnu.org/gnu/gnu-history.html)是一种类 Unix 操作系统，它完全由自由软件构成，我们在1984年开始 GNU 操作系统开发。

一款类 Unix 操作系统由众多程序构成。GNU 操作系统包括所有 [GNU 程序包](https://www.gnu.org/philosophy/categories.html#GNUsoftware)。它还包括很多其他程序包，诸如 X Window 系统以及 TeX，它们不是 GNU 软件。

完整的 GNU 操作系统的首个测试版于 1996 年发布，它包括 GNU Hurd，我们的内核，后者于 1990 年开始开发。直到 2001 年，GNU 操作系统（包括 GNU Hurd）开始能够相对可靠地运行，但是 Hurd 仍然缺少一些重要功能，因此它不能被广泛使用。与此同时，[GNU/Linux 操作系统](https://www.gnu.org/gnu/linux-and-gnu.html)，作为使用 Linux 内核而非 Hurd 内核的 GNU 操作系统的衍生版本，自 20 世纪 90 年代起已经获得了巨大成功[^cate-8]。这表明了 GNU 操作系统不是一个静态的程序集合；用户和再分发者可以根据他们的需求和偏好来选择不同的软件包。其结果仍是一种 GNU 操作系统的变体。

由于 GNU 操作系统的目标是自由，GNU 操作系统中的任何一个组件都是自由软件。但是，它们不必须都是 copyleft 的，任何类别的自由软件都可以被合法并且合适地包含进来，如果它有助于实现技术上的目标。

### GNU 程序（GNU Programs）

“GNU 程序”是 [GNU 软件](https://www.gnu.org/philosophy/categories.html#GNUsoftware)的同义词。若程序 foo 是一个 GNU 程序，那么它也是一个 GNU 软件。我们有时也称之为 GNU 软件包。

### GNU 软件（GNU Software）

[GNU 软件](https://www.gnu.org/software/software.html)是指在 [GNU 工程](https://www.gnu.org/gnu/gnu.html)支持下发布的软件。如果一个程序是 GNU 软件，我们也可称之为 GNU 程序或 GNU 软件包。GNU 软件包的自述文件（README）或手册应当声明它是一个 GNU 软件包；同时，[自由软件目录](https://directory.fsf.org/wiki/GNU)标识了所有 GNU 软件包。

大部分 GNU 软件是[ copyleft ](https://www.gnu.org/licenses/copyleft.html)的，但不是全部；然而，所有 GNU 软件都必须是[自由软件](https://www.gnu.org/philosophy/free-sw.html)。

有些 GNU 软件是由[自由软件基金会（FSF）](https://www.fsf.org/)[员工](https://www.fsf.org/about/staff/)所编写的，但是大部分 GNU 软件来自众多[志愿者](https://www.gnu.org/people/people.html)（某些志愿者由商业公司或者大学支付薪酬，但他们确实是我们的志愿者）。某些贡献的软件由 FSF 拥有版权，有些由编写它们的贡献者拥有版权。

### FSF 拥有版权的 GNU 软件（FSF-Copyrighted GNU Software）

GNU 软件包的开发者可以选择将版权转让给 FSF 或者自己保留。这是他们的选择权利。

如果他们将版权转让给 FSF，该程序成为 FSF 拥有版权的 GNU 软件，此时 FSF 可以强制实行它的许可证。如果他们选择自己保留版权，强制实行其许可证是他们自己的责任。

FSF 不会接受非官方 GNU 软件包的软件的版权转让，这是一条规定。

## 非自由软件（Nonfree Software）

非自由软件是指任何不是自由软件的软件。它的使用、再分发或修改被禁止，或者要求您请求授权许可，或者被严格限制以致于您事实上不可能自由地进行以上行为。

## 专有软件（或译为“私有软件”，Proprietary software）

专有软件是非自由软件的另一种叫法。在过去，我们曾将非自由软件进一步细分为“半自由软件”（semifree software），它们允许非商业性的修改和再分发；以及专有软件，它们禁止任何修改或再分发。但我们现在已经放弃了这种区分，并且现在将“专有软件”用作非自由软件的同义词。

FSF 遵循这样的规则：我们不能在自己的计算机上安装任何专有软件，除非暂时性地用于一种特定用途，即编写一个自由软件来取代它。除此之外，我们感觉没有任何可能的借口来安装一款专有软件。

例如，在 20 世纪 80 年代，我们认为在我们的计算机上安装 Unix 是合理的，由于我们需要用它编写一个可以取代 Unix 的自由操作系统。而现在，由于自由的操作系统已经有了，因此这一借口不再适用；我们不会使用任何专有操作系统，并且我们所组装的任何一台新计算机都必须运行一款完全自由的操作系统。

我们并不坚持要求 GNU 的用户或者贡献者也必须严格遵守这条规则。它只是我们对自己制定的规则。但我们希望您也愿意遵循它，为了您自己的自由。

## 共享软件（Shareware）

共享软件是指那些附带有允许人们再分发副本的许可协议的软件，但它宣称任何人如果想要继续使用其一份副本就*必须*支付一笔授权许可费用。

共享软件不是自由软件，甚至不是半自由软件。有两大原因：

- 对于大多数共享软件，源代码不可获得；因此，您完全不能修改它们；
- 共享软件并不带有允许人们在不支付授权许可费用的条件下复制副本并且安装它们的许可条款，甚至对于那些从事非盈利性活动的个人用户也不提供这样的许可（实际上，人们经常不遵守这种发布条款并且仍然这样做，但许可条款并不允许）。

## 私人软件（Private Software）

私人软件或者定制软件是指专为某一特定用户（通常是一家组织机构或者商业公司）开发的软件。该用户保存和使用它，并且不会以源代码或者二进制格式将其对公众发布。

一款私人软件可以是自由软件（尽管这对他人帮助不大），如果它的终极用户拥有四项基本自由。特别地，如果其用户对私人软件拥有完整的权利，该软件（对于原始用户而言）就是自由的。但是，这是半自由软件。然而，如果用户向其他人分发副本但不随之提供四项基本自由，那些副本就不是自由软件。

自由软件关乎的是自由，而非可获得性。总的来说，我们不认为开发一款软件但不发布它是一件坏事。确实有这样的情况，若一款软件举足轻重，以至于人们要争论，独占这款软件而拒绝对公众发布是在对全人类犯错。然而，这样的情况毕竟罕见。大部分软件并非如此生死攸关，拒绝将它对公众发布并不是特别地坏。因此，开发私人软件或者定制软件的实践与自由软件运动的原则之间并无冲突。

几乎所有受雇佣的程序员都在开发某种定制软件；因此大部分编程工作就是或者可以是一种与自由软件运动相容的方式完成的。

## 商业软件（Commercial Software）

“商业”和“专有”并不等同！商业软件是由企业作为其业务的一部分所开发的软件。大部分商业软件是[专有软件](https://www.gnu.org/philosophy/categories.html#ProprietarySoftware)，但确实也有商业化的自由软件，并且也有非商业化的专有软件。

例如，GNU Ada 编译器是由一家商业公司开发的。它一直以 GNU GPL 的条款发布，每一份副本都是自由软件；但它的开发者贩卖其支持合同。当它们的销售员同潜在的客户交谈时，有时客户会说“我们更加信赖商业化的编译器”。销售员回答说“GNU Ada *确实是*一款商业化的编译器；它恰好也是一款自由软件”。

对于 GNU 计划，上述优先级应该是另一种顺序：重要的是 GNU Ada 是一款自由软件；它同时也是一款商业软件只是细节。然而，由于其作为一款商业软件而带来的额外发展是大有裨益的。

请您帮助我们宣传这种认识：自由的商业软件是可能的。您可以努力通过在您想要表达“专有”的时候避免使用“商业”来达到这样的效果。



## Linux 发行版是什么？

Linux 不同于 Windows 或 Mac OS X。微软将 Windows 的所有组件整合在一起，以生成每个新版本的 Windows，并将其作为单独的软件包分发。如果您想要 Windows，则需要选择微软提供的版本之一。

您可以通过下载相应的 Live CD、刻录光盘并从中启动来试用这些衍生产品——无需安装。测试桌面环境可能是找到最适合您的桌面环境的最佳方法。

Linux 的工作原理有所不同。Linux 操作系统并非由单一组织开发。不同的组织和人员负责不同的部分。它包括 Linux 内核（操作系统的核心）、GNU Shell 实用程序（终端界面和您使用的许多命令）、X 服务器（用于生成图形桌面）、桌面环境（在 X 服务器上运行以提供图形桌面）等等。系统服务、图形程序、终端命令——许多都是独立开发的。它们都是以源代码形式分发的

## 附录

### 参考文献

### 版权信息

本文原载于[blog.chenalna.site](https://blog.chenalna.site/)，遵循 CC BY-NC-SA 4.0 协议，复制请保留原文出处。