为什么 Ubuntu 存储库没有最新版本的软件?

Tho*_*ard 170 package-management repository release-management

为什么官方 Ubuntu 存储库中的软件包比来自 Debian Sid、PPA、作者等的最新(上游)版本更旧?

Bru*_*ira 136

一个 Ubuntu 版本在真正作为成品向公众发布之前要经历几个阶段:

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

  • 在发布之前但在包冻结之后,主要完成的工作是修复这些包中可能存在的所有错误和问题。在包或功能冻结后,新的包版本不再导入到存储库中。

  • 一旦发布发生,对这些包的额外更改只会发生在错误修复和安全问题上。即使发布了新版本的软件包,也不再对官方存储库中的软件包进行升级。

  • 某些软件包对此有例外,例如 Web 浏览器(需要始终保持最新状态)或某些情况

新版本的软件包一直在为下一个 Ubuntu 版本导入(从 Debian),直到下一次冻结发生并且相同的过程重复发生。

例如,您可以查看12.04发布时间表

您可以看到,尽管 12.04 于 4 月发布,但在 1 月 12 日发生了名为 _ Debian Import Freeze_ 的事件。

这只是在实际发布之前发生的许多冻结阶段中的第一个阶段,这意味着从 Debian 测试或不稳定的包的导入将停止并开始对它们进行定制和修复问题。

在此之后,许多软件包都不会进行任何升级,并且该软件包当时的版本是在发行版的整个生命周期中存在和维护的版本。

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

这样做是为了稳定性、安全性和功能性。新的出血包一直被导入到主存储库中,这意味着问题和更多的问题需要解决。冻结软件包版本有助于解决这个问题,并使 Ubuntu 对最终用户更安全、更稳定。

Ubuntu 的新版本每 6 个月发布一次,因此每 6 个月准备、测试、定制和发布新版本的新软件包。未来版本的软件包可以通过 PPA 安装在您的系统中,也可以从网站下载,但官方存储库中的软件包版本保持不变。

有关从 10.04 到 12.04 发布期间 Ubuntu 发生的事情的更多理解和有趣概述,请查看ReleaseSchedule - LTS 到 LTS稳定版本更新页面,以获得 Ubuntu 稳定版本的完整概述和解释。

  • 此政策似乎有例外,尤其是对于网络浏览器(Firefox、Chromium)。虽然超过 95% 的软件包可能遵循以下指示,但 Web 浏览器可能是大多数用户最常用的应用程序。 (3认同)

psu*_*usi 19

两个原因。第一个很明显:当新的上游出现时,它需要人花时间更新包。第二个是,如果您运行的是稳定版本而不是当前的开发版本,则故意不更新软件包以避免损坏。请参阅http://wiki.ubuntu.com/StableReleaseUpdates

  • *“当一个新的上游出现时,它需要一个人花时间更新包”*这显然是错误的,一切都可以自动化。真正的原因是你提到的第二个。 (5认同)

Bry*_*yce 17

由于多种原因,软件包在发布时被冻结,并且随后没有更新。如果新版本是在发布后引入的,那么新版本......

  • 可能会带来新的错误,从而使发布时存在的功能退化
  • 需要人力打包、测试、上传
  • 需要自己的一套安全更新
  • 需要对其 UI 进行更新的翻译
  • 需要更新的文档(和翻译)
  • 使技术支持更具挑战性
  • 可能会惹恼已经习惯旧版本功能的用户
  • 可能需要更新的依赖项,如果在存储库中更改它们可能会破坏其他应用程序
  • 可能会破坏依赖于此的其他软件包
  • 可能会破坏为旧版本创建的用户脚本、模板、工具等

尽管如此,请注意,在某些情况下,Ubuntu确实会对存储库中的软件版本进行全面更新。以火狐为例。

此外,还有一个 ubuntu-backports 存储库,用户可以选择哪些更新软件包不会导致上面列出的问题。默认情况下它不启用,因此用户必须选择加入它,这样做是为了消除您的软件从您手中更改出来的惊喜。此外,它的人员配备不多,因此我不确定软件包实际获得更新的频率。

此外,SRU 团队最近更新了一些策略,希望能让只修复错误的软件包更新变得更加简单。


pl1*_*1nk 11

通常,Ubuntu 已发布版本中的更新用于安全性和错误修复,此类错误的示例包括:

  • 在现实情况下可能直接导致安全漏洞的错误。这些由安全团队完成,并记录在 SecurityTeam/UpdateProcedures 中。

  • 代表 Ubuntu 先前版本严重回归的错误。这包括完全无法使用的软件包,例如可卸载或在启动时崩溃。

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

  • 对于长期支持版本,我们经常希望启用新硬件。如果我们可以确保不影响现有硬件的升级,此类更改是适当的。例如,新引入的驱动程序的模式别名不得与以前发布的驱动程序重叠。- Canonical 合作伙伴存档中商业软件的新版本。

    -FTBFS(从源代码构建失败)也可以考虑。请注意,发布过程主要确保没有不是从当前源构建的二进制文件。通常,这些错误应该只与另一个错误修复一起进行 SRU。

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

取自优秀的维基页面StableReleaseUpdates


小智 11

我将尝试根据我过去在 ubuntu 论坛和 ubuntu 星球上的经验来回答您的问题。

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

APT 存储库确实从 Ubuntu 的打包团队获得更新。打包团队从进行初始打包测试和其他事情的开发人员那里获取所有上游包。然后测试团队进行最后的测试,给出一个 go 信号。但是打包团队和测试团队对于依赖关系及其对稳定系统的副作用非常谨慎。

当出现延迟时,是否是因为开发人员尚未将最新版本推送到相关服务器上?

如果你看到上游的变化,有成千上万的开发者想要推送他们的包。但并不是所有的都成功进入主流这是因为各种原因。假设 Gedit 应用程序,2.2 版本适合并与 Dbus 2.1 和 Gtk 2.4 等一起正常工作。而 Gedit 2.4 版本(非常新)需要 Gtk 2.5 和 Dbus2.3 才能工作。现在测试和打包团队(发布团队也)不接受这一点,因为将具有旧 dbus 和 gtk 的现有系统更改为新系统会破坏其他一切。希望你明白了依赖地狱的问题。

开发人员是否需要做更多的工作才能将发布版本转换为存储库可以使用的形式?

不至上行通道。但是到发布渠道是:)。

PS:与上面解释的相比,现在在规范中可能对流程进行了一些更改。但它或多或少是一样的。


Joh*_*ber 6

作为评论发布的链接 fossfreedom 中接受的答案非常好。

通常,在新版本开发过程的第一部分之后发布的软件包版本不会出现在该版本的主要存储库中,因此可以彻底测试可靠的 Ubuntu 版本。

如果某些软件包成功地合并到未来的 Ubuntu 版本中,并且开发人员认为它也适用于较早的版本,您可能会发现一些软件包已发布到 backports 存储库。可以在软件中心激活和停用向后移植(编辑->软件源->更新选项卡->不支持的更新)