为什么Ubuntu软件包的版本号与其他领域的版本号不一致呢?

Ubuntu版本号与其他空间不匹配,而且不清楚为什么它们不匹配或者它们是如何工作的。
例如,有openSSL 1.0.1n和1.0.1f-1ubuntu9.8。
这是什么原因?版本号中的ubuntu部分代表什么意思?我不是在问为什么1.0.1n还没有发布,我是在问为什么相当于安全补丁的版本有一个无法比较的名称。

可能还有这个网址 http://askubuntu.com/questions/100852/why-ubuntu-sources-are-different-to-the-originals/,以及这个网址 http://askubuntu.com/questions/26507/whats-the-significance-of-0ubuntu1-at-the-end-of-a-package-version-string/26508?s=2|0.3074#26508。 - muru
1个回答

如您所知,Ubuntu是Debian的一个分支。这意味着每个Ubuntu版本都有很多软件包来自于该Ubuntu版本所基于的Debian版本。尾缀命名用于跟踪软件包的历史。
  • 1.0.1f:这是软件包中包含的OpenSSL版本;
  • 1:这是软件包的Debian版本;0表示该软件包在Debian中不存在,并且该软件包是由Canonical添加到Ubuntu中的;如果没有,则表示该软件包是由Debian本身添加的,而不是从上游派生而来;
  • ubuntu:这表示该软件包已从软件包的Debian版本进行了更新;如果没有,则表示该软件包未从软件包的Debian版本进行更新(即直接包含了Debian软件包而没有进行修改);
  • 9.8:这是Ubuntu软件包的版本。
所以openssl-1.0.1f-1ubuntu9.8openssl Ubuntu软件包的版本9.8,它基于openssl Debian软件包的版本1,并且包含OpenSSL 1.0.1f。
您可以在这里找到有关Debian软件包版本编号的更多信息here,或者通过运行命令man 5 deb-version来获取更多信息。

2所有这些都在man 5 deb-version中有详细描述。 - muru
1Debian版本(即“1”)是可选的,并且在某些情况下不会出现,例如当软件包来自Debian本身而不是从上游接收时。关于添加“ubuntu”后缀的部分没有在man 5 deb-version中描述。我假设如果没有Debian版本,仍然会在“ubuntu”之前有一个连字符。 - thomasrutter
所以没有办法直接进行比较,比如安全更新方面的比较? - Vynce
2@Vynce 不对。请阅读更新日志。 - muru
@thomasrutter 谢谢,我已经提到10是可选的;我猜这是因为man 5 deb-version的目的是描述Debian软件包的版本编号,而不是Ubuntu软件包的版本编号。 - kos
1@thomasrutter 根据manpage的定义,ubuntuX后缀仍然是debian修订版本字段的一部分,无论Debian是否发布了修订版本,都必须在其前面加上连字符。 - muru
2@Vynce,APT使用了一个明确定义的算法来比较两个版本字符串,以确定哪个是“更新”的版本。大部分情况下,它按照字母顺序进行排序,但也会特殊处理数字和“~”字符等其他情况。然而,一个版本被认为是“更新”的,并不总是意味着它修复了更多的漏洞,正如muru所说,你需要阅读变更日志。当然,如果你的sources.list中有常见的软件源,Debian/Ubuntu会始终确保你的软件包管理器不会从一个更好的版本更新到一个更差的版本,这是根据政策规定的。 - thomasrutter