为什么 Linux 强制使用包管理器?

为什么 Linux 强制使用包管理器?

我是 Linux 新手,我仍然没有看到包管理器的足够优势,因此无法理解它们如何变得如此主导地位。

例如:我听说 Emacs 很棒,我想尝试一下。我进入 Ubuntu 软件中心并搜索 Emacs。

我得到了 11 个结果,其中一半看起来与 emacs 无关或使用荷兰语。然后,有 5 个结果看起来可信,但几乎没有任何评论和糟糕的文档。所以,我无法知道哪个是真正的 Emacs,或者它是否是我想要的。

我说我想我会使用命令行。在这里,我再次得到了 8 个结果。至少这里有 6 个实际上在名称中提到了 emacs,但无法知道哪个是真正的 emacs。

我知道,缺乏依赖性问题并且知道它对您的操作系统来说是正确的,这是很大的好处。

但是这有什么比进入浏览器、搜索 Emacs、找到下载页面、单击适用于我的操作系统的页面并放手更好的呢?这样我就知道它是我想要的,可以看到它的步骤,并且我去过开发人员的网站,所以我知道这个程序的支持和文档如何。

包管理器提供了一些不错的功能,但我认为它们还不足以成为在 Linux 上获取软件的唯一途径。

答案1

为什么软件包管理器如此流行?因为人们不喜欢下载他们想要运行的每个程序的源代码、所有依赖项(包括构建时和运行时)的源代码,然后自己编译它们(这通常需要解决配置设置中的差异,并修补代码本身以使其与您拥有的其他软件包的特定版本兼容)。如果其他人为您编译了程序及其运行时依赖项,并且软件包管理器确定需要为您下载和安装的内容,那就更好了。

从更以 Windows 为中心的角度来看,另一种方法是将其视为“dll hell”。在 Windows 上,您下载程序 A,它使用库 Z。程序 A 的安装程序将库 Z 的副本放在您的系统目录中。然后,您下载程序 B,它也使用库 Z,但版本略有不同。它用其版本替换系统目录中库 Z 的副本。但该版本无法与程序 A 正确配合使用,因此会中断。软件包管理器所做的就是消除这种中断,以及消除两个程序都包含副本的需要(无论是否兼容)。它们会确定每个程序需要哪些库,并安装正确的版本,如果兼容,则替换旧版本,如果不兼容,则安装两个版本。

大多数 Windows 软件都采取了将库 Z 包含在两个程序中并将其安装到自己的私有目录中的方法。这可以避免破坏,但这意味着下载这两个程序需要下载相同的库两次,并且占用更多的磁盘空间和更多的内存,因为它们不共享库,这违背了拥有公共库的初衷。

答案2

不使用包管理器,通常很难找到一个可以在 Linux 系统上运行的预编译二进制文件。Linux 的种类实在是太多了。

在 Windows 上,您可以找到一个可以运行的预编译二进制文件,因为 Windows 由一家公司控制,因此它相对单一且一致。不同 Windows 机器之间唯一的不同就是它运行的 Windows 版本,也许还有服务包。

但 Linux 的多样性要大得多。任何人都可以创建自己的发行版,许多个人和团体都这样做了。有数百种发行版,从流行的到鲜为人知的;从通用的到高度专业的。没有人可以编译出一个可以与所有这些发行版兼容的二进制文件。

因此,需要软件包管理器。发行版的创建者非常熟悉该发行版的组件,他们会将软件打包以与这些组件配合使用。他们会设置依赖关系并识别冲突。他们随时准备处理出现的任何问题,只要这些问题出现在他们自己的发行版上。他们会跟上上游的变化。他们会处理因自己的错误而产生的错误报告,并将其余的问题传递给上游。

你不需要当然,使用这些服务是免费的。您可以随时下载源码包并自行编译。这样做至少一次是值得的,这样可以了解软件打包的复杂性。维护人员做了很多工作来让最终用户轻松使用。不要低估他们的工作。

