# BSD 简介

* 原文：[Explaining BSD](https://docs.freebsd.org/en/articles/explaining-bsd/)

## 摘要

在开源世界中，“Linux”一词几乎与“操作系统”同义，但它并不是唯一的开源 UNIX® 操作系统。

那么，秘密是什么？为什么 BSD 不那么为人所知？本文将解答这些问题以及其他相关问题。

在整篇文章中，将会指出 BSD 和 Linux 之间的差异，*如这样*。

***

## 1. 什么是 BSD？

BSD 代表“伯克利软件发行版”。它是加利福尼亚大学伯克利分校的源代码发行版的名称，最初是 AT\&T Research UNIX® 操作系统的扩展。几个开源操作系统项目是基于被称为 4.4BSD-Lite 的源代码发布的。此外，这些项目还包含了来自其他开源项目的多个软件包，尤其是 GNU 项目。整体操作系统包括：

* BSD 内核，处理进程调度、内存管理、对称多处理（SMP）、设备驱动程序等。
* C 库，系统的基础 API。*BSD C 库基于伯克利的代码，而非 GNU 项目的代码。*
* 工具程序，如 shell、文件工具、编译器和链接器。*一些工具源自 GNU 项目，另一些则不是。*
* X Window 系统，负责图形显示。\
  大多数 BSD 版本中使用的 X Window 系统由 [X.Org 项目](http://www.x.org/) 维护。FreeBSD 允许用户从多种桌面环境中选择，如 Gnome、KDE 或 Xfce；以及轻量级窗口管理器，如 Openbox、Fluxbox 或 Awesome。
* 许多其他程序和工具。

## 2. 真正的 UNIX®？

BSD 操作系统不是克隆版，而是 AT\&T 研究 UNIX® 操作系统的开源衍生版，它也是现代 UNIX® System V 的祖先。这可能会让你感到惊讶。如何会这样，毕竟 AT\&T 从未将其代码作为开源发布？

确实，AT\&T UNIX® 并非开源，从版权的角度来看，BSD 绝对 *不是* UNIX®，但另一方面，AT\&T 引入了来自其他项目的源代码，尤其是加利福尼亚大学伯克利分校的计算机科学研究小组（CSRG）。从 1976 年开始，CSRG 开始发布他们的软件磁带，称之为 *伯克利软件发行版* 或 *BSD*。

最初的 BSD 版本主要包含用户程序，但随着 CSRG 获得了国防高级研究计划局（DARPA）的合同，用于升级其网络 ARPANET 的通信协议，这一情况发生了剧变。新的协议被称为 *互联网协议*，后来的 *TCP/IP* 即是指最重要的协议。第一次广泛分发的实现是 4.2BSD 的一部分，发生在 1982 年。

在 1980 年代的过程中，出现了许多新工作站公司。许多公司更倾向于授权 UNIX®，而不是自行开发操作系统。特别是 Sun Microsystems 授权 UNIX® 并实现了 4.2BSD 的一个版本，称为 SunOS™。当 AT\&T 被允许商业销售 UNIX® 时，他们推出了一个简化版的实现，称为 System III，随后迅速推出了 System V。System V 的代码库不包括网络功能，因此所有实现都包括来自 BSD 的附加软件，包括 TCP/IP 软件，还包括 *csh* shell 和 *vi* 编辑器等工具。这些增强功能被统称为 *伯克利扩展*。

BSD 磁带包含 AT\&T 的源代码，因此需要 UNIX® 源代码许可。到 1990 年，CSRG 的资金已经用尽，面临关闭的局面。该小组的一些成员决定发布 BSD 代码，这些代码是开源的，但去除了 AT\&T 的专有代码。这最终发生在 *网络磁带 2*，通常被称为 *Net/2*。Net/2 并不是一个完整的操作系统：约 20% 的内核代码缺失。CSRG 的一位成员 William F. Jolitz 编写了剩余的代码，并在 1992 年初发布了 *386BSD*。与此同时，另一些前 CSRG 成员组成了一个商业公司 [伯克利软件设计公司](http://www.bsdi.com/)，并发布了基于相同源代码的操作系统 [BSD/386](http://www.bsdi.com/)，该操作系统后被更名为 BSD/OS。

386BSD 从未成为一个稳定的操作系统。相反，在 1993 年，两个项目从其分裂出来： [NetBSD](http://www.netbsd.org/) 和 [FreeBSD](https://www.freebsd.org/)。这两个项目最初因对 386BSD 改进的耐心不同而分道扬镳：NetBSD 的人们早在年初就开始了，而 FreeBSD 的第一个版本直到年底才准备好。与此同时，代码库已经足够分化，难以合并。此外，两个项目有不同的目标，正如我们将在下面看到的。1996 年， [OpenBSD](http://www.openbsd.org/) 从 NetBSD 分裂出来，2003 年， [DragonFlyBSD](http://www.dragonflybsd.org/) 从 FreeBSD 分裂出来。

## 3. 为什么 BSD 不那么为人所知？

有多种原因，BSD 相对较不为人知：

1. BSD 开发者通常更关注打磨代码，而非推广它。
2. Linux 的流行很大程度上源于 Linux 项目外部的因素，例如媒体和为提供 Linux 服务而成立的公司。直到最近，开源的 BSD 项目并没有类似的支持者。
3. 1992 年，AT\&T 起诉了 [BSDI](http://www.bsdi.com/)，即 BSD/386 的供应商，指控该产品包含 AT\&T 版权代码。此案于 1994 年庭外和解，但诉讼的阴影依然困扰着人们。2000 年 3 月，网上发布了一篇文章，声称该案件“最近已经解决”。\
   该诉讼澄清的一个细节是命名问题：在 1980 年代，BSD 被称为“BSD UNIX®”。随着最后一部分 AT\&T 代码的从 BSD 中去除，它也失去了使用 UNIX® 名称的权利。因此，你会在书名中看到对“4.3BSD UNIX® 操作系统”和“4.4BSD 操作系统”的提及。

## 4. 比较 BSD 和 Linux

那么，Debian Linux 和 FreeBSD 之间的真正区别是什么呢？对于普通用户来说，差异惊人地小：它们都是类 UNIX® 操作系统。它们都是由非商业项目开发的（当然，这不适用于许多其他 Linux 发行版）。在接下来的部分中，我们将讨论 BSD，并将其与 Linux 进行比较。以下介绍最接近于 FreeBSD，它占据了估计 80% 的 BSD 安装，但与 NetBSD、OpenBSD 和 DragonFlyBSD 的差异不大。

### 4.1. 谁拥有 BSD？

没有任何个人或公司拥有 BSD。它是由全球一群技术精湛且高度投入的贡献者共同创建和分发的。BSD 的一些组件本身就是开源项目，由不同的项目维护者管理。

### 4.2. BSD 如何开发和更新？

BSD 内核按照开源开发模型进行开发和更新。每个项目都维护一个公开可访问的 *源代码树*，其中包含项目的所有源文件，包括文档和其他附带文件。用户可以获得任何版本的完整副本。

全球有大量开发者为 BSD 做出贡献，他们被分为三类：

* *贡献者* 编写代码或文档。他们不能直接向源代码树提交（添加代码）。为了让他们的代码包含在系统中，必须由一名注册的开发者审核并提交，这些开发者被称为 *提交者*。
* *提交者* 是具有写权限的开发者。要成为提交者，个人必须在其活跃的领域展示能力。\
  提交者是否在提交更改到源代码树之前需要获得授权由个人决定。通常，经验丰富的提交者可以在没有获得共识的情况下做出显然正确的更改。例如，文档项目的提交者可以在没有审核的情况下修正排版或语法错误。另一方面，做出深远或复杂更改的开发者应该在提交更改之前进行审核。极端情况下，像首席架构师这样的核心团队成员可能会命令将更改从源代码树中撤回，这一过程被称为 *撤销*。所有提交者都会收到描述每次提交的邮件，因此不可能偷偷提交代码。
* *核心团队*。FreeBSD 和 NetBSD 都有一个核心团队来管理项目。核心团队在项目过程中发展起来，它们的角色并不总是定义明确的。成为核心团队成员并不一定需要是开发者，尽管通常是。核心团队的规则因项目而异，但通常，他们在项目方向上的发言权大于非核心团队成员。

这种安排与 Linux 有几个不同之处：

1. 没有人控制系统的内容。实际上，这个差异被高估了，因为首席架构师可以要求撤销代码，更何况在 Linux 项目中，也有几个人被允许做出更改。
2. 另一方面，确实存在一个中央仓库，一个可以找到整个操作系统源代码的地方，包括所有旧版本。
3. BSD 项目维护整个“操作系统”，而不仅仅是内核。这个区别仅在某种程度上有用：无论是 BSD 还是 Linux，没有应用程序都无法使用。BSD 使用的应用程序通常与 Linux 使用的应用程序相同。
4. 由于对单一 Git 源代码树的正式维护，BSD 的开发过程清晰明确，并且可以通过发布号或日期访问任何版本的系统。Git 还允许对系统进行增量更新。例如，FreeBSD 仓库每天大约更新 100 次。这些更改大多数是小规模的。

### 4.3. BSD 发布版

FreeBSD、NetBSD 和 OpenBSD 提供了三种不同的“发布版”。与 Linux 类似，发布版会分配一个版本号，如 1.4.1 或 3.5。此外，版本号后有一个后缀，用于指示其用途：

1. 系统的开发版被称为 *CURRENT*。FreeBSD 为 CURRENT 分配一个版本号，例如 FreeBSD 5.0-CURRENT。NetBSD 使用稍有不同的命名方式，并附加一个单字母后缀，指示内部接口的更改，例如 NetBSD 1.4.3G。OpenBSD 不分配版本号（“OpenBSD-current”）。所有新的开发工作都进入这个分支。
2. 在常规间隔下，每年发布两到四次 *RELEASE* 版本的系统，用户可以从 CD-ROM 或 FTP 网站免费下载，例如 OpenBSD 2.6-RELEASE 或 NetBSD 1.4-RELEASE。RELEASE 版本是面向最终用户的，通常是系统的标准版本。NetBSD 还提供带有第三位数字的 *补丁发布*，例如 NetBSD 1.4.2。
3. 当在 RELEASE 版本中发现错误时，错误会被修复，并将修复内容添加到 Git 树中。在 FreeBSD 中，结果版本被称为 *STABLE* 版本，而在 NetBSD 和 OpenBSD 中，它继续称为 RELEASE 版本。在经过 CURRENT 分支测试一段时间后，较小的新特性也可以添加到此分支中。安全和其他重要的错误修复也会应用到所有支持的 RELEASE 版本。

*相比之下，Linux 维护两个独立的代码树：稳定版本和开发版本。稳定版本具有偶数的小版本号，如 2.0、2.2 或 2.4。开发版本具有奇数的小版本号，如 2.1、2.3 或 2.5。在每个版本号后面，还有一个进一步的数字来指定精确的发布版本。此外，每个发行商都会添加自己的用户空间程序和工具，因此发行版的名称也很重要。每个发行商还会为其发行版指定版本号，因此完整的描述可能是“TurboLinux 6.0，内核 2.2.14”*

### 4.4. 有哪些版本的 BSD 可用？

与众多 Linux 发行版不同，只有四个主要的开源 BSD 系统。每个 BSD 项目维护自己的源代码树和内核。不过，实际上，各个项目的用户空间代码之间的差异比 Linux 中的差异要少。

很难对每个项目的目标进行分类：这些差异是非常主观的。基本上，

* FreeBSD 旨在为最终用户提供高性能和易用性，并且是网站内容提供商的首选。它支持 [多种平台](https://www.freebsd.org/platforms/)，并且拥有比其他项目更多的用户。
* NetBSD 旨在实现最大的可移植性：“当然它能运行 NetBSD”。它支持从掌中宝到大型服务器的各种机器，甚至被用于 NASA 的太空任务。它特别适合在旧的非英特尔®硬件上运行。
* OpenBSD 旨在实现安全性和代码纯洁性：它结合了开源概念和严格的代码审查，创造了一个明显正确的系统，成为了对安全高度关注的组织（如银行、证券交易所和美国政府部门）的首选。与 NetBSD 一样，它也支持多种平台。
* DragonFlyBSD 旨在实现从单节点 UP 系统到大规模集群系统下的高性能和可扩展性。DragonFlyBSD 有几个长期的技术目标，但重点是提供一个易于理解、维护和开发的 SMP 支持基础设施。

此外，还有两个非开源的 BSD UNIX® 操作系统，分别是 BSD/OS 和 Apple 的 Mac OS® X：

* BSD/OS 是 4.4BSD 衍生版本中最早的一个。它不是开源的，尽管源代码许可可以以相对较低的价格获得。它在许多方面与 FreeBSD 类似。Wind River Systems 收购 BSDi 后，BSD/OS 未能作为独立产品生存。Wind River 可能仍然提供支持和源代码，但所有新的开发都集中在 VxWorks 嵌入式操作系统上。
* [Mac OS® X](http://www.apple.com/macosx/server/) 是 Apple® Mac® 系列计算机的最新版本操作系统。该操作系统的 BSD 核心，[Darwin](http://developer.apple.com/darwin/)，是一个完全功能的开源操作系统，支持 x86 和 PPC 计算机。然而，Mac OS® X 的 Aqua/Quartz 图形系统和许多其他专有部分仍然是闭源的。几位 Darwin 开发者也是 FreeBSD 的提交者，反之亦然。

### 4.5. BSD 许可证与 GNU 公共许可证有什么不同？

Linux 是根据 [GNU 通用公共许可证](http://www.fsf.org/copyleft/gpl.html)（GPL）发布的，该许可证旨在消除闭源软件。特别是，任何基于 GPL 发布的产品的衍生作品，如果有人要求，必须提供源代码。与此不同，[BSD 许可证](http://www.opensource.org/licenses/bsd-license.html) 的限制较少：可仅发布二进制版本。这对于嵌入式应用程序特别有吸引力。

### 4.6. 我还需要知道什么？

由于 BSD 上的应用程序比 Linux 少，BSD 开发者创建了一个 Linux 兼容包，允许 Linux 程序在 BSD 上运行。该包包括内核修改，以正确执行 Linux 系统调用，以及 Linux 兼容文件，如 C 库。在同样速度的机器上，运行 Linux 应用程序的 BSD 机器与运行 Linux 应用程序的 Linux 机器在执行速度上没有明显区别。

BSD 的“全由一个供应商提供”的特性意味着与 Linux 相比，升级更加容易处理。BSD 通过提供早期版本库的兼容模块来处理库版本的升级，因此可以毫无问题地运行几年前的二进制文件。

### 4.7. 我应该使用 BSD 还是 Linux？

这在实际中意味着什么？谁应该使用 BSD，谁应该使用 Linux？

这是个非常难以回答的问题。以下是一些指导原则：

* “如果它没有坏，别修理它”：如果你已经在使用一个开源操作系统，并且你对此感到满意，那么可能没有充分的理由去更换。
* BSD 系统，特别是 FreeBSD，通常比 Linux 拥有更高的性能。但这并非在所有情况下都成立。在许多情况下，性能差异很小或根本没有差别。在某些情况下，Linux 的性能可能优于 FreeBSD。
* 一般来说，BSD 系统因其更加成熟的代码库而具有更好的可靠性声誉。
* BSD 项目在文档的质量和完整性方面有更好的声誉。各种文档项目旨在提供更新的文档，涵盖多个语言，并涵盖系统的各个方面。
* BSD 许可证可能比 GPL 更具吸引力。
* BSD 可以执行大多数 Linux 二进制文件，而 Linux 无法执行 BSD 二进制文件。许多 BSD 实现还可以执行来自其他类 UNIX® 系统的二进制文件。因此，与 Linux 相比，BSD 可能提供了更容易从其他系统迁移的途径。

### 4.8. 谁提供 BSD 的支持、服务和培训？

[iXsystems, Inc.](http://www.ixsystems.com/) 提供 FreeBSD 的支持合同。

此外，每个项目都有一份可聘请的顾问名单：[FreeBSD](https://www.freebsd.org/commercial/consult_bycat/)、[NetBSD](http://www.netbsd.org/gallery/consultants.html) 和 [OpenBSD](http://www.openbsd.org/support.html)。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://book.bsdcn.org/wen-zhang/wen-zhang/jie-shi-bsd.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
