简介
FreeBSD是一个免费的开源类Unix操作系统,也是一个流行的服务器平台。虽然FreeBSD和其他基于BSD的系统与Linux等系统有许多共同之处,但这两个系列在一些方面存在重要差异。
在本指南中,我们将简要讨论FreeBSD和Linux之间的一些共性,然后再进一步讨论它们之间的重要差异。 下面的许多要点可以准确地应用于更大的BSD衍生系统家族,但由于我们的关注,我们将主要参考FreeBSD作为该家族的代表。
<$>[备注] 注意: 从2022年7月1日起,DigitalOcean不再支持通过控制面板或API创建新的FreeBSD水滴。但是,您仍然可以使用自定义图像来旋转FreeBSD水滴。了解如何通过我们的产品documentation.]将自定义图像导入到DigitalOcean <$>
FreeBSD和Linux的共同点
在我们开始研究FreeBSD和Linux的不同之处之前,让我们先从广义上讨论一下这两个系统的共同点。
虽然每个家族使用的具体许可不同(我们将在后面讨论这一点),但这两个家族的系统都是免费和开放源码的。用户可以随心所欲地查看和修改源代码,并且开发是在开放的情况下进行的。
在本质上,FreeBSD和基于Linux的发行版都类似于Unix。FreeBSD与过去的Unix系统有着密切的渊源,而Linux则是从头开始创建的,是一种开放的类Unix替代方案。这种关联通知有关系统设计的决策、组件应该如何互操作,以及对系统应该是什么样子和完成的总体期望。
常见的类unix行为主要是因为这两个家族大多是POSIX-compliant.这些系统的整体感觉和设计都相当标准化,并使用相似的模式。文件系统层次结构划分类似,外壳环境是两个系统的主要交互方法,编程API共享相似的功能。
由于这些考虑,FreeBSD和Linux发行版能够共享许多相同的工具和应用程序。在某些情况下,这些程序的版本或风格因系统的不同而有所不同,但应用程序可以比在非类Unix系统上更容易移植。
记住这些要点,我们现在将继续讨论这两个操作系统家族的分歧之处。 希望这些共性能帮助您更准确地理解它们之间的差异。
授权差异
FreeBSD和Linux系统之间最根本的区别之一是许可问题。
Linux内核、基于GNU的应用程序和许多起源于Linux世界的软件都是在某种形式的GPL或GNU通用公共许可证下许可的。 该许可证通常被描述为copyleft
许可证,这是一种允许自由查看,分发和修改源代码的许可形式,同时要求任何衍生作品保持该许可。
另一方面,FreeBSD,包括内核和由FreeBSD贡献者创建的任何工具,在BSD许可证下许可其软件。这种许可类型比GPL更具容许性,因为它不需要衍生工作来维护许可条款。这意味着任何人或组织都可以使用、分发或修改程序,而无需重新贡献更改或发布他们正在创建的工作的源代码。唯一的要求是在衍生作品的源代码或文档(取决于发布方法)中包括原始版权和BSD许可证的副本,并包括所提供的限制责任的免责声明。主许可证非常短,可以在here.上找到
每一种许可类型的吸引力几乎完全取决于理念和用户的需求。GPL许可证促进了共享和开放的生态系统,而不是所有其他考虑因素。专有软件必须非常小心,不要依赖基于GPL的软件。另一方面,BSD许可的软件可以自由地合并到专有的、封闭源代码的应用程序中。这使得它对许多希望将其软件货币化的企业和个人更具吸引力,因为它可以直接销售软件并保留源代码。
开发人员倾向于选择一种许可哲学而不是另一种,但每种都有其优点。 了解这些系统的许可证可以帮助我们开始理解一些选择和哲学,进入他们的发展。
FreeBSD谱系及其影响
FreeBSD和Linux系统之间的另一个重要区别是每个系统的血统和历史。 除了上面讨论的许可证差异外,这可能是每个阵营所坚持的哲学的最大影响因素。
Linux是由Linus Torvalds开发的内核,用来取代他在赫尔辛基大学使用的面向教育但有限制的Minix系统。与许多来自GNU套件的其他组件相结合,构建在Linux内核上的操作系统具有许多类似Unix的属性,尽管它不是直接从以前的Unix操作系统派生出来的。由于Linux是从零开始的,没有继承的一些设计选择和遗留的考虑因素,所以它可能与与Unix联系更紧密的系统有很大的不同。
FreeBSD与其Unix传统有许多直接联系。BSD或Berkeley软件分发是加州大学伯克利分校创建的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团队能够非常紧密地管理主操作系统,确保紧密集成和更高的可预测性。
核心操作系统中包含的软件被视为与作为可选附加组件提供的组件完全分开。就像Linux发行版一样,FreeBSD提供了大量可选软件,但这是单独管理的。核心系统作为单个单元独立更新,可选软件可单独更新。
如何发布版本
大多数Linux版本都是从各种来源收集软件并根据需要进行修改的结果。分发维护人员决定将哪些组件包括在安装介质中、将哪些组件包括在分发维护的存储库中等。在一起测试组件之后,创建包含被测试软件的版本。
在上一节中,我们了解到:
- 很大一部分FreeBSD操作系统是由FreeBSD团队开发的。
- 基本操作系统是正在生产的主要产出。
- 基础软件被认为是一个有凝聚力的整体。
这些特点导致了一种与大多数Linux发行版不同的软件发布方法。因为FreeBSD在操作系统级别上进行组织,所以所有基本组件都在单个源代码存储库中维护。这有几个重要的含义。
首先,由于这些工具都是在单个存储库中同时开发的,因此只需选择存储库其中一个分支的修订版即可形成版本。这类似于大多数软件的发布方式,即从有组织的代码库中选择一个稳定点。
由于基本操作系统都处于活动版本控制之下,这也意味着用户可以根据他们希望系统组件经过多好的测试来跟踪
不同的分支或稳定性级别。用户不必等待开发人员批准更改即可将其应用到系统中。
这有点类似于用户跟踪某些Linux发行版中按稳定性组织的不同存储库。 在Linux中,您可以跟踪一个软件包存储库,而在FreeBSD中,您可以跟踪集中式源代码存储库的分支。
软件差异与系统设计
我们将讨论的其余差异将与软件本身和系统的一般质量有关。
支持的包和源安装
从用户的角度来看,FreeBSD和大多数Linux发行版之间的主要区别之一是对打包软件和源安装软件的可用性和支持。
虽然大多数Linux发行版只提供支持发行版的软件的预编译二进制包,但FreeBSD既包含预构建包,也包含用于从源代码编译和安装的构建系统。对于大多数软件,这允许您在使用合理的缺省值构建的预编译包和在编译过程中通过自己构建软件来定制软件之间进行选择。FreeBSD通过一个它称为端口
的系统来实现这一点。
FreeBSD端口系统是一组FreeBSD知道如何构建的软件。在/usr/ports
目录中提供了代表该软件的有组织的层次结构,用户可以在该目录下钻取到每个应用程序的目录。这些目录包含一些文件,这些文件指定可以获得源文件的位置,以及编译器如何正确修补源文件以正确使用FreeBSD的说明。
软件的打包版本实际上是从PORTS系统产生的,这使得FreeBSD成为一个源代码优先的发行版,为了方便起见,可以使用包。您的系统可以由源代码构建的软件和预打包的软件组成,软件管理系统可以充分处理这两种安装方法的组合。
香草VS定制软件
对于熟悉一些更流行的Linux发行版的用户来说,一个可能有点奇怪的决定是FreeBSD通常选择在可能的情况下提供未经修改的上游软件。
许多Linux发行版对软件进行了修改,以使其更容易与其他组件连接,并试图使管理更容易。这种趋势的一个很好的例子是对常见Web服务器配置层次结构的重组,以使服务器配置更加模块化。
虽然许多用户发现这些更改很有帮助,但这种方法也有缺点。进行修改的一个问题是,它假定知道哪种方法最适合用户。它还使来自其他平台的用户更难预测软件,因为它与上游惯例不同。
FreeBSD的维护者经常使用补丁来修改软件,但是这些通常比一些Linux发行版的软件包选择更保守。 一般来说,在FreeBSD生态系统中对软件的修改是那些使软件在FreeBSD环境中正确构建和运行所必需的,以及那些定义一些合理的默认值所必需的。 放置在文件系统上的配置文件通常不会被大量修改,因此可能需要进行一些额外的工作来使组件相互通信。
常见工具的FreeBSD风格
FreeBSD系统的另一个方面可能会让Linux用户感到困惑,那就是人们熟悉的工具的可用性,这些工具的操作与Linux系统上的略有不同。
FreeBSD团队维护着大量常用工具的自己版本。虽然Linux系统上的许多工具都来自GNU套件,但FreeBSD经常为其操作系统推出自己的变体。
做出这一决定有几个原因。由于FreeBSD负责开发和维护核心操作系统,因此控制这些应用程序的开发并将其置于BSD许可证之下是必要的或有用的。与GNU套件不同的是,这些工具中的一些还与BSD和Unix工具有着密切的功能联系,它们都是从BSD和Unix工具派生而来的,GNU套件通常倾向于不太向后兼容。
这些差异通常体现在命令的选项和语法中。 您可能习惯于在Linux机器上以某种方式运行命令,但这些在FreeBSD服务器上可能不一样。 一定要查看命令的man页以熟悉FreeBSD变体的选项。
标准外壳
相关的一点可能会引起一些混淆,因为FreeBSD中的默认外壳不是bash
。相反,FreeBSD使用tcsh
作为其默认外壳。
此外壳是csh
的改进版本,csh
是为BSD开发的C外壳。bash
外壳是GNU组件,因此不适合作为FreeBSD的默认选择。虽然这两个外壳通常在命令行上以相似的方式运行,但脚本编写不应该在tcsh
中完成。使用基本的Bourne外壳程序sh
更可靠,并且避免了与tcsh
和csh
脚本相关的一些有详细记录的陷阱。
同样值得注意的是,如果您在那个环境中感觉更舒服,那么将您的外壳更改为‘bash’是非常简单的。
更分层的文件系统
我们在上面多次提到,FreeBSD区分了基本操作系统和可以安装在该层之上的可选组件或端口。
这对FreeBSD组织文件结构中的组件的方式有影响。在Linux中,可执行文件通常位于/bin
、/sbin
、/usr/sbin
或/usr/bin
目录中,具体取决于它们的用途以及它们对核心功能的重要性程度。FreeBSD认识到这些差异,但也在作为基本系统的一部分安装的组件和作为端口安装的组件之间强加了另一个级别的分离。基本系统软件驻留在上述目录之一中。所有作为端口或包安装的程序都放在/usr/local/bin
或/usr/local/sbin
中。
/usr/local
目录包含的目录结构主要反映了/
或/usr
目录中的结构。这是通过端口系统安装的软件的主根目录。几乎所有的端口配置都是通过/usr/local/etc
中的文件完成的,而基础系统配置通常保存在/etc
中。这使得很容易识别应用程序是否是基本系统端口的一部分,并有助于保持文件系统的整洁。
最终想法
FreeBSD和Linux有许多共同之处,但如果您来自Linux背景,认识和理解它们的不同之处是很重要的。在他们的道路分道扬镳的地方,两种制度都有各自的优势,来自任何一个阵营的支持者都可以指出做出选择的原因。
将FreeBSD视为自己的操作系统,而不是坚持通过Linux镜头查看它,这将帮助您避免与操作系统发生冲突,通常会带来更好的体验。到目前为止,我们希望您对前进过程中需要注意的差异有一个相当好的了解。
如果您不熟悉运行免费BSD服务器,下一步可以参考我们的指南FreeBSD.入门