引言

是一个免费的开源类Unix系统和流行的服务器平台。 虽然 FreeBSD 和其他基于 bsd 的系统与 Linux 等系统有很多共同之处,但这两个系统在一些重要方面存在分歧。

在本指南中,我们将简要讨论 FreeBSD 和 Linux 之间的一些共性,然后进一步讨论它们之间的重要区别。 下面的许多观点可以准确地应用于衍生于 bsd 的系统的更大系列,但是由于我们的重点,我们将主要提到 FreeBSD 作为系列的代表。

和 Linux 共享的特性

在我们开始研究 FreeBSD 和 Linux 的不同之处之前,让我们广泛地讨论一下这些系统的共同之处。

虽然每个系列使用的特定许可不同(我们将在后面讨论) ,但是这两个系列的系统都是免费和开源的。 用户可以根据自己的需要查看和修改源代码,开发是开放的。

Freebsd 和基于 linux 的发行版本本质上都类似于 unix。 Freebsd 与过去的 Unix 系统有着密切的渊源,而 Linux 是从头开始创建的,作为一种类似 Unix 的开放替代系统。 这种关联决定了系统的设计、组件应该如何互操作,以及对系统应该是什么样子和实现的一般期望。

常见的类 unix 行为主要是由于这两个系列基本上都是 posix 兼容的。 系统的整体感觉和设计相当标准化,使用了类似的模式。 文件系统层次结构也是类似地划分的,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 关系密切的系统有很大的不同。

有许多直接的联系到它的 Unix 传统。 是加州大学伯克利分校开发的 Unix 系统的一个分发 BSD,它扩展了 at & t 的 Unix 操作系统的功能集,并且有令人满意的许可条款。 后来,他们决定尽可能多地用开源替代品来取代原来的 at & t 操作系统,这样用户就不需要获得使用 BSD 的 at & t 许可证。 最终,原始 at & t Unix 的所有组件都在 BSD 许可下重写,并移植到 i386架构中,成为386BSD。 为了维护、改进和更新已有的工作,FreeBSD 从这个基础上分离出来,并最终基于一个名为 BSD-Lite 的不完整版本进行了重新设计,以解决许可问题。

通过漫长和多阶段的衍生过程,FreeBSD 在许可方面变得无拘无束,但与其过去保持着密切的联系。 致力于开发这个系统的开发人员仍然投资于 Unix 的做事方式,可能是因为 FreeBSD 一直以来都是作为 Unix 的一个公开授权的克隆体来运行的。 这些根影响了任何进一步发展的方向,也是我们将要讨论的一些选择背后的原因。

核心操作系统与附加软件的分离

Freebsd 和 Linux 发行版在开发工作和系统设计方面的一个关键区别是系统的范围。 开发团队将内核和基本操作系统作为一个内聚单元进行开发,而 Linux 在技术上仅指内核,其他组件来自各种来源。

这看起来似乎是一个很小的区别,但实际上影响了您与每个系统交互和管理的方式。 在 Linux 中,一个发行版可能会将一组经过选择的包捆绑在一起,以确保它们能够很好地互操作。 然而,大多数组件将来自一系列广泛的来源,发行版开发人员和维护人员的任务是将它们塑造成一个功能正常的系统。

从这个意义上说,基本组件与通过发行版的存储库提供的可选包没有太大的不同。 发行版的包管理工具用于以完全相同的方式跟踪和管理这些组件。 一个发行版可能会维护不同的存储库,根据这些存储库,团队负责某些软件包,因此核心开发团队必须只担心可用软件的一个子集,但这是组织和重点的差异,通常不会从用户的角度导致软件管理的差异。

相比之下,FreeBSD 维护一个完整的核心操作系统。 内核和软件集合(其中许多是由 FreeBSD 开发人员自己创建的)被作为一个单元来维护。 交换这个核心集合中的组件并不是那么简单,因为在某种意义上,它是一个整体软件集合。 这使 FreeBSD 团队能够非常紧密地管理主操作系统,确保紧密的集成和更高的可预测性。

包含在核心操作系统中的软件被认为完全独立于作为可选附件提供的组件。 和 Linux 发行版一样,FreeBSD 提供了大量的可选软件集合,但这是单独管理的。 核心系统更新为一个单一的单位独立和可选的软件可以单独更新。

释放是如何形成的

大多数 Linux 版本是从各种来源收集软件并根据需要进行修改的结果。 发行版维护人员决定在安装介质中包含哪些组件,在发行版维护的存储库中包含哪些组件,等等。 在一起测试组件之后,将创建一个包含测试软件的发行版。

在最后一节中,我们了解到:

  • Freebsd 操作系统的很大一部分是由 FreeBSD 团队开发的。
  • 基本操作系统是生产的主要输出。
  • 基础软件被认为是一个有凝聚力的整体。

这些特性导致了一种与大多数 Linux 发行版不同的软件发布方式。 因为 FreeBSD 是在操作系统级别上组织内容的,所有的基础组件都维护在一个原始码储存库内。 这里有一些重要的暗示。

首先,由于这些工具都是在单个存储库中协同开发的,因此只需选择存储库的一个分支的修订版就可以形成一个版本。 这类似于大多数软件的发布方式,即从有组织的代码库中选择稳定点。

