二进制与源程序包:您应该使用哪个?

不管您使用什么程序包管理器,都有两种方法可以在Linux上安装程序。您可以使用预先构建的程序包,也可以自己编译。如今,前者通常会默认胜出。但是,有时候您应该考虑使用替代方案。

什么是二进制软件包?

在Linux上安装程序通常与在Windows上安装完全不同。这些文件不是从供应商的网站上删除安装程序,而是从通常为您的操作系统量身定制的程序存储库中检索文件。

单独程序的文件以存档格式存储。它将所有内容捆绑到一个文件中,以便以后访问。例如,Debian使用DEB格式存储其程序。这些捆绑软件称为 binary软件包

安装需要特殊的程序来提取这些文件并将其放到计算机上。也就是说,您的包裹管理员(例如APT,Yum等)。它还可以做其他有用的事情,例如跟踪已安装的文件以及管理软件更新。

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

此过程称为编译。

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

编译源代码不仅用于制作软件包。实际上,甚至没有必要从中创建这样的档案。基本上,“从源代码"安装程序意味着不使用软件包管理器安装某些程序。您可以编译源代码,然后将二进制文件复制到计算机上。

大多数情况下,您可以从托管服务(例如GitHub或BitBucket)下载项目的源代码。较大的程序甚至可能将其托管在个人网站上。该代码通常以存档格式(也称为源程序包)压缩。

一组特殊的工具可帮助自动完成构建过程。在Linux桌面上,此过程通常以命令行的形式出现。

为此,程序会提供带有 makefile 的make,告诉其如何执行和编译。 。如今,通常是由CMake等特殊软件自动生成的。 这是用户进入的地方。因为他们可以从此处确切指定要编译到自己软件中的功能。

例如,下面的命令生成一个使用CMake的Calligra Office Suite的配置文件。创建的文件告诉make程序仅编译Calligra的 Writer 组件。

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

完成此操作后,所有人要做的就是运行make工具进行编译和复制。结果存入他们的计算机。这是通过以下方式完成的:

makemake install

虽然这是编译程序的常规模式,但是还有许多其他方式可以安装源程序包。例如,Gentoo Linux具有处理此问题的内置方法,从而使该过程更快,更轻松。与此相伴,构建二进制软件包比上述命令要花更多的步骤。

使用二进制软件包的好处

如果您使用的是Linux,则很有可能您所使用的程序已安装的已预编译。如今,它比使用源程序包更为常见。造成这种情况的原因有很多。

二进制软件包包含的内容远不止编译后的安装文件。它们还存储使您的软件包管理器和Debian衍生产品容易的信息)还包含重要信息,例如程序需要运行其他软件以及其当前版本。

这使软件包更易于使用安装。例如,您无需担心要安装其他文件才能运行程序。由于包管理器可以从包本身读取该信息,因此它可以自动处理所有信息。

将其与从源代码安装程序进行比较。除非您将代码编译成自己的二进制程序包,否则将负责管理该软件。您需要记住要使其运行所需的其他程序,然后自己安装它们。

软件包存储库往往会测试其二进制文件中是否有问题,并尽力在它们出现时对其进行修复。 。这样可以提高程序的稳定性,这是从源代码安装的人可能会错过的事情。

例如,Debian仓库中有许多应用了补丁的软件包。这甚至可以包括大型程序,例如网络浏览器!

此外,软件包通常还必须遵守一组严格的规则,以确保它们可以在您的系统上运行。例如,Debian和Ubuntu以及其他许多Linux操作系统都具有策略手册。

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

编译源软件包的好处

从源代码安装程序并不是每个人都需要的去做。实际上,最好坚持使用二进制软件包。即使这样,使用这种稍微复杂一些的安装程序的方式仍然有一些优点。

使程序更可靠的一个缺点是改进和修复需要花费时间。结果,这可能导致您使用旧版本的软件。对于想要最新和最伟大的人来说,他们甚至可能会希望获得一些不稳定性来换取它。

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

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

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

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

例如,查看FFmpeg,这是仅基于命令行的音频和视频转换器。

编译FFmpeg允许您从中删除不需要的内容,使其更轻巧,并根据需要进行定制。其他重量级程序也是如此。

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

为什么不同时安装两者?

虽然您可能不想每天编译软件包,记住这一点很有用。如果您仍然觉得软件存储库不够完善,请记住还有另一种较旧的方法来安装软件。

您是否曾经需要编译软件?为什么?

图片来源:Andrii Symonenko,通过Shutterstock.com

标签: