谷歌内部使用了许多不同的操作系统平台,其中包括 Linux。15 多年前,谷歌选择基于 Ubuntu LTS 构建内部 Linux 发行版 Goobuntu,主要是看中了 Ubuntu 具备用户友好、易于使用的特性,以及提供了许多优秀功能。此外,LTS 会获得 Canonical 提供 2 年以上的安全更新。
根据官方介绍,Goobuntu 是谷歌长期以来一直使用的 Linux 发行版。不过 Ubuntu LTS 的两年更新周期意味着谷歌必须在操作系统 EOL 之前,对超过 10 万台设备中的每台机器进行升级。这是一项非常困难且耗时的工作,毕竟每两年让所有工程师从头开始配置他们的工作空间,这对生产力是严重的打击,并且从经济角度来看也是一个不负责任的选项。
在每个操作系统使用周期内,谷歌还面临软件包重大版本升级的挑战,因为这可能需要对软件配置进行重大改变。为了让这个过程自动化,谷歌工程师编写了一个无人值守的升级工具来处理很多常见的问题。这种“自动化升级”意味着大多数谷歌员工无需通过重新安装机器,并重新创建所有配置来手动升级。不过为了实现这一点,谷歌需要对升级过程进行全面测试,并检查所有已更改的主要软件包是否继续运行(在 Ubuntu 中,主要版本之间的升级可能多达数千个软件包)。有时,在发生软件包弃用且工程师必须决定如何推进的情况下,很难提供自动化。
据称,谷歌完成所有 Goobuntu 的升级通常要花费一年的时间,整个过程对于团队来说是一个巨大的压力。而且很多时候他们遇到的一些 bug 已经在上游被修复了,但这些改进却从未被合并到所使用的 LTS 版本。
因此谷歌转向了滚动更新发行版,不过它没有选择知名的滚动更新发行版 Arch Linux,而是基于 Debian 测试分支构建了 gLinux Rodete (Rolling Debian Testing)。
选择 Debian 是因为它有着庞大的社区和软件库,还可以使用 Debian 格式的现有内部软件包和工具。而且 Ubuntu 也是基于 Debian,迁移过去更容易顺畅。
Debian 稳定分支也是差不多两年发布一次大更新,但其测试分支是滚动更新的。滚动更新意味着需要尽可能防止新版本对现有工作流程造成破坏,为了管理从源代码构建所有上游软件包的所有这些复杂任务,谷歌构建了一个名为 Sieve 的工作流系统。通过运行一个虚拟化测试套件,确保核心组件和开发者工作流程都不会被新版本软件包破坏。
谷歌表示,Goobuntu 最后一个版本基于 Ubuntu 14.04 LTS(代号 Trusty)。Rodete 的开发始于 2015 年,2017 年,谷歌开始将机器迁移到 Rodete,并在 2018 年底完成所有迁移。2019 年初关闭了最后一批运行 Goobuntu 的机器。2020 年中,Rodete 完全跟上了 Debian Bullseye 的发布时间。未来谷歌计划与上游 Debian 更紧密地合作,并贡献更多的内部补丁来维护 Debian 软件包生态。