我以前也说过最精简化发行版其实也是这个理念,并不是不让你提供,而是你要针对用户的不同需要要去别提供,微软的 Windows 这么多年也不是只有一个版本。不同的要求需要不同的软件包组合,这个组合的最小化重合,才是你应该作为基础的发行版。你不能强制一个跑服务器的 Linux 装游戏,同时你也不能让一个为了玩游戏的 Linux 去放弃安装 X 。
但是为了上面的选择,你可能会无法确定系统的软件包组成,因为可能到头来,你发现可能你就只能确定有限的几个包。这个时候才是你发挥软件包集成的时候,你需要根据大多数用户的习惯,提供一些可以尽可能覆盖常用功能的软件包组成最基本的发行版集成的软件系列。但因为前面的要求,你就又不能一大堆的全集成进来。
这个时候,你就又要回到依赖的问题上了。一个提供某个功能的软件可能有多种接口选择,但有可能某些更好的功能实现,你竟然 nodeps 编译而导致你的软件包并没有打开这个功能。你能说这是错误的依赖,应该彻底放弃?就说 php 吧,同时支持那么多的数据库接口,你选择哪个?sqlite ?mysql ?oracle ?你能为你的用户作决定么?你不能,因为你的用户也不能绝对确定。还有例子比如 mplayer ,你到底提供不提供 VCD 的播放功能?ffmpeg 作为系统解码器库,那么多解码器是否全都打开?
至于 rpm 的依赖问题,这还要分自动依赖和手动依赖。
rpm 的自动依赖是保证程序可以运行的基础,你不希望你的用户在运行软件时莫名其妙的根本不运行,结果你检查发现其实是提示没有找到某个 so 吧?没有了自动依赖,你的发行版可能会忘了加入 glibc 这个库。
手动依赖,更多的是上面的功能支持选择。这个软件提供附加的功能,对于一个开源的可以利用别人的劳动果实的软件环境,难道也要自己去写?自然是调用别人了,但你怎么确定这个软件的功能依赖?自动依赖是基于 so 调用的。这个时候自然就需要手动依赖了。
其次,手动依赖也有很多其他的用处。比如 KDE 依赖不依赖 xorg-server ? smplayer 依赖不依赖 mplayer ?他们就是典型的没有 so 调用的依赖。这都需要去手动依赖。
rpm 的自动依赖是帮你解决硬性指标,弹性指标的选择才是一个发行版制作者需要考虑的。
依赖根本就不是准绳,而是你应该考虑的两部分。一部分是整个软件系统是否可以正常运行,另一部分是软件的功能确定。而这两部分恰恰是一个发行版制作者应该去作的事情,而不是仅仅的把一堆软件包放在一起就能解决的。
打破依赖的最好办法其实就是你干脆作 SP3 的时候,就别把 glibc 放进去,这东西根本没用。
你最好去看看你之前的帖子,发行版等等的东西。你看看是不是有很多问题都是因为不管依赖而导致的。
我之前尝试做 mips 的 mgc ,用 nodeps 来编译很多软件包都是没办法编译成功的。我觉得你有必要从 LFS 开始重新完整搭建一个 mgc 了,你可以很明白的知道自动依赖的根源,手动依赖的作用。
或者,你应该装一套 Gentoo 。明白每个 USE 的变化会带来什么。安装软件时,看看 Gentoo 输出的 dep tree 。感受 gentoo 工具中 revdep-rebuild 的意义。Gentoo 的依赖关系整理的是最好的,arch 和 debian 安装 DE 时,似乎都不会提示安装 xorg-server 的。