如果你在 Ubuntu 上找不到合适的软件包,我建议你寻求帮助询问 Ubuntu

答案3

在安装从互联网上下载的软件之前,请先检查软件包管理器,看看发行版的默认软件存储库中是否有相同的软件。从不受信任的来源安装软件是破坏操作系统的最简单方法。

Linux 中的软件包管理器旨在自动解决依赖性问题,并尽可能简化软件的选择。但是,它限制了用户的选择自由,只能提供软件存储库中所有软件包的最新版本。对于 Emacs,您可能会看到 GNU Emacs 24 以及一些旧版本的 Emacs,但选择最新的 GUI 版本的 Emacs 并安装该版本是一种安全的选择。通常,软件包的 GUI 版本将在软件包管理器中软件包描述的左侧有一个漂亮的图标,以直观地提示您它是 GUI 版本。

对于新用户来说,使用软件包管理器是选择要安装的软件包的最佳方式。从终端安装软件包为用户提供了更多选择,但这可能会让新用户感到困惑。

由于您是新用户,我还想就使用 Emacs 提出一些建议。Emacs 具有一些我默认软件存储库中的其他文本编辑器所没有的功能,而安装 Emacs 是我获得具有这些功能的文本编辑器的最简单方法。我通常只使用 Emacs 独有的两个功能,因此当我需要使用这些功能时,我会使用 Emacs,否则我会使用更用户友好的文本编辑器。Emacs 非常可定制,我已经定制了我的 Emacs,以便更轻松地完成我通常在 Emacs 中执行的任务。

答案4

包管理器的另一个论点是额外的安全和质量屏障和措施这增加了。

没有包管理器你需要

  • 信任下载源。有些假冒网站和下载主机会在安装所需软件的同时添加/安装令人讨厌或有害的第三方广告软件/垃圾软件。对于没有经验的用户来说,识别官方软件制造商网站通常并不是一件容易的事。
  • 检查与您的操作系统版本的兼容性。此外,Windows 会随着时间推移而开发和更改其 API,并且有大量软件没有及时更新,无法在最新的 Windows 上完全正常运行,或者反过来,它与可能仍在使用的旧 Windows 版本失去兼容性。如前所述,更加流畅和多样化的 Linux 发行版世界为这一论点增添了重要分量。
  • 软件安全的信任/审查也就是说,它不会损害您的系统安全或隐私,甚至不会破坏您的系统。即使是广为人知且广泛使用的软件也可能不像人们想象的那么无害,未经询问就发送使用数据、打开网络端口、通过安装程序添加防火墙排除、使用不安全的传输协议等。发行版维护者会审查他们添加到其存储库的所有软件(以及每个版本),添加合理的默认配置,以防守护程序/服务沙盒规则、AppArmor/SELinux 规则(如果需要)等。
  • 信任/审查软件的好处和承诺即它增加了您期望的价值或其制造商所说的价值。我不想在这里发表太多个人意见,只想在这里提到 RAM/注册表/系统优化器/清理器以及倾向于添加此类功能的 AV/防火墙软件,甚至工具栏等。您可能不会在 Linux 发行版存储库中找到没有真正增加价值的软件,否则可能会破坏您的系统。

当使用包管理器来管理您的存储库时,您可以确信您获得了正确的软件,该软件已经过审查或明确构建/配置,以与您的发行版完全兼容,不会损害您的安全或隐私(至少在默认设置下),并且具有真正的好处,兑现其承诺,而不会添加广告或其他不必要的副作用。

从理论上讲,FOSS 可以降低上述某些风险,因为代码可以被审查,顺便说一句,这在很大程度上是由 Linux 发行版维护人员在寻找实现方式或报告错误时完成的。Linux 发行版通常会明确区分 FOSS、非免费开源和闭源 blob,因此在使用包管理器时,尽可能地坚持使用 FOSS 软件会容易得多。

相关内容