面向Linux用户的FreeBSD比较介绍
介绍
FreeBSD 是一个免费和开源的类 Unix 操作系统和流行的服务器平台。 尽管 FreeBSD 和其他基于 BSD 的系统与 Linux 等系统有很多共同之处,但这两个家族在某些方面存在重大分歧。
在本指南中,我们将简要讨论 FreeBSD 和 Linux 之间的一些共同点,然后再进一步讨论它们之间的重要区别。 下面的许多观点可以准确地应用于更大的 BSD 派生系统家族,但由于我们的重点,我们将主要提及 FreeBSD 作为该家族的代表。
FreeBSD 和 Linux 共有的特征
在我们开始研究 FreeBSD 和 Linux 不同的领域之前,让我们从广义上讨论这些系统的共同点。
虽然每个家族采用的特定许可不同(我们将在稍后讨论),但这两个系统家族都是免费和开源的。 用户可以根据需要查看和修改源代码,并且开发是在公开的情况下完成的。
FreeBSD 和基于 Linux 的发行版本质上都类似于 Unix。 FreeBSD 与过去的 Unix 系统有着密切的关系,而 Linux 是从头开始创建的,作为一个开放的类 Unix 替代品。 这种关联为有关系统设计、组件应如何互操作以及系统外观和完成的一般期望的决策提供信息。
常见的类 Unix 行为主要是因为这两个系列大多是 POSIX-compliant 。 系统的整体感觉和设计相当标准化,并使用类似的模式。 文件系统层次结构类似地划分,shell 环境是两个系统交互的主要方法,编程 API 共享相似的特性。
由于这些考虑,FreeBSD 和 Linux 发行版能够共享许多相同的工具和应用程序。 在某些情况下,这些程序的版本或风格在系统之间有所不同,但与非类 Unix 系统相比,应用程序可以更容易地移植。
考虑到这些要点,我们现在将继续讨论这两个操作系统家族存在分歧的领域。 希望这些共同点能帮助您更准确地消化有关它们差异的信息。
许可差异
FreeBSD 和 Linux 系统之间最根本的区别之一是许可问题。
Linux 内核、基于 GNU 的应用程序和许多源自 Linux 世界的软件都在某种形式的 GPL 或 GNU 通用公共许可证下获得许可。 该许可通常被描述为“copyleft”许可,这是一种许可形式,允许自由查看、分发和修改源代码,同时要求任何衍生作品保持该许可。
另一方面,FreeBSD,包括内核和任何由 FreeBSD 贡献者创建的工具,都根据 BSD 许可证授权其软件。 这种许可类型比 GPL 更宽松,因为它不需要衍生作品来维护许可条款。 这意味着任何个人或组织都可以使用、分发或修改程序,而无需回馈更改或发布他们正在创建的工作的源代码。 唯一的要求是原始版权和 BSD 许可证的副本包含在衍生作品的源代码或文档(取决于发布方法)中,并且包含提供的限制责任的免责声明。 主许可证很短,可以在这里找到。
这些许可类型中的每一种的吸引力几乎完全取决于理念和用户的需求。 GPL 许可证促进共享和开放的生态系统高于所有其他考虑因素。 专有软件必须非常小心,不要依赖基于 GPL 的软件。 另一方面,BSD 许可软件可以自由地结合到专有的、封闭源代码的应用程序中。 这使得它对许多希望通过其软件获利的企业和个人更具吸引力,因为可以直接销售软件并保留源代码。
开发人员倾向于选择一种许可理念而不是另一种,但每种许可理念都有其优势。 了解这些系统的许可可以帮助我们开始了解进入其开发的一些选择和理念。
FreeBSD 沿袭及其意义
FreeBSD 和 Linux 系统之间的另一个重要区别是每个系统的沿袭和历史。 除了上面讨论的许可差异之外,这可能是每个阵营所遵循的哲学的最大影响因素。
Linux 是由 Linus Torvalds 开发的一个内核,用于替代他在赫尔辛基大学使用的面向教育但限制性强的 MINIX 系统。 结合其他组件,许多来自 GNU 套件,构建在 Linux 内核上的操作系统具有许多类似 Unix 的属性,尽管它不是直接源自以前的 Unix 操作系统。 由于 Linux 是从零开始的,没有一些继承的设计选择和遗留考虑因素,它可能与与 Unix 关系更密切的系统有很大不同。
FreeBSD 与其 Unix 传统有许多直接的联系。 BSD 或 Berkeley Software Distribution 是加州大学伯克利分校创建的 Unix 发行版,它扩展了 AT&T 的 Unix 操作系统的功能集,并具有令人满意的许可条款。 后来,决定尝试用开源替代品尽可能多地替换原来的 AT&T 操作系统,这样用户就不需要获得 AT&T 许可证来使用 BSD。 最终,原始 AT&T Unix 的所有组件都在 BSD 许可下重写,并作为 386BSD 移植到 i386 架构。 FreeBSD 是从这个基础分叉出来的,以努力维护、改进和现代化已经存在的工作,并最终基于一个名为 BSD-Lite 的不完整版本重新构建,以解决许可问题。
经过漫长而多阶段的衍生过程,FreeBSD 在许可方面变得不受限制,但仍与其过去保持着密切的联系。 致力于创建该系统的开发人员一直对 Unix 的做事方式进行投资,这可能是因为 FreeBSD 始终旨在作为 Unix 的公开许可克隆运行。 这些根源影响了任何进一步发展的方向,也是我们将讨论的一些选择背后的原因。
核心操作系统与附加软件的分离
FreeBSD 和 Linux 发行版之间在开发工作和系统设计方面的主要区别在于系统的范围。 FreeBSD 团队将内核和基本操作系统作为一个内聚单元来开发,而 Linux 在技术上仅指内核,其他组件来自各种来源。
这可能看起来很小,但实际上会影响您与每个系统交互和管理的方式。 在 Linux 中,一个发行版可能将一组选定的软件包捆绑在一起,以确保它们可以很好地互操作。 但是,大多数组件将来自广泛的来源,分发开发人员和维护人员的任务是将它们塑造成一个正常运行的系统。
从这个意义上说,基本组件与发行版存储库中可用的可选包没有太大区别。 该发行版的包管理工具用于以完全相同的方式跟踪和管理这些组件。 发行版可能会根据哪些团队负责某些包来维护不同的存储库,因此核心开发团队必须只担心可用软件的子集,但这是组织和重点的差异,通常不会导致软件的差异从用户的角度进行管理。
相反,FreeBSD 维护着一个完整的核心操作系统。 内核和软件集合(其中许多是由 FreeBSD 开发人员自己创建的)作为一个单元进行维护。 更换属于该核心集合的组件并不那么简单,因为从某种意义上说,它是一组单一的软件。 这使 FreeBSD 团队能够非常密切地管理主操作系统,确保紧密集成和更高的可预测性。
包含在核心操作系统中的软件被认为与作为可选附件提供的组件完全分开。 FreeBSD 提供了大量可选软件,就像 Linux 发行版一样,但这是单独管理的。 核心系统作为一个单元独立更新,可选软件可以单独更新。
发布是如何形成的
大多数 Linux 版本都是从各种来源收集软件并根据需要对其进行修改的结果。 分发维护者决定将哪些组件包含在安装介质中,哪些组件包含在分发维护的存储库中,等等。 一起测试组件后,创建包含测试软件的版本。
在上一节中,我们了解到:
- FreeBSD 操作系统的很大一部分是由 FreeBSD 团队开发的。
- 基本操作系统是产生的主要输出。
- 基础软件被认为是一个有凝聚力的整体。
这些品质导致发布软件的方法与大多数 Linux 发行版不同。 因为 FreeBSD 在操作系统级别组织事物,所以所有基本组件都维护在一个源代码存储库中。 这有几个重要的含义。
首先,由于这些工具都是在单个存储库中串联开发的,因此只需选择存储库分支之一的修订版即可形成发布。 这类似于大多数软件的发布方式,即从有组织的代码库中选择一个稳定点。
由于基本操作系统都处于主动版本控制之下,这也意味着用户可以根据他们希望系统组件经过良好测试的程度来“跟踪”不同的分支或稳定性级别。 用户不必等待开发人员批准更改才能将它们放在他们的系统上。
这有点类似于在某些 Linux 发行版中跟踪由稳定性组织的不同存储库的用户。 在 Linux 中,您可以跟踪软件包存储库,而在 FreeBSD 中,您可以跟踪集中源存储库的分支。
软件差异和系统设计
我们将讨论的其余差异将与软件本身和系统的一般质量有关。
支持的包和源安装
从用户的角度来看,FreeBSD 和大多数 Linux 发行版之间的主要区别之一是打包软件和源安装软件的可用性和支持。
虽然大多数 Linux 发行版仅提供发行版支持的软件的预编译二进制包,但 FreeBSD 包含预构建的包以及用于从源代码编译和安装的构建系统。 对于大多数软件,这允许您在使用合理默认值构建的预编译包和在编译过程中通过自己构建软件来自定义软件的能力之间进行选择。 FreeBSD 通过一个它称为“端口”的系统来做到这一点。
FreeBSD 移植系统是 FreeBSD 知道如何构建的软件集合。 /usr/ports
目录中提供了表示该软件的有组织的层次结构,用户可以在该目录中深入查看每个应用程序的目录。 这些目录包含一些文件,这些文件指定了可以获取源文件的位置,以及编译器关于如何正确修补源以与 FreeBSD 一起正常工作的说明。
软件的打包版本实际上是从 ports 系统生成的,这使得 FreeBSD 成为一个源代码优先的发行版,提供方便的软件包。 您的系统可以由源构建软件和预打包软件组成,并且软件管理系统可以充分处理这两种安装方法的组合。
香草与定制软件
对于熟悉一些更流行的 Linux 发行版的用户来说,一个可能看起来有点奇怪的决定是,FreeBSD 通常选择尽可能提供未经修改的上游软件。
许多 Linux 发行版对软件进行了修改,以使其更容易与其他组件连接并尝试使管理更容易。 这种趋势的一个很好的例子是对常见的 Web 服务器配置层次结构进行重组,以使服务器配置更加模块化。
虽然许多用户发现这些更改很有帮助,但这种方法也有缺点。 进行修改的一个问题是它假定知道哪种方法最适合用户。 它还使来自其他平台的用户更难以预测软件,因为它与上游约定不同。
FreeBSD 维护者经常 do 用补丁修改软件,但这些通常比某些 Linux 发行版的软件包选择更保守。 一般来说,对 FreeBSD 生态系统中软件的修改是那些使软件在 FreeBSD 环境中正确构建和运行所必需的,以及定义一些合理的默认值所必需的。 放置在文件系统上的配置文件通常不会被大量修改,因此可能需要采取一些额外的工作来让组件相互通信。
常用工具的 FreeBSD 风味
FreeBSD 系统的另一个可能引起 Linux 用户混淆的方面是熟悉的工具的可用性,这些工具的操作与在 Linux 系统上的操作略有不同。
FreeBSD 团队维护着自己的大量常用工具版本。 虽然 Linux 系统上的许多工具都来自 GNU 套件,但 FreeBSD 经常为其操作系统推出自己的变体。
这个决定有几个原因。 由于 FreeBSD 负责开发和维护核心操作系统,因此控制这些应用程序的开发并将它们置于 BSD 许可下是必不可少的或有用的。 其中一些工具还与衍生它们的 BSD 和 Unix 工具有密切的功能联系,这与 GNU 套件不同,后者通常向后兼容程度较低。
这些差异通常体现在命令的选项和语法中。 您可能习惯于在 Linux 机器上以某种方式运行命令,但这些在 FreeBSD 服务器上可能不一样。 务必检查命令的 man
页面以熟悉 FreeBSD 变体的选项,这一点很重要。
标准外壳
一个可能引起混淆的相关点是 FreeBSD 中的默认 shell 不是 bash
。 相反,FreeBSD 使用 tcsh
作为其默认 shell。
这个 shell 是 csh
的改进版本,它是为 BSD 开发的 C shell。 bash
shell 是一个 GNU 组件,因此作为 FreeBSD 的默认设置是一个糟糕的选择。 虽然两个 shell 通常在命令行上以相似的方式运行,但不应在 tcsh
中编写脚本。 使用基本的 Bourne shell sh
更可靠,并且避免了与 tcsh
和 csh
脚本相关的一些有据可查的缺陷。
还值得注意的是,如果您在那种环境中更舒服,将您的 shell 更改为 bash
非常简单。
更分层的文件系统
我们在上面多次提到过,FreeBSD 区分了基本操作系统和可以安装在该层之上的可选组件或端口。
这对 FreeBSD 如何在文件结构中组织组件有影响。 在 Linux 中,可执行文件通常位于 /bin
、/sbin
、/usr/sbin
或 /usr/bin
目录中,具体取决于它们的用途以及它们对核心功能的重要性. FreeBSD 认识到了这些差异,但也在作为基本系统的一部分安装的组件和作为端口安装的组件之间强加了另一个级别的分离。 基本系统软件位于上述目录之一中。 任何作为端口或包安装的程序都放置在 /usr/local/bin
或 /usr/local/sbin
中。
/usr/local
目录包含的目录结构主要反映了 /
或 /usr
目录中的结构。 这是通过 ports 系统安装的软件的主根目录。 几乎所有端口的配置都是通过位于 /usr/local/etc
中的文件完成的,而基本系统配置像往常一样保存在 /etc
中。 这使得识别应用程序是否是基本系统端口的一部分变得容易,并有助于保持文件系统的清洁。
最后的想法
FreeBSD 和 Linux 有许多共同点,但如果您来自 Linux 背景,识别和理解它们的不同之处很重要。 在他们的路径不同的地方,两个系统都有自己的优势,来自任何一个阵营的支持者都可以指出做出选择的原因。
将 FreeBSD 视为自己的操作系统,而不是坚持通过 Linux 镜头来查看它,这将帮助您避免与操作系统发生冲突,并且通常会带来更好的体验。 到目前为止,我们希望您对在前进过程中要注意的差异有相当好的了解。
如果您不熟悉运行 FreeBSD 服务器,下一步可能是我们的 FreeBSD 入门指南。