供应商二进制软件包格式的选择似乎由某种形式的墨菲定律决定:您不使用的所有发行版都具有软件包。(Corralary:不存在满足您软件堆栈的分发依赖关系的分发)。
这是政治问题还是更深层次的问题,而我们还没有看到“一次构建,可以在任何地方运行”软件包格式的出现?
供应商二进制软件包格式的选择似乎由某种形式的墨菲定律决定:您不使用的所有发行版都具有软件包。(Corralary:不存在满足您软件堆栈的分发依赖关系的分发)。
这是政治问题还是更深层次的问题,而我们还没有看到“一次构建,可以在任何地方运行”软件包格式的出现?
Answers:
在这一点上引用Joel Spolsky似乎是适当的:
(顺便说一下,对于那些遵循神秘但带有政治色彩的博客联合供稿格式的人来说,您会发现那里发生了同样的事情。RSS变得支离破碎,有几种不同的版本,不正确的规范和许多政治斗争,尝试通过创建另一种称为Atom的格式来清理所有内容的结果导致出现了几种不同版本的RSS和一种版本的Atom,不准确的规范以及许多政治斗争。当您尝试通过创建第三种替代方案来统一两个对立的力量时,最终会受到三种相反的力量的影响。您还没有统一任何东西,也没有真正固定任何东西。)
(添加了重点)
您拥有(至少)两个用于Linux的打包系统。这实际上是一件好事。单个系统将简单地创建第三个系统。
造成这种情况的原因有很多,为了使事情更加清晰,需要一些历史。
请记住,当我们谈论“ Linux”时,我们通常指的是许多不同的Linux发行版之一。“ Linux”实际上只是一个操作系统内核。
Linux的最初目标是创建一个可在PC(最初为386)上运行的基于Unix的系统。第一步是创建内核本身。当Linus Torvalds在内核上工作时,Richard Stallman在GNU(GNU的非Unix)项目下开发自己的Free Unix系统。简而言之,这两者在某种程度上融合在一起,因为GNU具有相关的实用程序(C编译器/库/构建工具,shell,文本编辑器等),但是没有运行该程序的核心,而Linux具有该程序的核心但没有实用程序在它上面运行以使其对大众有用。
这种融合在某种程度上被正式称为GNU / Linux。您将看到,许多发行版仍将自己称为GNU / Linux发行版。
由于GNU / Linux的自由和开放性,因此任何人都可以选择它并创建符合他们特定口味的捆绑系统。结果是,使用了许多不同的,采用不同配置方法的流来创建这些系统,这具有创建几乎相同数量的不同软件包管理系统以适合每个系统的副作用。
多年来,每个不同的完整系统都有其自己的强大追随者,他们始终坚持不懈,形成了今天的今天:少数广泛使用,根深蒂固且稳定的软件包管理系统,例如RPM,APT / dpkg和Gentoo的Portage。
有一些项目,例如Autopackage,正在尝试解决该问题,但是各种受支持的软件包管理系统的不断发展意味着有许多需要遵循的目标。
一些软件供应商最终要做的是将他们所需的特定二进制文件和依赖项副本捆绑到一个可以在特定系统上工作的大型软件包中。
无论如何,使用相同的软件包格式将无济于事。您只是不能在其他发行版中使用相同的软件包。您甚至不能经常在同一发行版的不同版本中使用它。甚至构建软件包也可能遇到相同的问题。
要安装软件包,您需要满足在构建软件包期间形成的依赖关系。要构建软件包,您需要满足构建依赖性。这些事情发生了变化。为了能够实施更改,仅支持您可以修改以在更改后工作的程序包更容易。
如果所有依赖项都相同,则不会是不同的发行版或同一发行版的不同版本。
我认为有些“这里没有发明综合症”。Debian的打包系统早于RedHat,但是它在许多方面都比较出色,但是您永远不会看到RedHat切换。取而代之的是,您看到许多人在使用“ apt-rpm”,试图为您提供apt和rpm文件的一些优点。
有几种尝试性格式,例如zero-install和autopackage。不幸的是,没有人获得任何吸引力。
我认为克莱特斯,韦恩和伊尼对此回答很好。我真的想补充一下,这没什么大不了的。我在混合环境中工作,其中有Gentoo(端口),SUSE(rpm / zypper)和OpenBSD(程序包和端口)。在其中任何一个上安装软件包并不困难,我也不在乎它们使用什么格式。
从打包软件的角度来看,这也不是很难。无论是Gentoo,基于RPM的发行版还是基于deb的发行版,它实际上都归结为用于构建软件和添加一些元数据的配方。如果您要打包的构建系统不是完全疯狂,通常只需要编写一个美化的shell脚本即可创建一个包。
嗯,在tar球中总是有静态编译的二进制文件。...;-)
要一次构建,可以在任何地方运行包格式,而不必强迫每个人使用相同的发行版,您需要几个重要的功能:
全局唯一的软件包命名,这样两个人/发行人就不能独立地创建具有相同名称的不同软件包。
当软件包有冲突的要求时,可以并行安装不同版本的库。发行版可以决定要使用每个库的版本,并强制所有软件包使用该版本。跨发行版运行的系统必须更加灵活。
零安装提供这两个功能:
名称是URI(例如http://rox.sourceforge.net/2005/interfaces/ROX-Filer)。默认情况下,只有域的所有者才能在该命名空间内创建包。
每个软件包的每个版本都位于其自己的目录中。每个应用程序仅能看到所需的库以及兼容的版本。
例如,Edit应用程序依赖于Python <3,如下所示:
<command name="run" path="Edit/AppRun">
<runner interface="http://repo.roscidus.com/python/python">
<version before="3"/>
</runner>
</command>
另请参阅:http : //www.osnews.com/story/16956/Decentralized-Installation-Systems
[注意:我是0install开发人员]