AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 11712
In Process
jldugger
jldugger
Asked: 2009-05-24 16:54:19 +0800 CST2009-05-24 16:54:19 +0800 CST 2009-05-24 16:54:19 +0800 CST

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

  • 772

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

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

linux packaging
  • 10 10 个回答
  • 1487 Views

10 个回答

  • Voted
  1. cletus
    2009-05-24T18:46:09+08:002009-05-24T18:46:09+08:00

    在这个问题上引用Joel Spolsky似乎是合适的:

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

    (重点补充)

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

    • 24
  2. Wayne Koorts
    2009-05-24T17:36:44+08:002009-05-24T17:36:44+08:00

    造成这种情况的原因有很多,一点历史是为了把事情放在眼里。

    请记住,当我们谈论“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 的自由和开放特性,任何人都可以选择它并创建一个符合他们特定口味的捆绑系统。结果是使用了许多不同配置方法的不同流来创建这些系统,这产生了创建几乎与每个系统一样多的不同包管理系统的副作用。

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

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

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

    • 20
  3. iny
    2009-05-25T02:51:43+08:002009-05-25T02:51:43+08:00

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

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

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

    • 9
  4. Paul Tomblin
    2009-05-24T17:32:39+08:002009-05-24T17:32:39+08:00

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

    • 7
  5. amh
    2009-05-31T10:02:59+08:002009-05-31T10:02:59+08:00

    去.deb :-)

    • 4
  6. wazoox
    2009-07-17T05:05:26+08:002009-07-17T05:05:26+08:00

    有几种暂定格式,例如zero-install和autopackage。不幸的是,没有人获得任何牵引力。

    • 2
  7. Kamil Kisiel
    2009-08-28T15:03:28+08:002009-08-28T15:03:28+08:00

    我认为 cletus、Wayne 和 iny 很好地回答了这个问题。我真的想补充一点,这不是什么大不了的事。我在一个混合环境中工作,我们有 Gentoo(portage)、SUSE(rpm/zypper)和 OpenBSD(包和端口)。在其中任何一个上安装软件包并不困难,而且我并不关心它们使用什么格式。

    从打包软件的角度来看,也不是很困难。无论是基于 RPM 的发行版 Gentoo,还是基于 deb 的发行版,它实际上都归结为拥有构建软件和添加一些元数据的配方。如果您尝试打包的构建系统并非完全疯狂,通常只需要编写一个美化的 shell 脚本来创建一个包。

    • 2
  8. Jason Tan
    2009-05-31T09:14:29+08:002009-05-31T09:14:29+08:00

    好吧,tar 球中总是有静态编译的二进制文件.... ;-)

    • 1
  9. lee
    2009-08-28T11:31:34+08:002009-08-28T11:31:34+08:00

    “Linux”没有标准二进制接口的定义,因为它只是一个内核。很可能您的软件堆栈需要与内核以外的接口进行交互,这对在数百个不同的源代码树之间维护标准 ABI 提出了特殊挑战。

    关于优秀的打包工具,我更喜欢 Debian GNU/Linux,因为它具有出色的二进制打包格式。它满足了我对标准工具和应用程序的 90% 的需求。由于包含非自由组件或有缺陷的共享库依赖项,其余 10% 是从源代码构建的。当需要部署这些应用程序时,我会为生产集群构建自定义二进制文件。

    • 1
  10. user5746
    2011-09-18T13:11:11+08:002011-09-18T13:11:11+08:00

    要获得一次构建,随处运行的包格式,而不强迫每个人使用相同的发行版,您需要几个重要功能:

    • 全局唯一的包命名,使两个人/发行版不能独立创建具有相同名称的不同包。

    • 当包有冲突的要求时并行安装不同版本的库的能力。发行版可以决定使用每个库的哪个版本,并强制所有包使用该版本。跨发行版工作的系统必须更加灵活。

    零安装提供以下两个功能:

    • 名称是 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/Decentralised-Installation-Systems

    [注:我是 0install 开发人员]

    • 1

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve