为什么程序不以编译格式分发?

为什么程序不以编译格式分发?

但他们给出了类似的指示

cd downloaded_program
./configure
make install

这将创建所需的 ELF,以及可能的一些 .so 文件。

为什么不将它们放入 zip 文件中以供下载,就像 Windows 应用程序一样?有什么原因需要用户编译它们吗?

答案1

我们来分析一下因素...

分析:

根据平台的依赖性:开发人员创建和维护应用程序的多个特定于体系结构的变体的环境中会出现一些问题:

  • 不同的变体需要不同的源代码 - 不同的基于 UNIX 的操作系统可能使用不同的函数来实现相同的任务(例如,strchr(3) 与 index(3))。同样,可能需要为不同的变体包含不同的头文件(例如,string.h 与 strings.h)。

  • 不同的变体需要不同的构建过程——不同平台的构建过程有所不同。差异可能涉及编译器位置、编译器选项和库等细节。

  • 不同变体的构建必须保持分离——由于只有一个源代码树,因此必须注意确保一种体系结构的目标模块和可执行文件不会与其他体系结构的目标模块和可执行文件混淆。例如,链接编辑器不得尝试使用为 SunOS-4 构建的目标模块来创建 IRIX-5 可执行文件。

  • 每个操作系统都有自己的链接管理方案,并且必须根据需要准备ELF(可执行和链接格式)文件。

  • 编译器将生成一个构建,该构建是一系列指示,不同的架构意味着不同的指令集(指令集架构比较)。因此,编译器的输出对于每种架构都是不同的(例如:x86、x86-64、ARM、ARM64、IBM Power ISA、PowerPC、Motorola's 6800、MOS T 6502 和还有很多其他人

安全:

  • 如果您下载二进制文件,您无法确定它是否按照其说明的那样执行操作,但您可以尝试审核源代码并在系统中使用自编译的二进制文件。尽管如此,用户科技杂志他在评论中提出了一个很好的观点,审计代码需要知识渊博且有能力的编码人员来评估代码,而不是安全保证。

市场:在这一部分有很多因素,但我会尝试恢复它:

  • 并不是每个公司的目标都是覆盖所有平台,这取决于市场和平台的受欢迎程度以及他们想要销售的产品。

  • 自由软件的精神是让软件尽可能广泛地可用,但这并不意味着该软件是为每个平台设计的,它取决于支持它的社区。

结论:

并非每个软件都是为每个平台设计的。为所有架构和平台提供二进制文件意味着为所有平台编译、测试和维护它。这是更多的工作,有时成本太高,如果用户在自己的平台上编译它,就可以避免。此外,用户将知道他正在执行什么。

答案2

*nix 和都有如此多种平台和软件环境其他,软件可以在其上运行,允许您构建应用程序(或与应用程序一起使用的库)是支持与“好”软件项目一样多的这些组件组合的唯一现实方法。当然,GPL 等许可证需要源代码能得到的- 因此,即使软件无法正常工作,对于用户来说通常也是可能的(尽管理解问题所在以及如何修复它可能很棘手)或一些第三方深入并纠正它,即使创作者不会/不能/不再存在这样做。

将软件作为源代码分发还允许独立验证该软件会按照它声称的那样做,并且不会做一些令人讨厌的事情,而不是或者同样 - 尽管降低了人们对创建者的信任程度,但实际上增强了它!

答案3

首先,你的问题是基于一个有缺陷的前提。程式以编译格式分发!

在 Ubuntu 上安装软件的正常方法是安装软件包,就像在大多数其他 Linux 发行版上一样,更常见的是在大多数 Unix 变体上。在 Ubuntu 上,您打开软件中心或其他软件包管理器并浏览可用的软件。当您选择安装包时,二进制文件(如果包包含程序)将被下载并安装在您的计算机上。

默认情况下,包管理器为您提供由发行版维护者制作的包。您还可以找到第三方软件包来源; Ubuntu 提供苯丙胺作为第三方提供套餐的标准化方式。

从作者那里下载已编译的软件是最后的手段。仅当该软件不够流行而无法打包,或者您绝对需要尚未打包的最新版本时,您才需要这样做。大多数人永远不需要这样做。

当软件没有打包分发时,它通常以源代码形式而不是二进制形式分发。这种情况在 Linux 世界中经常发生,但在 Windows 世界中很少发生,有两个主要原因。原因之一是Linux上开源程序的比例要高得多。显然,如果程序的源代码不可用,则唯一的分发形式是二进制文件。另一个原因是 Linux 世界更加多样化。每组不兼容的库版本都需要不同的二进制文件,这通常意味着每个发行版的每个版本都需要不同的二进制文件。 Windows 通过让每个软件包作者将他们使用的库与程序一起分发来“解决”这个问题(结果:您的计算机存储每个库的许多副本,每个使用它的程序一个;如果库中修复了错误,则每个程序都将使用该库)使用它必须发布更新),并且每三年左右发布一个新版本的操作系统。 Unix具有更多的多样性和更及时的错误修复习惯,并通过为不同的发行版构建不同的二进制文件来解决库分发问题。

答案4

作为来源进行分发的最初原因当然是平台的多样性; Linux 社区继续采用这种方法,既是出于这个原因,也是出于新的(部分是政治性的)原因。

与Windows等不同,Linux历来从未费心去保持任何ABI(应用程序二进制接口)在长时间内保持稳定——在可执行格式、库API和对新硬件平台的支持等方面保持创新的可能性被更多地考虑。重要的。

商业操作系统通过严格创新来实现长期的应用程序兼容性;新功能/软件界面总是需要添加到旧功能/软件界面上 - 需要维护两件事,并且在发布后更改任何内容的成本需要被认为非常高。或者,您可以与任何为您的操作系统编写软件的人一起接受计划中的应用程序过时的事实(这不是暗示微软而是另一个操作系统供应商)。

Linux 社区的某些成员甚至认为,为仅以二进制形式(在给定的 Linux 发行版之外)分发的软件实现长期稳定的平台是不受欢迎的。作为两个平台的毫无歉意的用户,我并不是说这是好还是坏;就是这样。

相关内容