为什么Ubuntu软件源没有最新版本的软件?

为什么官方Ubuntu软件仓库中的软件版本比Debian Sid、PPAs、作者等提供的最新版本要旧?

3这实际上适用于任何发行版,而不仅仅是Ubuntu。 - dr_
12@dr01 有一些发行版是滚动更新的,它们始终会得到更新。因此,并不是所有的发行版都符合这个问题或者 Ubuntu 的开发周期。 - Thomas Ward
6个回答

在 Ubuntu 发布为最终产品之前,它会经历几个阶段:

  • Ubuntu 在发布之前的某个时间点会冻结其软件包。

  • 在发布之前但软件包冻结之后,主要进行修复软件包中可能存在的所有错误和问题的工作。不再将新的软件包版本导入到存储库中,因为已经冻结了软件包或功能。

  • 一旦发布完成,对这些软件包的进一步更改只能用于修复错误和安全问题。即使有新版本的软件包发布,官方存储库中的软件包也不再进行升级。

  • 某些软件包有例外情况,例如网络浏览器(需要始终保持更新)或 特定情况

为下一个 Ubuntu 版本,新版本的软件包会持续被导入(来自 Debian),直到下一次冻结发生并重复相同的过程。

作为一个例子,你可以看一下12.04版本的发布计划

你会发现尽管12.04是在四月发布的,在一月的时候发生了一个叫做_Debian引入冻结_的事件。

这只是实际发布之前的许多冻结阶段中的第一个阶段,意味着在那个时候,从Debian测试或不稳定版导入软件包的工作停止,并开始对其进行定制和修复问题。

在此之后,很多软件包将不再进行升级,而该软件包在那个时点的版本将在发布的整个生命周期内得到维护。

因此,即使在开发人员的PPAs或Ubuntu+1存储库中有相同软件包的更高版本 ,这些版本只会包含在下一个Ubuntu版本中。

这样做是为了稳定性、安全性和功能性。不断将新的“躁动”软件包导入主要存储库会导致问题,并增加解决问题的复杂度。软件包版本的冻结有助于解决这个问题,使Ubuntu对最终用户更加安全和稳定。

每6个月都会发布一个新版本的Ubuntu,因此每6个月都会准备、测试、定制和发布新版本的软件包。将来版本的软件包可以通过PPA(个人软件包档案)或从网站下载来安装到您的系统中,但官方软件仓库中的软件包版本保持不变。
为了更好地理解Ubuntu从10.04到12.04发布之间发生的情况,可以查看ReleaseSchedule - LTS to LTS以及Stable Release Updates page,获取关于Ubuntu稳定版本发布的完整概述和解释。

4这个政策似乎有一些例外,尤其是对于网络浏览器(Firefox、Chromium)而言。虽然超过95%的软件包可能会遵循下面的指示,但对于大多数用户来说,网络浏览器可能是最常用的应用程序。 - dotpush
如果你想要最新的软件,可以使用Launchpad PPA仓库。 - iBug
@iBug 或者使用其他发行版,例如 Arch LinuxNixOS,或在您的 Ubuntu 系统上安装 Homebrew - user677955
1@Bruno Pereira "工作主要是为了修复那些软件包中可能存在的所有错误和问题"通常新版本会尝试修复错误。当软件包被冻结但当前版本存在错误时,可以采取什么措施呢? - Fractale
这是一篇有趣的阅读。我注意到在Ubuntu 20.04 LTS上,更新了我的软件包之后,我仍然使用的是Python 3.8.5而不是根据维基百科所说的最新稳定版本3.9.1。最终我找到了这个答案。它大部分回答了我的问题(Ubuntu冻结软件包,因此Python在20.04上被冻结在3.8),但还有一件事对我来说仍然不清楚。这个政策只影响LTS版本吗?使用Ubuntu作为开发环境的开发人员能否通过使用非LTS版本获得最新稳定版本的软件,比如Python?或者我们需要使用PPA/从源代码安装? - Matt Welke
这并不适用于所有的包裹。 - acgbox

有两个原因。第一个原因非常明显:当新的上游版本发布时,需要人工花时间更新软件包。第二个原因是,如果你正在运行一个稳定版本而不是当前的开发版本,为了避免出现问题,软件包故意不会随意更新。请参考http://wiki.ubuntu.com/StableReleaseUpdates

7"它需要人类花时间更新包,当新的上游版本发布时"这显然是错误的,一切都可以自动化。真正的原因是你提到的第二个原因。" - gented
1@gented 不是虚假的,只有在上游提供准确的打包时才能自动化。许多(大多数?)上游项目不包括Debian/Ubuntu的打包,需要人工制作,更新软件包依赖关系、描述、补丁以及自上次发布以来的任何打包格式更改。如果Debian已经完成了这些工作,那么“从Debian导入”可以自动化,但在大多数情况下,Ubuntu或Debian之前的上游新软件包仍然需要人工参与。 - byteit101

