软件包名称为何包含版本号?


15

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

例如,

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

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

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

Answers:


26

程序包的命名方式类似于(或曾经)需要简化程序包的两个主要版本之间的过渡的地方,并且这样做所需的时间预计会很长。在过渡期间,新版本和旧版本都将保持可用状态,但前提是将来会停止使用旧版本。

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

有时,这些主要版本更改发生在很久以前,过去,而现在每个人都在使用当前版本。例如,Apache就是这种情况。从兼容性的角度来看,从1.3到2.0的更改远比2.x版本的任何更改都要大得多,因此,一旦每个人都退出1.3,就不再需要在给定的OS版本中继续提供多个Apache版本。但是,一旦大家都使用了该apache2软件包,就没有很好的理由将其重命名为just apache。这将导致不必要的升级麻烦。此外,过去认为暂时需要提供两个并行版本的需求将来可能会再次出现。

这种程序包命名惯例通常仅在库或重要的核心程序包中发生。对于更多外围设备包,预计您将升级到当前版本。

库比应用程序更常使用这种方式,因为从本质上来说,其他软件包也依赖于它们。库越受欢迎,要求完全依赖于它的其他所有软件包都进行重建和重新链接就变得更加不切实际,这样就可以在没有过渡期的情况下将库逐步升级到新的主要版本。

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


3

从我所看到的原因是:

  • 帮助迁移主要版本的软件包:发布PHP 5时,可能需要安装PHP 4。这样一来,您就可以在版本之间进行选择(至少要等到旧版本过时为止)。

  • 继续提供对软件的旧版本的更新(例如,发布Apache 3之后,可能需要对Apache 2进行修补),而无需将其升级到较新的主要版本。

例如,Linux内核(到目前为止)具有稳定的版本 3.5、3.4.7、3.2.24、2.6.35.13等。...如果您在系统上运行2.6.35,并且希望保持其正常运行,到目前为止(但升级此内核),您可以安装适当的软件包。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.