FreeBSD 不是 Linux 发行版
作者:GEORGE V. NEVILLE-NEIL
本文经由多次讲座整理而成,在讲座中 FreeBSD 社区的多位成员将 FreeBSD 同 Linux 区别开来。由于 Linux 仍然是更加广为人知的系统,它可以作为对照,用来向技术性读者说明 FreeBSD 是什么、能做什么,以及如何应用它来构建需要操作系统的各种系统。
由于本文载于《FreeBSD 期刊》,我假设读者已对 FreeBSD 有所了解,因此我将文章组织为一系列要素,便于在向同事或公司管理层解释 FreeBSD 时作为参考。
FreeBSD 是一款完整的系统
FreeBSD 是一款完整的开源操作系统,包含所有源代码和工具,使操作系统用户能够从提供的源代码重新构建整个系统。系统的完整性是 FreeBSD 与 Linux 之间的关键区别之一。实际上,Linux 只是操作系统内核——一大块代码——而不是完整系统。要构建 Linux 系统,需要在源代码之外安装大量工具、包和库。而在 FreeBSD 系统中,用户在将 FreeBSD 安装到计算机后即可重建整个系统。FreeBSD 系统的“自我托管(self hosting)”特性不容忽视,因为它是 FreeBSD 哲学的核心——赋能用户。
完整的 FreeBSD 系统不仅提供了源代码,还附带了关于系统各个方面的详尽文档,如内置命令、库以及内核 API。其目标是在系统安装完成后,使 FreeBSD 用户尽可能高效地工作。
在大多数现代系统中,操作系统只是其中的一个小组件。构建和部署其他重要系统所涉及的大部分软件并非操作系统的一部分,而是运行在操作系统之上的用户空间软件。FreeBSD 通过 Ports 和软件包系统支持第三方软件。大多数用户只会与软件包系统交互,该系统包含预打包的软件版本,例如 Web 服务器和浏览器、高性能数学库、语言编译器和解释器,以及几乎所有正在维护的开源工具。软件包是从 Ports 系统构建而来的。Ports 是一个庞大、分层组织的 Makefile 集合,知道从何处获取软件,以及如何构建这些软件以在 FreeBSD 上运行。目前的 Ports 集合涵盖 24,000 余个软件包。FreeBSD 使用者可以将自己的软件包添加到 Ports 系统,从而构建定制化的、可安装的 FreeBSD 版本。
谁是终端用户
Linux 发行版是一种将操作系统内核与一组应用程序打包成可供终端用户安装的系统的方式。多年来,Linux 发行版通常针对桌面或服务器安装。例如,Ubuntu 发行版就提供两种配置,一种用于服务器,另一种用于桌面。
从 FreeBSD 的角度来看,终端用户通常是工程师或软件开发者,他们会使用 FreeBSD 来基于 FreeBSD 系统创建新的东西。FreeBSD 的使用者形形色色,多年来,围绕 FreeBSD 开发了其他开源系统,这些系统针对特定用途被使用,例如用于防火墙的 pfSense、用于存储设备的 FreeNAS,以及用于桌面和笔记本的 TrueOS(前身为 PC-BSD)。相比 FreeBSD 本身,这些系统更接近于所谓的“发行版”。
除了这些开源系统之外,许多公司也将全部或部分 FreeBSD 用作其自有产品的基石。例如,Apple、NetApp、Isilon、Juniper 和索尼等公司基于 FreeBSD,都在桌面、移动、存储、网络和游戏领域开发出了成功的产品。这些工程类使用者能够将 FreeBSD 视为一组可组合的库,用来创建支持其自有产品的操作系统。在这种情况下,终端用户并非直接使用 FreeBSD,而是工程师在为最终用户构建产品。
为什么人们使用 FreeBSD
是什么驱使人们使用 FreeBSD?有五个主要原因促使人们选择 FreeBSD,它们分别是:悠久的创新历史、出色的工具、成熟的发布模型、详尽的文档,以及对商业友好的许可——所有这些都将 FreeBSD 与 Linux 发行版区分开来。
FreeBSD 源自最初的 Berkeley Software Distribution(BSD,伯克利软件发行版),这是 1970 年代至 1980 年代在加州大学伯克利分校开发的 Unix 变体。虚拟内存(Virtual Memory)、快速文件系统(Fast File System)、套接字 API(Sockets API)以及 TCP/IP 等创新都源自最初的 BSD 系统。FreeBSD 延续了这一创新传统,推出了高性能软件,早期采用多核系统、10G、40G 和 100G 以太网,以及 LLVM 编译器套件。
LLVM 是 FreeBSD 如何使用和整合优秀工具的一个例子。LLVM 编译器套件带来了数量级的编译器技术创新,这些技术在 GNU 编译器中无法实现。LLVM 在采用新编译器技术以增强系统安全性方面尤其突出,推动了更安全系统的研究和部署。作为默认编译器,LLVM 使得这些创新在 FreeBSD 上出现,通常早于其他操作系统。
那些尝试在 Linux 发行版上开发系列产品的人,都会遇到 Linux 发行模型的不一致性。在一次次小版本更新之间,Linux 内核 API 并不稳定;实际上,Linux 本身承诺不提供稳定的内核 API。对于只想运行最新代码的人来说,这可能没问题,但对于希望长期维护和升级产品的公司而言,这将是一场灾难。
FreeBSD 的发布模型要求长期支持分支(如 9.x、10.x、11.x)在其生命周期内保持内核 API 的稳定性。这种对稳定性的承诺意味着,使用 FreeBSD 10 构建的产品可以持续升级,直到 10 分支结束生命周期。新特性和漏洞修复会在分支的整个生命周期中出现,但前提是不会改变已建立的 API 的工作方式。这些理念通常被概括为最小惊讶原则(POLA, Principle of Least Astonishment),即尽量不让用户感到意外,同时明确界定允许破坏性更改发生的情况,例如跨主要发布分支。
FreeBSD 的文档无与伦比,实际上经常被那些查找其他 Unix 系统通用信息的人引用。手册页不仅涵盖系统的传统部分,如命令(第 1 节)、系统调用(第 2 节)和库(第 3 节),内核 API 本身也在手册的第 9 节中有详细记录。《FreeBSD 手册》作为整个系统的总览参考文档,涵盖与系统管理和软件开发相关的高级主题。
开源系统不仅是软件,还体现着一种哲学,这通常通过所采用的许可证体现出来。FreeBSD 使用的两条款 BSD 许可证体现了 FreeBSD 的哲学,可以概括为:使用我们的代码,但不要起诉我们。该许可证简短,仅约 200 字,易于理解。而 Linux 使用的 GPLv2 超过 2,900 字,需要律师才能理解其所有法律影响。
社区组织
每个开源项目都有其独特的组织形式。Linux 遵循“大高管”(big high stomper)模式,由 Linus 及其各个副手控制源代码树的访问权限。Linus 是领导者,因为他创建了该项目;他的副手之所以在项目中保持地位,是因为 Linus 选择了他们。
FreeBSD 项目由那些对源代码树做出贡献的人组织,也为他们服务,没有单一的所有者或独裁者。提交者(committer)只是指具有中央源代码服务器提交权限的人。提交权限分为三类,分别对应文档、Ports 和源代码树。三种权限之间没有隔阂,仅用于区分人们主要工作的领域。
源代码权限授予那些在系统构建的源代码上工作的人,包括内核及其相关工具。文档权限授予那些从事手册页以及类似《FreeBSD 手册》这样的项目的人,该手册是描述 FreeBSD 整体的活文档,其内容远超手册页。Ports 系统由拥有 Ports 权限的提交者维护。一个人可以同时拥有任意或全部三类权限,实际上,那些在 FreeBSD 工作多年的贡献者往往最终拥有全部三类权限。
获得提交权限的过程相对直接:
Alice 与项目互动,通常通过向系统源代码、Ports 或文档提交补丁。
在 Alice 拥有自己的提交权限之前,她的更改必须由现有提交者 Bob 提交。
一段时间后,Bob 发现 Alice 已能够独立提交更改,于是提名她获得提交权限。
Bob 向相关团队发送电子邮件,提议授予 Alice 提交权限。如果 Alice 从事源代码工作,Bob 会联系核心团队;如果她从事文档工作,则联系文档团队;如果她负责一个或多个 Ports,则联系 Ports 团队。
核心团队、文档团队和 Ports 团队可以对提议的提交权限进行投票,如果权限被批准,Bob 将成为 Alice 的导师。
在一段时间内,Bob 必须批准 Alice 对源代码树的所有提交,这个过程要求 Alice 通过代码审查系统(https://reviews.freebsd.org)与 Bob 核对她的更改。
若 Bob 确认 Alice 能够独立工作,他会解除对她的指导。此后,Alice 就可以独立指导新的提交者。
这七个步骤展示了 FreeBSD 项目如何不断吸纳新鲜血液。
核心团队是指导过程的一部分。核心团队由九名成员组成,每两年选举一次,负责协助管理项目,但核心团队并不干涉提交者的具体工作。核心团队的职责是促进项目发展,并在提交者之间出现分歧时进行调解。
核心团队还通过授予“帽子”(hat)来支持其他团队,如 Ports、文档、安全和发布工程。在项目内部,特定的职责被称为“帽子”,团队负责人则被认为“戴着”该帽子。关于项目治理的更完整说明,可参考本期由 McKusick 和 Rice 撰写的文章。
现代功能
虽然哲学、社区组织和许可证是 FreeBSD 与 Linux 的重要区别,但在技术上也有充分理由选择 FreeBSD。FreeBSD 拥有许多现代特性,而这些特性在任何 Linux 发行版中都不可用,包括 UFS 和 ZFS 文件系统、DTrace 以及 Capsicum。
FreeBSD 一直拥有现代化的快速文件系统(Fast File System,FFS)实现,该系统最初为 BSD 设计和构建,并在过去 30 年中不断升级,以适应存储技术的变化。最新版本 UFS2 支持快照以及日志化软更新(journaled soft updates)。日志化软更新使系统故障后的文件系统恢复快速而轻松——即便需要验证文件系统完整性也不例外。在引入软更新之前,使用 fsck 检查大型磁盘可能需要数小时,甚至对于多 TB 磁盘则更久。日志化软更新消除了对整个磁盘的检查需求,即使是 8TB 磁盘也能在系统重启后几秒内准备就绪。
对于包含数十块磁盘和 PB 级数据的大型存储部署,可使用 Zettabyte 文件系统(ZFS)解决。ZFS 最初由 Solaris 设计并实现,在 2000 年代初被引入 FreeBSD,并迅速在需要完整卷管理器且支持最新 RAID 技术的系统中流行起来。FreeBSD 中的 ZFS 始终保持与 OpenZFS 项目维护的代码同步,多位 ZFS 开发者现在直接在 FreeBSD 代码中工作。
另一项出自 Sun Solaris 团队的优秀技术是 DTrace,于 2008 年移植到 FreeBSD,并在 FreeBSD 源代码树中得到积极维护和更新。DTrace 为程序员和系统管理员提供了完整的系统透明性,使用户能够查看 FreeBSD 内核或运行在 FreeBSD 上程序中的任意函数调用,而无需原始源代码。
FreeBSD 始终采取务实的安全策略,引入具有广泛适用性的功能来保护系统安全。其中一个近期加入的例子就是 Capsicum,它很好地体现了这种务实精神。
Capsicum 是一个现代能力系统(capability system),专为 FreeBSD 构建和设计。能力系统的概念起源于 1970 年代的研究,但在 Capsicum 集成到 FreeBSD 之前,通用操作系统中从未有过实用且广泛部署的能力系统。Capsicum 通过提供轻量级的软件隔离框架,帮助开发者构建更安全的软件。Capsicum 的开发者 Robert Watson 指出:“当没有隔离机制时,一个漏洞就可能让整个应用及其所有可访问的数据都暴露给攻击者。而有了隔离机制,软件仍然可能存在漏洞,但攻击者必须付出更大努力,找到并利用更多漏洞,才能获得用户的全部权限。”
总结
本文的目标是为你提供一种向他人解释 FreeBSD 并非 Linux 发行版的方法。我们从五个关键方面展示了 FreeBSD 的区别:技术创新、工具链、发布模型、文档以及对商业友好的 BSD 许可证。无论你是作为 FreeBSD 的使用者阅读本文,还是利用 FreeBSD 构建其他技术产品的人,我们相信你也能发现 FreeBSD 与 Linux 发行版的显著不同之处。我们鼓励读者给 Journal 投稿,分享自己的观点。如果反馈良好,我们将发表一篇简短的后续文章,让你的想法帮助 FreeBSD 社区的其他成员。
GEORGE V. NEVILLE-NEIL 从事网络和操作系统代码开发,既为兴趣也为职业。他还教授与编程相关的各类课程。他的兴趣领域包括代码探索、操作系统、网络和时间协议。他与 Marshall Kirk McKusick 和 Robert N. M. Watson 合著了《FreeBSD 操作系统设计与实现》。
十余年来,他以专栏作家 “Kode Vicious” 的身份广为人知。他在马萨诸塞州波士顿的东北大学被授予计算机科学学士学位,是 ACM、Usenix 协会和 IEEE 的成员。他热衷骑行和旅行,目前居住在纽约市。
最后更新于
这有帮助吗?