从源代码构建和使用安装包有什么区别?

kwa*_*gjj 59 compiling source software-installation

我想知道:在安装某些东西时,有一种双击安装可执行文件的简单方法,另一方面,有一种从源代码构建它的方法。

后一个,下载一个源包,真的很麻烦。

但是这两种方法之间的根本区别是什么?

beg*_*ner 57

所有的软件都是程序,也称为源码包。因此,首先需要构建所有源包,才能在您的系统上运行。

二进制包是一个已经从建有人用在软件中提供,使得大量的用户可以安装和使用它的一般功能和参数。

二进制包很容易安装
可能没有来自上游包的所有选项

因此,对于从源代码安装,您需要自己构建源代码。这意味着您需要自己处理依赖项。此外,您还需要了解包的所有功能,以便您可以相应地构建它。

从源安装的优点:

  • 您可以安装最新版本并始终保持更新,无论是安全补丁还是新功能。
  • 允许您在安装时修剪功能以满足您的需要。
  • 同样,您可以添加一些二进制文件中可能未提供的功能。
  • 将其安装在您希望的位置。
  • 对于某些软件,您可以提供硬件特定信息以进行合适的安装。

简而言之,从源代码安装为您提供了大量自定义选项,同时需要付出很多努力,而从二进制安装更容易,但您可能无法根据需要进行自定义

更新:在下面的评论中添加与安全相关的参数。是的,从二进制安装时确实没有源代码的完整性。但是这取决于你从哪里获得二进制文件。有很多值得信赖的来源,您可以从中获得任何新项目的二进制文件,唯一的缺点是时间。更新的二进制文件甚至新项目可能需要一些时间才能出现在我们受信任的存储库中。

最重要的是,关于软件安全性,我想在下面的评论中强调Joe提供的bell-labs 中这个热闹的页面

  • @ultrasawblade - 你显然不够偏执!<G> - 有关完整内容,请参阅 http://cm.bell-labs.com/who/ken/trust.html。 (6认同)
  • 源代码也可以以优化的方式为您的系统编译(这……可能不是一个好主意,因为编译后的东西是“特定于”系统的,可能无法在备份上运行……但是您有源,你可以重新编译(如果你有时间的话)) (5认同)
  • 对于偏执狂来说,从源代码安装的一个优点是安全性,以及如果您能够或想要的话,可以检查代码:当您从源代码安装时,您知道您拥有来自该源代码的二进制文件,而不是具有未知修改的二进制文件(假设您首先信任源代码)。 (2认同)

gar*_*Red 36

源文件包含开发人员使用他/她选择的任何语言(C、C++、Python 等)编写的原始代码,并且是通用的。它并不特定于任何发行版,并且在许多情况下特定于任何操作系统。

包(例如 RPM 或 DEB)是为您的特定发行版预先准备的二进制可执行文件(或解释脚本等)。准备用于编译的源代码(添加任何必要的补丁等)、实际编译、创建发行版特定配置文件、创建安装前和安装后脚本等任务都由包维护者为您完成。

换句话说,所有的驴工作都在一个包中为您完成,而如果您选择从源代码安装,则需要您自己完成。

在几乎所有情况下使用包要容易得多,因为:

  • 它们更容易安装
  • 它们专门设计用于与您的发行版配合使用
  • 它们有时会由软件包维护者修补以修复发行版特定的错误
  • 包管理器将卸载它们
  • 包管理器将为您管理所有依赖项
  • 包管理器将负责更新
  • 您不需要在系统上安装开发人员工具(编译器、make 等)

但是,有时打包版本是旧版本,甚至更糟,没有打包版本;在这种情况下,您唯一的选择是自己编译。如果这样做,则需要考虑以下事项:

  • 您需要在系统上安装所有开发人员工具
  • 您将负责检查更新并重新编译
  • 您需要确保安装了所有依赖项,包括dev软件包 - 可能有很多。
  • 如果它在您的发行版上没有按预期工作,您可能需要调试问题

如果您愿意付出额外的努力,那么从源代码编译可能会给您带来以下好处:

  • 访问最新的可用版本
  • 优化编译过程以提高性能/稳定性的选项
  • 享受!

请注意,虽然一些发行版的预构建包提供了可以安装和运行的二进制可执行文件(RPM 和 DEB 是示例),但其他发行版提供了简单地自动化编译过程的包。

Gentooebuilds就是一个例子——包基本上是包管理器的指令,描述如何编译和安装可执行文件。这具有传统包管理器的许多优点(自动更新、卸载等),同时仍允许用户根据自己的喜好优化编译过程。

Arch Linux 有一个打包系统,其中主流包是二进制的,而许多额外的包是使用PKGBUILD文件在系统上编译的。


Dan*_*iel 23

除了其他答案,我想补充一点:

如果你决定自己编译一个程序,你需要认为编译不是你只做一次的事情。您可能需要订阅您决定编译的应用程序的开发邮件列表,并及时了解新版本,尤其是安全更新。

每次更新应用程序时,您都必须重新编译新版本,因此请记住,您每周都必须腾出一些时间。

如果您负担不起,最好让软件包维护人员为您完成这项工作。


h22*_*h22 6

从源代码构建允许准确指定您的机器的架构。新的 CPU 有编译器可以理解的额外指令,从而挤压了一点性能。预构建包通常依赖于仍在使用的最古老的 CPU。

这对于大量使用 CPU 的项目关键应用程序非常重要,例如生物信息管道工具或地球物理建模工具。此类软件运行在一个非常受控制的环境中,本身不具有访问控制功能,因此很少有安全漏洞如此紧急以至于必须在数天或数小时内修补它们。它几乎从不需要在具有最初未知架构的不同机器上运行。

是的,我知道,计算机现在非常非常非常快,你采取的任何努力或行动都非常非常非常昂贵,但是在坐等你的程序完成的第三天(这就是我所说的情况)这样的事实开始看起来有问题。

不同的是,像浏览器之类的应用程序应该更好地从维护者存储库(而不是一些下载的预构建包)中使用,因为让它们保持最新非常重要。