由于基本操作系统都处于活动版本控制之下,这也意味着用户可以“跟踪”不同的分支或稳定性级别,这取决于他们希望系统组件的测试有多好。 用户不必等待开发人员批准更改才能将其安装到系统上。

这有点类似于某些 Linux 发行版中跟踪不同存储库的用户。 在 Linux 中,您可以跟踪一个包存储库,而在 FreeBSD 中,您可以跟踪一个集中式源存储库的分支。

软件差异与系统设计

我们将讨论的其余差异将与软件本身和系统的一般质量有关。

支持的包和源安装

从用户的角度来看,FreeBSD 和大多数 Linux 发行版之间的一个关键区别是打包软件和源代码安装软件的可用性和支持性。

虽然大多数 Linux 发行版只提供支持发行版的软件的预编译二进制包,但 FreeBSD 既包含预编译的包,也包含从源代码编译和安装的构建系统。 对于大多数软件来说,这允许您选择使用合理的默认值构建的预编译包,以及在编译过程中通过自己构建自定义软件的能力。 Freebsd 通过一个称为“端口”的系统来实现这一点。

Freebsd 端口系统是 FreeBSD 知道如何构建的软件集合。 在 / usr / ports 目录中可以找到表示这个软件的有组织的层次结构,用户可以向下钻取到每个应用程序的目录。 这些目录包含一些文件,这些文件指定了可以获取源文件的位置,以及指导编译器如何正确地修补源文件以便使用 FreeBSD 正确工作。

软件的打包版本实际上是从端口系统生成的,这使 FreeBSD 成为一个源代码优先的发行版,为了方便起见,还提供了包。 您的系统可以由源代码构建的和预包装的软件组成,软件管理系统可以适当地处理这两种安装方法的组合。

香草软件 vs 定制软件

对于熟悉一些比较流行的 Linux 发行版的用户来说,有一个决定似乎有点奇怪,那就是 FreeBSD 通常选择在可能的情况下提供未经修改的上游软件。

许多 Linux 发行版对软件进行了修改,以便更容易地与其他组件连接,并尝试使管理更容易。 这种趋势的一个很好的例子就是重组常见的 web 服务器配置层次结构,使服务器配置更加模块化。

虽然许多用户发现这些更改很有帮助,但这种方法也有缺点。 进行修改的一个问题是,它假定知道什么方法对用户最有效。 对于来自其他平台的用户来说,它也使得软件更加不可预测,因为它偏离了上游的惯例。

Freebsd 维护人员通常使用补丁修改软件,但是这些修改通常比一些 Linux 发行版的包选择更保守。 一般来说,对 FreeBSD 生态系统中的软件的修改是在 FreeBSD 环境中构建和正确运行软件所必需的,也是定义一些合理的默认值所必需的。 放置在文件系统上的配置文件通常不会被大量修改,因此可能需要做一些额外的工作来让组件彼此通信。

常用工具的味道

Freebsd 系统的另一个方面可能会给 Linux 用户造成混乱,那就是熟悉的工具的可用性,这些工具的操作方式与 Linux 系统上的工具稍有不同。

Freebsd 团队维护了大量常用工具的自己版本。 虽然 Linux 系统上的许多工具都来自 GNU 套件,但 FreeBSD 经常为其操作系统提供自己的变体。

这个决定有几个原因。 由于 FreeBSD 负责开发和维护核心操作系统,因此控制这些应用程序的开发并将其置于 BSD 许可证之下是必要的或有用的。 这些工具中的一些还与源自 BSD 和 Unix 的工具有着密切的功能联系,这与 GNU 套件不同,GNU 套件通常不太向后兼容。

这些差异通常表现在命令的选项和语法中。 您可能习惯于在 Linux 机器上以某种方式运行命令,但是在 FreeBSD 服务器上可能不一样。 为了熟悉 FreeBSD 变体的选项,经常检查命令的手册页是很重要的。

标准外壳

可能会引起一些混淆的一个相关问题是 FreeBSD 中的默认 shell 不是 bash。 相反,FreeBSD 使用 tcsh 作为默认 shell。

这个 shell 是 csh 的改进版本,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 目录中的结构。 这是通过端口系统安装的软件的主要根目录。 几乎所有端口配置都是通过位于 / usr / local / etc 中的文件完成的,而基本系统配置通常保留在 / etc 中。 这使得识别应用程序是否是基本系统端口的一部分变得容易,并且有助于保持文件系统的整洁。

最后的想法

和 Linux 有许多共同的特性,但是如果你来自 Linux 背景,认识和理解它们的不同之处是很重要的。 当他们的道路不同时,两个系统都有各自的优势,而且两个阵营的支持者都可以指出做出选择的原因。

将 FreeBSD 视为自己的操作系统,而不是坚持用 Linux 的镜头来观察它,这将有助于你避免与操作系统发生冲突,并且通常会带来更好的体验。 到目前为止,我们希望你们已经相当好地理解了在前进过程中需要注意的差异。

如果您是运行 FreeBSD 服务器的新手,下一个好的步骤可能是我们开始使用 FreeBSD 的指南。