二进制与源代码包:您应该使用哪个?

无论您使用哪种包管理器,在 Linux 上安装程序都有两种广泛的方法。 您要么使用预构建的包,要么自己编译程序。 如今,前者通常默认胜出,但有时您可能需要考虑从源代码编译。

什么是二进制包?

在 Linux 上安装程序通常与在 Windows 上安装软件的传统方式完全不同。 这些文件不是从供应商的网站下载安装程序,而是来自通常为您的 Linux 发行版量身定制的程序存储库。 您可以使用 Linux 包管理器或 Linux 应用商店访问此存储库。

构成这些存储库中程序的文件采用存档格式。 这会将所有内容捆绑到一个文件中,以便于访问和分发。 Debian,对于 example,使用DEB格式存储和分发程序。 这些捆绑包称为 二进制包.

您需要一个特殊的程序来提取这些文件并将它们安装到您的计算机上,通常是您的包管理器或应用商店。 这些工具还执行其他有用的功能,例如跟踪您已安装的文件以及管理软件更新。

包裹从何而来?

所有软件都由称为源代码的文本行组成,以特定的编程语言(例如 C 或 C++)编写。 您通常不能只是将此源代码捆绑到存档中并将其称为包。 这些行需要翻译成您的计算机可以理解和执行的语言。

这个过程称为编译,最终结果是创建您的计算机可以运行的二进制文件。 包和软件之间的区别在于,软件二进制文件与配置文件等其他内容一起存储在一个包中。

什么是“从源代码”安装?

“从源代码”安装程序意味着在不使用包管理器的情况下安装程序。 您编译源代码并将二进制文件复制到您的计算机。

大多数情况下,您可以从 GitHub、GitLab 或 Bitbucket 等托管服务下载项目的源代码。 更大的程序甚至可能在个人网站上托管源代码。 代码通常会以存档格式压缩(也称为 源码包)。

一组特殊的工具有助于自动化构建过程。 在 Linux 桌面上,这通常以命令行程序的形式出现,称为 制作. 用不同语言编写的源代码需要特定的编译器和命令才能将它们转换为二进制文件。 make 程序使这个过程自动化。

为了使这种自动化工作,程序为 make 提供了一个 生成文件 告诉它做什么和编译。 如今,它通常由 CMake 等特殊软件自动生成。 这就是你进来的地方。从这里,你可以准确地指定你想要编译到你的软件中的功能。

构建“从源代码”示例

为了 example,下面的命令会为 Calligra 生成一个配置文件 Office 使用 CMake 的套件。 创建的文件告诉 make 程序只编译 Calligra 的 Writer 组件。

cmake -DPRODUCTSET=WORDS -DCMAKE_INSTALL_PREFIX=$HOME/kde/inst5 $HOME/kde/src/calligra

完成此操作后,人们所要做的就是运行 make 工具来编译并将结果复制到他们的计算机上。 这是通过以下方式完成的:

make
make install

虽然这是编译程序的一般模式,但还有许多其他方法可以安装源包。 Gentoo Linux,用于 example, 具有处理此问题的内置方法,使该过程更快更容易。 但是构建二进制包需要比上述命令更多的步骤。

使用二进制包的好处

如果您使用的是 Linux,则很可能有人预编译了您安装的软件。 这比使用源代码包更常见。 但为什么?

二进制版本更易于管理

二进制包包含的不仅仅是编译的安装文件。 它们还存储信息,使您的包管理器可以轻松跟踪您的所有程序。 为了 exampleDEB 文件(Debian 和 Debian 衍生产品的软件包格式)还包含重要信息,例如程序需要运行的其他软件及其当前版本。

这使软件包更易于安装,因为您无需担心成功运行程序所需的其他文件。 您的包管理器可以从包本身读取该信息并自动下载所有必要的依赖项。

从源代码安装程序时,除非您将代码编译成自己的二进制包, 将负责管理该软件。 您需要记住使其工作所需的其他程序,并自己安装它们。

二进制版本提高了稳定性

为您的包管理器维护存储库的人倾向于测试二进制文件是否存在问题,并尽最大努力修复出现的问题。 这可以提高程序的稳定性,从源代码安装的人可能会错过。

Plus 软件包通常必须遵守一套严格的规则,以帮助确保它们能够在您的系统上运行。 Debian 和 Ubuntu 都有一个政策手册 example,和许多其他 Linux 发行版一样。

一些程序还依赖于同一软件依赖项的不同版本来运行。 包存储库尽最大努力解决这些冲突,因此您不必担心这一点。

编译源包的好处

从源代码安装程序并不是每个人都需要做的事情,因为如果您坚持使用二进制包,通常更容易维护您的 PC。 即便如此,使用这种稍微复杂的安装程序方式仍然有一些优势。

源代码提供最新软件

使程序更可靠的一个缺点是需要时间来改进和修复。 因此,这可能会导致您使用旧版本的软件。 对于那些想要最新最好的人来说,他们甚至可能更愿意用一点不稳定来换取它。

虽然有些 Linux 操作系统可以在不编译程序的情况下满足这种需求,但它们确实有一些缺点。 为了 example,与从源代码安装相比,不经常发布设置包版本的软件更难在存储库中保持最新。

这是因为二进制包通常是由官方发布的程序制作的。 因此,通常不会考虑这些版本之间的更改。 通过从源代码编译您自己的软件,您可以立即从这些更改中受益。

您的 Linux 操作系统也可能没有您想要为您预先制作的软件。 如果是这种情况,从源代码安装它是您唯一的选择。

你可以挑选

使用源包的另一个好处是您可以更好地控制您安装的程序。 从二进制存储库安装时,您可以自定义软件包的方式受到限制。

为了 example,看看FFmpeg,基于命令行的音视频转换器。 默认情况下,它具有大量功能,其中一些您可能永远不会触及。 例如,FFmpeg 中提供了 JACK 音频支持,尽管该软件通常仅用于生产环境。

编译 FFmpeg 允许您从中删除您不想要的东西,使其更轻巧并根据您的需求量身定制。 这同样适用于其他重量级程序。

当资源稀缺时,删除功能可能是减轻负载的好方法。 难怪 Chrome 许多低端计算机上的操作系统基于 Gentoo Linux。 Gentoo 是基于源代码的,它编译了很多软件,可能会使这些系统运行得更轻。

为什么不同时安装两者?

虽然您可能不想每天编译包,但请记住这一点很有用。 也就是说,使用 Snap Store 和 Flathub 等网站提供的新通用软件包格式,您不太可能需要从源代码构建以获得最新软件。