软件包在发布后冻结,并且出于多种原因不会随后更新。如果在发布后引入新版本,则可能会带来新的错误,从而导致发布时存在的功能退化。此外,需要人力来打包、测试和上传新版本,还需要进行安全更新、界面翻译和文档更新(以及翻译)。这样做会增加技术支持的难度,可能会惹恼已经习惯了旧版本功能的用户。此外,如果仓库中的依赖项发生更改,新版本可能需要较新的依赖项,这可能会破坏其他应用程序。它还可能破坏依赖于该软件包的其他软件包,以及为旧版本创建的用户脚本、模板和工具等。尽管如此,请注意,Ubuntu确实有一些情况下会对软件版本进行完整更新,例如Firefox。
此外,还有一个 Ubuntu 后备软件库供用户选择,该库会更新软件包,但不会引起上述问题。它默认情况下是未启用的,因此用户必须选择加入其中,这样做是为了避免软件在您不知情的情况下发生变化的惊喜。另外,由于人员配置不足,我不确定软件包实际上有多频繁地进行更新。
此外,SRU 团队最近对政策进行了一些更新,希望能够更简单地获取仅包含错误修复的软件包更新。

通常,Ubuntu发布版本的更新主要是为了安全和错误修复。这些错误包括以下几个例子:
  • 在现实情况下可能直接导致安全漏洞的错误。这些由安全团队完成,并在SecurityTeam/UpdateProcedures中有记录。

  • 与之前版本的Ubuntu相比,表示严重退化的错误。包括完全无法使用的软件包,例如无法卸载或启动时崩溃。

  • 在现实情况下可能直接导致用户数据丢失的错误。 不符合上述类别的错误,但是(1)有明显安全补丁并且(2)影响应用程序而不是关键基础设施软件包(如X.org或内核)。

  • 对于长期支持版本,我们经常希望启用新硬件。只要我们能确保不影响现有硬件的升级,这样的更改就是合适的。例如,新引入的驱动程序的模块别名不能与先前发布的驱动程序重叠。 -在Canonical合作伙伴存档中的商业软件的新版本。

    -FTBFS(无法从源代码构建)也可以考虑。请注意,在主要版本中,发布过程确保没有从当前源代码构建的二进制文件。通常,这些错误应该与其他错误修复一起进行SRU。

    -对于提供新功能但不修复关键错误的软件包的新上游版本,应该请求进行后移。

从优秀的维基页面稳定版本更新中提取。

我将尝试根据我在Ubuntu论坛和Ubuntu Planet的过去经验来回答您的问题。

我想知道apt存储库是如何更新的,由谁更新。

APT存储库是由Ubuntu的打包团队进行更新的。打包团队从开发人员那里获取所有上游软件包,并进行初始打包测试和其他操作。然后测试团队进行最终测试并发出信号。但是,打包团队和测试团队非常谨慎地处理依赖关系及其对稳定系统的副作用。

当出现滞后时,是因为开发人员没有将最新版本推送到相关服务器吗?

如果你看到上游的变化,会发现有成千上万的开发者想要推送他们的软件包。但并不是所有的软件包都能成功进入主流,这是因为各种原因。以Gedit应用程序为例,2.2版本适用于并且与Dbus 2.1和Gtk 2.4等版本良好兼容。而Gedit 2.4版本(非常新)需要Gtk 2.5和Dbus 2.3才能正常工作。现在测试和打包团队(发布团队也是如此)不接受这个版本,因为将旧的dbus和gtk更换为新的版本会破坏其他一切。希望你明白依赖地狱的问题所在。 开发者在将发布版本整理成仓库可用形式时是否需要做更多的工作? 对于上游渠道来说不需要,但对于发布渠道来说是的 :). 附注:现在在Canonical中可能对该过程进行了一些修改,但基本上还是一样。

在fossfreedom发布的评论链接中,被接受的答案非常好。
一般来说,在新版本开发过程的第一部分之后发布的软件包版本不会出现在该版本的主要软件源中,以便对可靠的Ubuntu版本进行彻底测试。
如果某些软件包成功地纳入了未来的Ubuntu版本,并且开发人员认为它也适用于早期版本,那么这些软件包可能会发布到后备软件源。可以在软件中心中激活和停用后备软件源(编辑->软件源->更新选项卡->不支持的更新)。

1如前所述,回溯版本是不常见的,且数量有限。 - Thomas Ward