linux中“自己编译”心态的来源是什么

Sid*_*ney 11 linux history

我在大学时使用过 Linux,并且熟悉这些术语。我经常使用 .NET 语言进行开发,所以我不是计算机文盲。

也就是说,我真的不能说我理解 *nix 圈子中存在的“自己编译”[CIY] 心态。我知道它会消失,但仍然不时听到它。作为一名开发人员,我知道设置编译器和必要的依赖项是一件很痛苦的事情,所以我觉得 CIY 工作流程有助于使 *nix 更难访问。

是什么社会或技术因素导致了 CIY 心态的兴起?

ter*_*don 27

很简单,在 *nix 的大部分历史中,别无选择。程序作为源 tarball 分发,使用它们的唯一方法是从源代码编译。所以它与其说是一种心态,不如说是一种必要的邪恶。

也就是说,有很好的理由自己编译东西,因为它们将专门为您的硬件编译,您可以选择启用或不启用的选项,因此您最终可以得到一个微调的可执行文件,就像你喜欢的那样. 然而,这显然只是对专家用户有意义的事情,而不是对那些只想要一台工作机器来阅读他们的电子邮件的人有意义。

现在,在 Linux 世界中,多年前的主要发行版都已经远离了这一点。你现在很少需要自己编译任何东西,除非你使用的是专门为喜欢这样做的人设计的发行版,比如 Gentoo。然而,对于绝大多数发行版,您的普通用户永远不需要编译任何东西,因为他们需要的几乎所有东西都存在并编译在他们的发行版存储库中。

所以你所说的这种 CIY 心态基本上已经消失了。它很可能在 UNIX 世界中仍然活跃,我没有这方面的经验,但是在 Linux 中,如果您使用具有良好存储库的流行发行版,您几乎不需要自己编译任何东西。

  • 在 Unix 世界中,它会再次因操作系统而异。我的上一个职位涉及大量 Solaris(Sun Sparc 平台)服务器,我在家中将 Solaris 10 x86 作为台式机运行了几年。我不能代表 HPUX 或 AIX,但您确实必须在 Solaris 上做一些 CIY。Sun 确实分发了许多为 Solaris 预先打包的开源实用程序。还有像 opencsw.org 和 unixpackages.com 这样的网站。但是我仍然从源代码压缩包中进行了大量编译。 (5认同)
  • @woodrow 不是真的。没有其他选择。不要忘记\*nix 是*旧的*。此外,大多数程序是在已经是专家的同事之间传递的,你为什么要费心为其他 8 个使用你代码的人发明一些像安装程序或包管理器这样复杂的东西?当这些工具被发明出来时,\*nix 人开始像其他人一样使用它们。 (2认同)

iva*_*van 13

这种心态有几个原因,来自最终用户、分发维护者和代码供应商/开发人员/项目组,并且每一个都是完全有效的。

开源方面

有些人喜欢知道他们正在使用自由软件,并通过选择从源代码编译来验证这一点。这就是 Linux From Scratch 项目/howto/guide/book 之类的地方。

优化和选项方面

想要为您的特定 CPU 架构编译具有特定优化的东西吗?也许有一个编译时选项(或创建一个补丁)来启用或禁用您需要的特定功能。这方面的例子可能是修补 postfix 以具有管理配额的能力,或者使用像 Gentoo 这样的发行版,您可以选择不使用 systemd,或者由于许可问题,您特别选择支持 ogg/theora/vorbis/whatever 而不是 mp3管他呢。

CPU 架构方面

您的工作场所是否使用高端非 x86/amd64 机器?您需要/想要的包可能无法为您的 CPU 架构预编译,更不用说您正在运行的任何发行版。诚然,大多数运行这种硬件的地方也得到 IBM 等公司的支持,不要随意安装/编译东西。但是,如果您从多余的销售中挑选一个,挖出带有 PPC 处理器的旧 iMac 等,该怎么办?

分销方面

分发“家族”——即 Debian w/ Ubuntu、Mint 等,以及 RedHat 和 CentOS、Whitebox、Fedora 等——都使用不同的包格式。并且每个版本都带有不同的库版本,等等。即使是一个简单的单文件 shell 脚本,设置一个合适的 Debian .deb 文件也需要时间和精力。如果您编写了一些软件来解决一些问题,并希望使其免费并将其发布在 gitlab、您自己的网络服务器上,不管怎样,您是愿意只发布带有构建说明的通用 .tar.gz 源文件文件,还是愿意打包两个版本的 Debian(稳定版和测试版,可能是旧版),多个版本的 Redhat 和 Fedora 作为 RPM,一个 Slackware 的 TGZ,一个 Gentoo 的 ebuild 配置文件等等。


Rui*_*iro 9

正如@terdon 所说,现在编译东西的需求非常小,尤其是对于家庭用户。

过去,在 Unix 世界中,我高度依赖编译源,例如,当我管理 Solaris、AIX、Ultrix、Digital Ultrix 和 HP/UX 系统时,这些系统有时不再由供应商维护,或者哪些实现公共服务的数量远远落后于其他 Unix 系统(包括 Linux)常用的服务。

目前仍然有真正需要编译的东西,要么是为了获得一些不在存储库中的更晦涩或过时的软件,要么使用您没有兼容二进制文件的更新版本的软件包,或者当如果您能够为其编写补丁或模块,您想添加额外的功能或很少添加功能。

在重新设计系统以移植到 Debian 和/或具有操作系统不再支持的框架的 Debian 新版本时,我还必须手动编译软件。

例如,过去我必须手动编译 DHCP 守护程序才能支持(到那时)Windows 对协议的更改,或者支持用于在电信世界中进行配置的特定补丁。

我仍然在我的本地存储库中保留我从 dev git repo 编译的 FreeRadius 版本的 debs,因为有一系列稳定版本在 Debian 中有(严重的)错误,通常 Debian/Ubuntu 的相应 .debs 还没有足以满足我们的需要。

不言而喻,有时我们还必须运行/或编译自己编写的东西。

现在安装依赖项不像过去那么难,有些软件甚至为一些常见的 Linux 发行版定制了规则文件,这些文件命名了要编译的依赖项,并完成了创建带有内置依赖项列表的包文件的繁重工作。从本地存储库安装这样的包与从官方存储库安装相同的包没有太大区别。