为什么包名包含版本号?

Tom*_*nal 15 aptitude version apt package-management

在使用 Ubuntu 和其他基于 Debian 的发行版时,我注意到软件存储库中的软件包通常包含主要版本号。

例如,

  • 阿帕奇: apache2
  • 雄猫: tomcat7
  • PHP: php5
  • 葡萄酒: wine1.4
  • MySQL: mysql-server-5.5

但是我注意到没有apache1可用的包,其余的类似。如果软件包的名称随着软件的更新而改变,这是否会妨碍软件包管理的主要目标之一(轻松升级)?

如果明天 Apache 3 发布,apache3如果我想升级,我是否必须手动安装该软件包?`

War*_*ung 26

软件包的命名方式是这样的:需要(或曾经)需要简化软件包的两个主要版本之间的转换,并且预计这样做所需的时间会很长。在过渡期间,新旧版本均保持可用,但有一项理解是,旧版本将在未来某个时间停止使用。

有时,过渡期发生在您当前使用的系统版本期间。对于某些软件包,这种情况经常发生,以至于您可以期望在每个新系统版本中看到过渡软件包版本。软件开发工具通常属于这一类,因为在与系统发布相同的时间表上升级到新工具可能不切实际。我公司对特定版本的 GCC、Autoconf 和 Perl 的依赖可能是 5 年的周期,而我的操作系统可能是 3 年的升级周期。因此,如果新操作系统包含我的某些软件包的旧版本以及开发新操作系统时的当前版本,则它使我更容易采用新操作系统。

其他时候,这些主要的版本变化发生在很久以前,过去,现在每个人都在当前版本上。例如,Apache 就是这种情况。从兼容性的角度来看,1.3 到 2.0 的变化比任何 2.x 版本的变化都要大得多,所以一旦每个人都离开 1.3,就不再需要在给定的操作系统版本中继续提供多个 Apache 版本。但是,一旦您让每个人都使用该apache2包,将其重命名为apache. 这会导致不必要的升级麻烦。此外,在过去认为需要暂时提供两个并行版本的地方,将来可能会再次出现这种需要。

这种包命名实践通常只发生在库或重要的核心包中。对于更多外设包,您只需要升级到当前的任何包即可。

与应用程序相比,库更常以这种方式处理,因为就其性质而言,其他包依赖于它们。一个库越流行,要求依赖它的所有其他包都被重建并重新链接到它的纯粹是这样的,这样库可以在没有这个过渡期的情况下逐步升级到新的主要版本,就越不切实际。

通常以这种方式对待应用程序是因为它包含一个库元素。例如,Apache 不仅仅是一个 Web 服务器,它还为插件提供了一个开发 API。(mod_foo等等。)如果有人有一个mod_something针对 Apache 1.3 插件 ABI的旧链接并且没有升级它以使用较新的 2.0 API,那么如果您的操作系统继续提供旧的 Apache 1.3 直到所有插件创建者都有机会,这很方便更新他们的插件。