为什么 Linux 开发者不能创建一个通用的打包格式?

jld*_*ger 14 linux packaging

供应商二进制包格式选择似乎由墨菲定律的一种形式决定:您使用的所有发行版都有包。(警告:不存在满足您的软件堆栈的分发依赖性的分发)。

这是政治问题,还是更深层次的问题,我们还没有看到“一次构建,随处运行”包格式的出现?

cle*_*tus 24

在这一点上引用乔尔·斯波尔斯基的话似乎很合适:

(顺便说一句,对于那些追随神秘但充满政治色彩的博客联合提要格式世界的人来说,你会看到同样的事情发生在那里。RSS 变得支离破碎,有几个不同的版本、不准确的规范和大量的政治斗争,尝试通过创建另一种称为 Atom 的格式来清理所有内容,这导致了多个不同版本的 RSS 和一个版本的 Atom、不准确的规范和大量政治斗争。当您尝试通过创建第三种替代方案来统一两种对立的力量时,你只是最终形成了三个对立的力量。你没有统一任何东西,也没有真正解决任何问题。)

(强调)

你(至少)有两个 Linux 打包系统。这其实是一件好事。单个系统将简单地创建第三个系统。

  • 回复:*当您尝试通过创建第三个替代方案来统一两个对立的力量时,您最终只会得到三个对立的力量。* **另请参阅**:http://xkcd.com/927/ (2认同)

Way*_*rts 20

造成这种情况的原因有很多,一点历史是为了正确看待事情。

请记住,当我们谈论“Linux”时,我们通常指的是许多不同的Linux 发行版之一。“Linux”实际上只是一个操作系统内核。

Linux 的最初目标是创建一个可以在 PC(最初是 386)上运行的基于 Unix 的系统。第一步是创建内核本身。当Linus Torvalds在内核上工作时,Richard Stallman正在他自己的Free Unix 系统上工作,在GNU (GNU's Not Unix) 项目下。长话短说,两者有些融合,因为 GNU 有相关的实用程序(C 编译器/库/构建工具、shell、文本编辑器等)但没有运行它的核心,而 Linux 有核心但没有实用程序在它之上运行,使其对大众有用。

这种融合在某种程度上被正式称为 GNU/Linux。您会看到许多发行版仍然称自己为 GNU/Linux 发行版。

由于 GNU/Linux 的自由和开放特性,任何人都可以选择它并根据自己的特定喜好创建捆绑系统。结果是使用不同配置方法的许多不同流来创建这些系统,这产生了创建几乎相同数量的不同包管理系统以适应每个系统的副作用。

每个不同的完整系统都有自己强大的追随者,多年来一直坚持使用它们,导致我们今天拥有:少数广泛使用、根深蒂固且稳定的包管理系统,如RPMAPT / dpkg和 Gentoo 的Portage

有一些项目,例如Autopackage试图解决这个问题,但是各种支持的包管理系统的不断发展意味着有许多移动的目标可以遵循。

一些软件供应商最终做的是将他们需要的特定二进制文件和依赖项的副本捆绑到一个可以在特定系统上运行的大包中。

  • 还有比这更多的东西。即使整个世界都统一在 rpm 上,您仍然不会拥有一次包,可以在 OP 设想的任何世界运行。包在很大程度上是特定于其发行版的,因为它们依赖于所有其他包。拥有“一次打包,随处运行”世界的唯一方法是不仅拥有一个打包系统,而且只有一个发行版。 (8认同)

iny*_*iny 9

无论如何,拥有相同的包格式也无济于事。您不能在其他发行版中使用相同的包。您甚至不能经常在同一发行版的不同版本中使用它。甚至构建包也可能有同样的问题。

要安装包,您需要满足在构建包期间形成的依赖项。要构建包,您需要满足构建依赖项。而这些事情会发生变化。为了能够实现更改,更容易仅支持您可以在更改后修改的包。

如果所有依赖项都相同,则不会是不同的发行版或同一发行版的不同版本。

  • 难道不能版本库并使用版本依赖来解决您提到的问题吗? (4认同)

Pau*_*lin 7

我认为有一点“不是在这里发明的综合症”。Debian 的打包系统早于 RedHat,但它在许多方面都更胜一筹,但您永远不会看到 RedHat 切换。相反,您会看到很多人使用“apt-rpm”,试图为您提供 apt 与 rpm 文件的一些优点。

  • apt-rpm 已经死了很长一段时间(最后一次发布是在 1.5 年前),现在大多数人已经开始使用 yum。Yum 本身提供了很多不错的功能,这些功能比 apt 的产品更出色。 (4认同)
  • 实际上,.deb 和 .rpm 包格式在技术上差不多(但是,IMO .deb 具有更好的依赖处理,尤其是版本化依赖、提供、冲突和虚拟包)。apt-get 是技术层面上的亮点,但*真正*使 debian 的软件包脱颖而出的是一组明确定义的开发人员政策,这些政策设置了软件包必须遵守的标准。ubuntu 包在很大程度上继承了这一点,ubuntu 也继承了随之而来的开发者文化。 (3认同)

amh*_*amh 5

就去 .deb :-)