【草稿】runc的版本号名称都说了些什么?
当你打开opencontainers/runc的GitHub仓库,视线扫过那些灰白色的文件目录、无尽的commit记录和长篇累牍的README文档时,目光大概率会被右侧Release栏里的一行字吸引过去。
在这个几乎全被拉丁字母和代码占据的网页里,出现了一组视觉密度极高的方块字:
“路漫漫其修远兮,吾将上下而求索!”
这并不是浏览器的网页翻译功能出了bug。这句出自两千多年前中国诗人屈原《离骚》的千古名句,正赫然标记在runc v1.4.0——这个支撑起当今全球云计算生态的最核心底层组件的最新版本号旁边。
为什么中文会出现在这里?这背后藏着怎样的故事?
事实上,这并不是一场意外,而是开源世界里一场旷日持久的极客式的浪漫。如果你继续往下翻阅,或者去看看它的兄弟项目umoci,你会发现一个令人捧腹又动容的隐藏传统:这些顶级的底层系统开发者们,习惯于在每一次发布新版本时,用一句名言、一句歌词甚至一句动漫台词作为“副标题”,来宣泄他们在修bug时的真实情绪。
从莎士比亚的悲剧到《银河系漫游指南》的黑色幽默;从《进击的巨人》里被支配的恐惧,到俄国诗人笔下宿命般的叹息;有时,也可以只是经典歌曲《Take me to your heart》的深夜循环。
在这些看似毫无逻辑的跨界引用背后,是一部鲜活的开源软件血泪史。那是被无限期的候选版本(RC)折磨到崩溃的绝望,是长达五年才熬出1.0正式版的如释重负,也是在接连爆发高危容器逃逸漏洞(CVE)时,挑灯夜战加固代码的惊心动魄。
代码是冰冷且严密的,但写代码的人却充满着温度与情绪。
在此,我整理并解读了runc与umoci全部60个版本名称里的典故。让我们暂时跳出枯燥的release notes,透过这些版本号旁边的绝妙台词,去感受开源社区维护者们在键盘与终端前经历的酸甜苦辣。
runc
v1.4.0
“路漫漫其修远兮,吾将上下而求索!”
——屈原《离骚》
开源维护之路漫长且艰难,但维护者们依然会坚持不懈地探索和修复。
发布于2025-11-27,runc v1.4的首个正式版,支持了runtime-spec v1.3。
v1.3.4
“Take me to your heart, take me to your soul.”
(把我带进你心里,带进你灵魂里。)
—— Michael Learns to Rock《Take Me to Your Heart》(张学友《吻别》英文版)
也许维护者在深夜处理之前修bug所产生的新bug时,耳机里正循环播放着这首在中国家喻户晓的神曲。
发布于2025-11-27,修复了v1.3.3引入的回归bug(修bug产生的副作用)。
v1.2.9
“Stars hide your fires, let me rest tonight.”
(群星啊,掩住你们的火光,让我今夜得以安歇。)
——莎士比亚《麦克白》,有改动
修完高危漏洞,今晚终于能睡个好觉。
发布于2025-11-27,修复了v1.2.8引入的回归bug。
v1.4.0-rc.3, v1.3.3, v1.2.8
“その日、人類は思い出した。” / “奴らに支配されていた恐怖を” / “鳥籠の中に囚われた屈辱を”
(那一天,人类终于回想起了,曾经一度被他们所支配的恐怖,还有被囚禁于鸟笼中的那份屈辱。)
——《进击的巨人》开场白
对于维护者和用户来说,突然爆发的高危容器逃逸漏洞,确实如同动漫里攻破城墙的巨人一般,带来了“被支配的恐怖”。
三个版本均发布于2025-11-05,紧急修复高危安全漏洞CVE-2025-31133, CVE-2025-52565, CVE-2025-52881,这些漏洞均允许攻击者绕过runc对/proc文件的写入限制从而实现完整的容器逃逸。
v1.4.0-rc.2
“私の役目は信じるかどうかではない。行うかどうかだ。”
(我的职责不是去相信与否,而是去执行。)
——大友克洋《阿基拉》(AKIRA)
这句台词象征了runc作为容器生态基石的纯粹执行者定位。
发布于2025-10-09,包含了一些没赶上rc.1发布的小功能,例如在配置runc exec进程时支持使用clone3(2)的CLONE_INTO_CGROUP标志、支持为具有用户命名空间的容器设置user.*类型的sysctls,以及引入了新的Intel RDT特性。
v1.3.2
“Ночь, улица, фонарь, аптека…”
(夜,街道,路灯,药店……)
——亚历山大·勃洛克(Alexander Blok),俄国诗人
这首诗描绘了一种无尽的循环与宿命感。也许维护者在处理由于页大小等底层细节引发的测试失败与cgroup转换问题时,再次感受到了这种“修完旧bug又来新bug”的无尽循环。
发布于2025-10-03,主要修复了v1.3.1中发现的少数小问题,包括改进了cgroup v1到v2的CPU权重转换逻辑,以及修复了在ppc64架构下因64K页大小导致的测试失败问题。
v1.4.0-rc.1
“おめェもボスになったんだろぉ?”
(你也成为老大了对吧?)
——大友克洋《阿基拉》(AKIRA)
作为1.4大版本的首个候选版本,这句台词也许是旧版本对新一代架构的交接与调侃。
发布于2025-09-05,包含了少量新功能与众多细微的修复(例如彻底取消了容器进程默认继承runc的CPU亲和性设置),并引入了对linux.netDevices字段的支持,允许设备无缝移入容器的网络命名空间。
v1.3.1
“この瓦礫の山でよぉ”
(在这堆瓦砾山中啊)
——大友克洋《阿基拉》(AKIRA)
也许是隐喻在刚发布完1.3.0大版本后,面对迅速暴露出的各种历史遗留坑位与边缘bug(就像一片“瓦砾”),维护者们不得不在废墟中努力翻找和清理这些细碎的错误。
发布于2025-09-04,这是1.3系列的第一个补丁版本,重点在“瓦砾”中修复了容器默认继承runc的CPU亲和性、rootfs传播状态异常、seccomp代理资源泄漏,以及在配置期间异常挂掉时runc delete和runc stop无法正确清理容器状态等一系列底层细节问题。
v1.2.7
“さんをつけろよデコ助野郎!”
(给我加上“先生”啊,你这呆瓜!)
——大友克洋《阿基拉》(AKIRA)
也许是对不规范代码的吐槽,又或者是维护者在焦头烂额修bug时发出的暴躁怒吼。
发布于2025-09-04,这是runc v1.2分支的第七个补丁版本,主要将v1.3.z系列中被认为是“重大”(significant)的错误修复进行了向后移植。具体包括修复了无特权用户调用runc pause或runc unpause时的抢占式报错警告,以及在CRIU检查点/恢复后正确将time namespace添加到容器配置中等底层问题。
v1.3.0
“Mr. President, we must not allow a mine shaft gap!”
(总统先生,我们绝不能允许出现矿井差距!)
——电影《奇爱博士》(Dr. Strangelove)
讽刺冷战时期荒诞军备竞赛的经典喜剧台词。或许是在幽默地调侃容器生态中各项目之间激烈的竞争与功能对标。
发布于2025-04-29,这是runc v1.3分支的首个正式版本。此版本最大的意义在于runc开始采用全新的版本发布和长期支持策略,正式宣布v1.1系列停止支持,并鼓励用户尽快迁移至v1.3.0。技术上它改善了由于锁定的挂载标志冲突而产生的错误诊断信息,并将runc --version的版本信息注入方式改为使用//go:embed,使得非make构建也能获取正确的版本信息。
v1.3.0-rc.2
“Eppur si muove.”
(然而它依然在转动。)
——伽利略(传说中他在被迫放弃日心说后喃喃自语的名言)
尽管开发过程中面临各种阻力与困难,甚至有时候看似在退步(不小心引入了回归bug),但开源项目就像这颗星球一样,依然在不可阻挡地向前推进。
发布于2025-04-09,这是v1.3.0的第二个候选版本。它主要修复了rc.1中引入的退化问题,例如修正了错误读取宿主机而不是容器内的/etc/passwd来设置HOME环境变量的bug,以及修复了在使用CRIU 3.14及以上版本进行检查点和恢复时未能正确加入time namespace的问题。
v1.2.6
“Hasta la victoria, siempre.”
(直到最后的胜利,永远如此。)
——切·格瓦拉
与旧版内核的各种诡异兼容性问题(如密封runc二进制文件时的bug、O_CLOEXEC引发的停滞等),以及time namespace的复杂问题作战,对维护者而言就像是一场漫长而艰难的革命。
发布于2025-03-17,主要修复了runc exec处理时间命名空间的问题,以及处理旧版内核的底层兼容性问题(如在旧内核上放弃使用F_SEAL_FUTURE_WRITE密封二进制文件以避免错误)。
v1.3.0-rc.1
“No tengo miedo al invierno, con tu recuerdo lleno de sol.”
(我不惧怕严冬,因为对你的回忆充满了阳光。)
——西班牙语经典歌词/诗句
也许是在暗示即使在开发容器底层标准时遇到“严冬”般的晦涩难题与重构压力,社区的反馈与代码逐渐完善所带来的“阳光”依然支撑着维护者前行。这是一个承前启后的重大版本,带来了大量API清理和新功能,标志着1.3大版本正式拉开序幕。
发布于2025-03-04,这是1.3.0的首个候选版本。该版本包含了对libcontainer的一些破坏性API变更(例如将cgroups处理剥离到独立仓库)、正式支持OCI runtime-spec 1.2.1、为runc exec添加CPU亲和性(CPU affinity)支持,并宣布了全新的版本发布与长期支持策略。
v1.2.5
“Мороз и солнце; день чудесный!”
(严霜与阳光;多么美妙的一天!)
——亚历山大·普希金《冬天的早晨》
普希金的这句名诗描绘了俄罗斯严寒中阳光明媚的清晨。这个版本专门解决了一个因上游systemd的退化bug而引发的棘手问题(该bug严重影响了NVIDIA GPU在容器中的工作负载),当这个恼人的坑终于被巧妙绕过时,维护者的心情大概就像严冬里见到了灿烂的阳光一样舒畅畅快。
发布于2025-02-14,1.2分支的第五个补丁版本,主要通过重排系统单元属性的变通方式,紧急修复了systemd v230引入的导致瞬态单元(transient units)意外需要执行systemctl daemon-reload的回归bug。
v1.2.4
“Христос се роди!”
(基督降生了!)
——东正教传统的圣诞节问候语
发布日恰逢1月7日(东正教圣诞节),维护者借这句节日的问候为深受设备权限退化问题困扰的用户送上一份“圣诞礼物”。因为在1.2.0版本中出于安全考虑而移除的tun/tap默认白名单导致了大量上层工具(如Docker或Podman)出现问题,维护者在这个版本中无奈地妥协并将其加回了默认允许列表中。
发布于2025-01-07,主要将tun/tap设备重新加入到内置的允许设备列表中以修复回归问题。
v1.2.3
“Winter is not a season, it’s a celebration.”
(冬天不是一个季节,而是一场庆典。)
——Anamika Mishra,印度作家
伴随着北半球寒冬的到来,runc在代码底层也迎来了一场清理“积雪”的行动。无论是多进程竞态创建挂载点时的报错,还是旧版内核里eBPF的兼容性坑,都被这个补丁一一扫平。
发布于2024-12-11,主要修复了在共享根文件系统中并发创建挂载点导致引发的EEXIST回归错误(该bug曾导致BuildKit故障),并修复了旧版内核下eBPF的兼容性退化问题。
v1.2.2
“Specialization is for insects.”
(专业分工是给昆虫准备的。)
——罗伯特·海因莱因《时间足够你爱》
海因莱因的这句名言主张人类应该具备多面手的能力,而对于像runc这样需要适配千奇百怪的宿主环境(不同文件系统、各种权限配置的cgroup)的基础组件来说,它同样不能只做个“偏科”的工具,必须能健壮地处理各种复杂的异常边界。
发布于2024-11-16,主要修复了rootless容器在只读cgroup环境下的删除失败问题(该回归bug导致了无根BuildKit的报错),并消除了当运行目录/run/runc与二进制所在目录/usr/bin不在同个文件系统时引发的无害但烦人的overlayfs内核日志。
v1.2.1
“No existe una escuela que enseñe a vivir.”
(没有一所学校能教人如何生活。)
——西班牙语名言
开源项目在真实生产环境中总会遇到意想不到的坎坷,这是任何文档或“学校”都无法提前教会的实战经验。这个版本不仅修复了阻塞containerd更新的关键bug,还果断移除了刚刚在1.2.0中引入但因局限性过大而显得多余的runc-dmz防御机制。
发布于2024-11-01,主要包含了影响SELinux发行版的关键修复,并完全移除了runc-dmz特性。
v1.2.0
“できるときにできることをやるんだ。それが今だ。”
(在能做的时候,做力所能及之事。就是现在。)
(原文:You gotta take what you can, when you can, while you can… and you gotta do it now.)
——美国电影《几近成名》(Almost Famous)日语版台词
经过漫长的等待和多次RC候选版本的打磨,runc 1.2.0正式版终于降临!这句充满行动力的话语宣告了维护者们终于抓住时机,将积累已久的底层架构改进彻底落地。
发布于2024-10-22,备受期待的1.2.0正式版本。该版本引入了基于overlayfs的轻量级/proc/self/exe克隆保护机制(以取代开销较大的memfd机制),完善了CVE-2024-45310漏洞的修复,并处理了众多由于竞态条件引发的挂载泄漏问题。
v1.1.15
“How, dear sir, did you cross the flood? By not stopping, friend, and by not straining I crossed the flood.”
(尊敬的先生,您是如何渡过这洪水的?朋友,我不停歇也不挣扎,就这样渡过了洪水。)
——佛教经典《相应部》
在面对源源不断的bug与安全漏洞洪流时,维护者保持着一种不急不躁、持续前行的禅意态度。面对如Docker在特殊架构下的非标准配置或旧版内核的底层缺陷,只能不懈怠地见招拆招。
发布于2024-10-07,主要修复了在ppc64le架构下seccomp的异常兼容性问题、旧内核导致容器挂载泄漏到宿主机命名空间的高危缺陷,并优化了针对CVE-2019-5736安全防御机制的执行性能。
v1.2.0-rc.3
“The supreme happiness of life is the conviction that we are loved.”
(生活中最大的幸福是坚信我们被爱着。)
——维克多·雨果《悲惨世界》
对于开源项目而言,最大的幸福或许就是背后有一群充满热爱、持续贡献的开发者与用户。在这个版本中,维护者们带着这份热爱,修补了可能被恶意利用来在宿主机上创建空文件和目录的低危安全漏洞CVE-2024-45310,并为即将到来的1.2.0大版本做着最后的打磨。
发布于2024-09-03,包含了直到1.1.14为止的所有补丁和错误修复,并重点修复了CVE-2024-45310漏洞。
v1.1.14
“年を取っていいことは、驚かなくなることね。”
(变老的好处,就是不再会对事情大惊小怪了吧。)
——宫崎骏《哈尔的移动城堡》女主苏菲经典台词
作为1.1系列的第十四个补丁版本,这个分支已经算是“上了年纪”。对于维护者来说,长期的维护工作让他们变得波澜不惊,无论是面对新爆出的安全漏洞CVE-2024-45310,还是需要跟进最新的Go语言版本更新,他们都能从容不迫地应对。
发布于2024-09-03,主要修复了允许恶意配置的容器在宿主机上创建空文件和目录的低危漏洞CVE-2024-45310,并增加了对Go 1.23编译器的支持。
v1.2.0-rc.2
“TRUE or FALSE, it’s a problem!”
(不管是真还是假,反正这是个问题!)
或许暗示了在开发这个包含大量新特性的重大候选版本时,维护者们在处理各种复杂的逻辑状态与选项配置时遇到的抓狂瞬间。也或许是在提醒参与RC测试的社区用户们:无论表面看起来是True还是False,都需要去仔细测试以排查可能潜伏的深层问题。
发布于2024-06-26,该版本不仅包含了1.1.13及之前所有的修复,还引入了大量新特性和部分破坏性变更(例如最低编译要求提升至Go 1.20),同时利用Go 1.21.11工具链的更新修复了一个可欺骗runc在宿主机上删除目录的高危底层安全漏洞。
v1.1.13
“There is no certainty in the world. This is the only certainty I have.”
(世界上没有什么是确定的。这是我唯一确定的事。)
——老普林尼(Pliny the Elder),古罗马学者
应对软件开发中不断涌现的竞态条件(如runc list与runc delete之间的冲突)和底层不确定性,维护者发出了这样的感叹:唯一确定的就是代码里永远潜伏着不确定的bug。
发布于2024-06-13,引入了Go 1.22.x的兼容性支持,并修复了runc exec中偶尔出现的nofile rlimit错误以及命令间的竞态问题。
v1.2.0-rc.1
“There’s a frood who really knows where his towel is.”
(那个家伙真是个明白人,知道自己的毛巾在哪儿。)
——道格拉斯·亚当斯《银河系漫游指南》
在这部科幻作品的设定中,“毛巾”是星际漫游者最实用的物品,带好毛巾代表准备充分。这是一个包含大量新特性和底层破坏性变更的重大候选版本,维护者借此宣告他们已经为1.2.0大版本做好了万全准备,也提醒用户们带好“毛巾”迎接架构更新。
发布于2024-04-03,1.2分支的首个候选版本。升级支持了OCI runtime-spec 1.2.0,引入了对bind-mount的id-mapped挂载支持,以及用于缓解CVE-2019-5736的两种新机制(runc-dmz和memfd-bind),同时对挂载选项的处理做出了可能影响现有用户的破坏性变更。
v1.1.12
“Now you’re thinking with Portals™!”
(现在你正在用传送门思维思考了!)
——经典解谜游戏《传送门》(Portal)宣传语与成就名
这次紧急更新修复了一个高危的容器逃逸漏洞(CVE-2024-21626)。攻击者正是利用了runc内部泄漏的文件描述符,巧妙地在宿主机和容器之间开了一道意想不到的“传送门”实现逃逸。这句游戏经典台词是对这种“打洞”的黑客思维绝妙的幽默隐喻。
发布于2024-01-31,紧急安全补丁版本,修复了涉及泄漏文件描述符的容器突破攻击漏洞,并加入了严格的安全加固措施以防止内部泄漏被再次利用。
v1.1.11
“Happy New Year!”
(新年快乐!)
没有复杂的典故与引经据典,仅仅因为发布时间恰逢2024年的第二天。这是维护者给开源社区和所有使用者送上的一份朴实无华的新年礼物,祝愿新的一年少点bug。
发布于2024-01-02,主要修复了runc在处理加入现有用户命名空间容器时的路径问题,并改进了对cgroup v2的内存统计支持(如memory.peak和memory.swap.peak)。
v1.1.10
“Śruba, przykręcona we śnie, nie zmieni sytuacji, jaka panuje na jawie.”
(在梦中拧紧的螺丝,无法改变现实中的处境。)
——斯坦尼斯瓦夫·耶日·莱茨(Stanisław Jerzy Lec),波兰思想家、诗人
维护者用这句充满哲学意味的波兰格言,也许是在感叹那些纸上谈兵的配置或仅仅在理想状态下运行的测试,在面对真实生产环境的残酷bug时毫无用处;只有真正在代码里打上补丁,才能解决现实世界的问题。当然,也可能只是对自己的调侃:快醒醒,该起来修bug了!
发布于2023-11-01,主要修复了与cgroup相关的几个问题(如hugetlb的限制与统计、修复恶意hugetlb配置引发的bug),以及tmpcopyup特性中的umask权限依赖问题。
v1.1.9
“There is a crack in everything. That’s how the light gets in.”
(万物皆有裂痕,那是光照进来的地方。)
——莱昂纳德·科恩(Leonard Cohen)的歌曲《Anthem》
这是对软件开发过程最诗意的自嘲与宽慰。上个版本中不小心引入了导致tmpfs丢失粘滞位(sticky bit)的回归bug,这个“裂痕”虽然给用户带来了麻烦,但也正是这些不断暴露的问题,指引着开发者打入新补丁,让整个项目变得更加强壮与完善。
发布于2023-08-11,主要修复了v1.1.8中引入的tmpfs回归bug,解决了intelrdt在部分系统上忽略ClosID的问题,并改进了cgroup v2的统计信息报告逻辑,使其更贴近cgroup v1的报告方式。
v1.1.8
“海纳百川 有容乃大”
——林则徐
作为容器生态最核心的底层运行时,runc必须尽可能地兼容并包,支持各种不同的硬件体系架构。这句充满中国古典智慧的名言用在这个版本中恰到好处,因为该版本最大的亮点正是“海纳百川”般地正式加入了对RISC-V架构(riscv64)的支持。
发布于2023-07-19,除了加入RISC-V支持外,还包含了一系列日常错误修复(如init进程不再打印环境变量值、修复tmpfs模式选项问题、修复各种CI与测试平台的兼容性等)。
v1.1.7
“Ночевала тучка золотая на груди утеса-великана.”
(一朵金色的云彩,在巨人般的悬崖胸膛上过夜。)
——米哈伊尔·莱蒙托夫《悬崖》(俄国诗人)
作为1.1系列的最后一个计划版本,runc就像那座饱经风霜的巍峨悬崖,在经历了无数次修补与风雨后,终于迎来了金云停驻的宁静时刻。
发布于2023-04-27,主要修复了与systemd相关的cgroup设备规则处理问题(尤其是针对不存在的设备,如NVIDIA驱动问题),并在源码中加入了用于验证发布签名的runc.keyring文件。
v1.1.6
“In this world nothing is certain but death and taxes.”
(在这个世界上,除了死亡和税收,没有任何事情是确定的。)
——本杰明·富兰克林
对于底层运行时的维护者来说,世界上或许还有第三件确定的事:那就是系统底层(尤其是cgroup和权限控制)永远会有修不完的边界bug等待着你。
发布于2023-04-12,此版本集中修复了一系列复杂的cgroup相关问题(包括systemd驱动忽略UnitExist错误、cpuset范围转换错误等),并解决了一个导致rootless容器在特定权限下启动时报“权限拒绝”的回归问题。
v1.1.5
“囚われた屈辱は 反撃の嚆矢だ”
(那份被囚禁的屈辱,正是反击的镝矢。)
——《进击的巨人》主题曲《红莲的弓矢》歌词
容器的安全隔离本质上就是将进程“囚禁”起来,而各种危险的容器逃逸漏洞就是对这种囚禁的突围。面对接连爆发的逃逸漏洞,维护者们吹响了反击的号角,迅速发布补丁重新加固了这座城墙。
发布于2023-03-29,这是一个紧急安全更新版本,一口气修复了三个容器逃逸与提权相关的安全漏洞(CVE-2023-25809、CVE-2023-27561、CVE-2023-28642),同时修复了容器内无法正常使用/dev/null的bug。
v1.1.4
“If you look for perfection, you’ll never be content.”
(如果你追求完美,你将永远无法满足。)
——列夫·托尔斯泰《安娜·卡列尼娜》
在开源维护的无尽循环中,每一次修补都可能不小心破坏其他功能。维护者用这句世界名著中的金句来做自我心理建设:软件永远没有绝对完美的时刻,学会接受瑕疵也是开发者的必修课。
发布于2022-08-25,主要紧急修复了v1.1.3中因为追求代码完善而意外引入的一个导致systemd设备规则出错的回归bug。
v1.1.3
“In the beginning there was nothing, which exploded.”
(起初什么都没有,然后砰的一声就爆炸了。)
——特里·普拉切特《死神学徒》(常被用作对宇宙大爆炸的幽默调侃)
容器底层的各种边界情况有时就像一场场毫无征兆的“大爆炸”。比如这个版本中处理的s390x架构下的多路复用系统调用问题、dbus莫名其妙的断连,一切原本风平浪静,下一秒却突然炸出一堆令人头疼的报错。
发布于2022-06-09,包含了一系列针对底层疑难杂症的修复,如s390x架构的seccomp拦截规则修复、优化了与systemd的通信机制以及提升了socket activation的稳定性。
v1.1.2
“I should think I’m going to be a perpetual student.”
(我想我将永远做个学生。)
——安东·契诃夫《樱桃园》(剧中人物特罗菲莫夫台词)
Linux内核的安全机制极其复杂且晦涩。面对与Docker和containerd中如出一辙的Linux能力(capabilities)泄漏漏洞,维护者也许在感叹:在深不可测的系统底层面前,哪怕是顶级的安全专家和开发者,也永远只是个需要不断学习的学生。
发布于2022-05-11,这是一个专门用于修复低危安全漏洞CVE-2022-29162的补丁版本,解决了进程意外继承非空Linux能力而可能导致的安全风险。
v1.1.1
“Violence is the last refuge of the incompetent.”
(暴力是无能者最后的避难所。)
——阿西莫夫《基地》
遇到问题时直接强制退出(暴力报错)往往是最简单粗暴的做法。在这个补丁版本中,维护者修复了多个在特定配置下(如只读的/dev挂载、不支持Intel RDT、缺失系统配置等)不必要直接报错退出的bug,让runc的运行更加优雅和稳健。
发布于2022-03-29,修复了1.1.0中出现的多个问题。
v1.1.0
“A plan depends as much upon execution as it does upon concept.”
(计划的成功,执行与构思同等重要。)
——弗兰克·赫伯特《沙丘》
一个好的容器标准(构思)离不开底层运行时的稳健实现(执行),这正是runc作为OCI标准主要实现者的核心价值所在。
发布于2022-01-17,1.1系列的首个正式版本,宣告了1.0系列的使命终结。
v1.1.0-rc.1
“He who controls the spice controls the universe.”
(谁控制了香料,谁就控制了宇宙。)
——弗兰克·赫伯特《沙丘》
在容器的世界里,底层系统资源和隔离机制就是那珍贵的“香料”。
发布于2021-12-14,引入了大量控制底层资源的新特性,如对RDMA cgroup的支持、seccomp新增的SCMP_ACT_NOTIFY动作,以及新增的runc features子命令,并宣布放弃对旧版Go编译器的支持(最低要求Go 1.16)。
v1.0.3
“If you were waiting for the opportune moment, that was it.”
(如果你在等待绝佳的时机,那就是现在了。)
——《加勒比海盗》杰克·斯派罗船长经典台词
虽然新发现的潜在安全漏洞(CVE-2021-43784)在现有版本中其实无法被真正利用,但为了防患于未然,并为即将到来的1.1大版本彻底扫清障碍,当时就是修复它的最完美时机。
发布于2021-12-06,主要修复了与挂载和cgroup相关的中等优先级问题以及潜在的安全漏洞。
v1.0.2
“Given the right lever, you can move a planet.”
(给我一个支点,我能撬动整个地球。)
——阿基米德名言,有改动
暗示底层的微小修复能够对上层生态产生巨大的影响。在这个版本中修复的几个底层bug,恰好解决了庞大系统(如Kubernetes)在使用libcontainer时遇到的痛点;同时该版本实现了可重现构建,这就像是找到了一个能够撬动并巩固开源软件供应链信任体系的有力杠杆。
发布于2021-08-23,修复了多个影响Kubernetes的中高优先级问题。
v1.0.1
“If in doubt, Meriadoc, always follow your nose.”
(如果心存疑虑,梅里雅达克,跟着你的鼻子走就对了。)
——《指环王》甘道夫经典台词
在经历了五年长跑终于发布1.0.0正式版后,真实生产环境迅速暴露出了许多意想不到的新bug。面对刚刚步入1.0时代的各种疑难杂症,维护者们就像在黑暗迷宫中摸索的探险者,只能凭借多年积累的直觉与丰富经验(“跟着鼻子走”)来迅速定位并排查问题。
发布于2021-07-16,这是1.0分支的首个稳定补丁版本,紧急修复了1.0.0中出现的几个中高优先级问题(包括影响Kubernetes调用的相关回归bug)。
v1.0.0
“A wizard is never late, nor is he early, he arrives precisely when he means to.”
(巫师从来不会迟到,也从来不会早到,他总是在他觉得合适的时候准时出现。)
——《指环王》甘道夫经典台词
经过长达五年的RC(候选)版本马拉松,runc 1.0正式版终于面世!维护者借用这句台词,幽默地回应了社区多年来对其“无限期跳票”的调侃——1.0版本并没有迟到,它只是在打磨到最完美、最合适的时候才正式降临。
发布于2021-06-22,这是自2016年发布v1.0.0-rc1以来时隔五年的首个正式版本。该版本凝聚了约422位贡献者的心血,包含了大量最后的错误修复,以及与cgroup处理相关的正确性和性能提升,特别是大幅完善了对cgroup v2和systemd驱动的支持,正式宣告runc结束RC,迈入1.0时代。
v1.0.0-rc95
“Just when I thought I was out, they pull me back in.”
(就在我以为我已经金盆洗手的时候,他们又把我拉回去了。)
——《教父3》麦克·柯里昂经典台词
维护者们本以为长达数年的1.0 RC阶段终于要画上句号,结果一个新的高危漏洞又把他们无情地拽回了无尽的RC发布深渊。
发布于2021-05-19,主要修复了CVE-2021-30465。
v1.0.0-rc94
“Time is an illusion. Lunchtime doubly so.”
(时间是一种幻觉。午餐时间更是如此。)
——道格拉斯·亚当斯《银河系漫游指南》
runc v1.0的候选版本(RC)发布周期实在太过漫长,长到让维护者觉得“时间”和原定的“发布计划”都已经成了幻觉。
发布于2021-05-10,主要修复了rc93中发现的多个回归bug。
v1.0.0-rc93
“I never could get the hang of Thursdays.”
(我从来都搞不定星期四。)
——道格拉斯·亚当斯《银河系漫游指南》
这个版本真的是在星期四发布的。
发布于2021-02-04,是1.0正式版前最后一个包含丰富新特性的RC版本,并宣布进入特性冻结期,同时cgroup v2支持也终于被认为达到了生产可用级别。
v1.0.0-rc92
“Almost, but not quite, entirely unlike tea.”
(几乎,但不完全,和茶毫无相似之处。)
——道格拉斯·亚当斯《银河系漫游指南》
借用书中那杯机器合成的极其难喝的“假茶”,维护者幽默地自嘲上一个版本(rc91)“感觉快完美了”,但却带了一个影响Docker的大bug。
发布于2020-08-06,这是一个紧急热修复版本,解决了rc91中引入的一个影响Docker处理/dev符号链接的回归问题。
v1.0.0-rc91
“Just Hook a Right Over Here”
(就在这儿往右拐 / 就在这儿挂个钩子)
这既是一句指路的日常口语,也是对该版本核心更新的双关:在这个版本中,社区期待已久的OCI Hooks机制终于被合并了。
发布于2020-07-02,引入了新的Hooks功能。
v1.0.0-rc90
“We Have To Go Back!”
(我们必须回去!)
——美剧《迷失》(Lost)男主角杰克·谢泼德经典台词
因为rc10在纯文本字典序上会排在rc2前面,导致Go modules无法正确获取最新版本,维护者只能无奈选择“时空跳转”,将版本号跳至rc90来解决排序问题。
发布于2020-06-02,代码内容与v1.0.0-rc10完全相同,纯粹为了修复版本号字典序问题而发布的“占位”版本。
v1.0.0-rc10
“Procfs Strikes Back”
(Procfs的反击)
——恶搞《星球大战2:帝国反击战》(The Empire Strikes Back)
本以为快要发布1.0了,结果与Linux procfs相关的安全漏洞又双叒叕给了维护者沉重的一击,迫使他们再次停下脚步发布热修复。
发布于2020-01-24,主要作为rc9的热修复,解决了高危漏洞CVE-2019-19921。
v1.0.0-rc9
“Watch out for that first step, it’s a doozy!”
(小心第一步,那可是个大麻烦!)
——《土拨鼠之日》(Groundhog Day)
维护者们就像《土拨鼠之日》的男主角一样被困在了无尽的RC循环里,每一次试图迈向1.0正式版的第一步,都会一脚踩进新的大坑。
发布于2019-10-05,作为rc8的热修复,主要修复了CVE-2019-16884。
v1.0.0-rc8
“Oops, We Did It Again!”
(哎呀,我们又搞砸了!)
——布兰妮·斯皮尔斯《Oops!… I Did It Again》
上一个版本刚信誓旦旦地修完高危漏洞,结果又“不小心”引入了新的bug。维护者用这首流行金曲幽默且无奈地承认了错误。
发布于2019-04-26,作为rc7的热修复,解决了上个版本导致旧版内核无法正常运行的回归问题,该问题导致很多用户无法升级以缓解漏洞。
v1.0.0-rc7
“The Eleventh Hour”
(最后时刻 / 危急关头)
眼看1.0版本就要破茧而出,却在“最后时刻”爆发了高危逃逸漏洞(CVE-2019-5736),使得这成为了一次充满火药味的紧急发布。
发布于2019-03-28,紧急发布以缓解CVE-2019-5736。
v1.0.0-rc6
“For Real This Time”
(这次是真的了)
维护者曾天真地以为这绝对是最后一个特性版本,原本打算直接发1.0,并信誓旦旦地宣布了“仅修复规范兼容性”的冻结期——然而后来的事实证明,他们立了一个巨大flag。
发布于2018-11-22,宣布进入特性冻结期(只修规范兼容性bug,不再加新功能),并迎来了Go 1.10的升级。
v1.0.0-rc5
“The Final Stretch”
(最后的冲刺)
当时的维护者非常乐观地认为,在经历了一系列大更新后,项目终于进入了发布1.0正式版前的“最后冲刺阶段”(但如今我们知道,这个冲刺又足足跑了三年多,出了十来个版本)。
发布于2018-02-27,引入了在Rootless容器中支持cgroups等大量重要新特性。
umoci
v0.6.0
“Please mind the gap between the train and the platform.”
(请注意列车与站台之间的空隙。)
——地铁的经典广播提示语
似乎是在幽默地提醒开发者们“注意脚下的坑”——因为这个版本包含了一些破坏性的Go API变更,开发者在升级代码时需要小心跨越这些因接口变动而产生的“空隙”。
发布于2025-10-15,这是一次重大更新,主要增加了对OCI镜像规范v1.1.1和OCI运行时规范v1.2.1的支持,并修改了部分API的调用方式。
v0.5.1
“🖤 Yuki (2021-2025)”
——维护者Aleksa Sarai献给他的爱猫Yuki
维护者在发布说明中写道,过去四年里他写下的大部分代码,都是在这只名叫Yuki的小猫趴在他胸口打呼噜时完成的。这个版本是为了纪念这位陪伴他度过漫长开发时光的特殊伙伴,并祝愿它安息。
发布于2025-09-06,一个包含少数错误修复的小更新版本,主要解除了对oci-image-tool验证的依赖。
v0.5.0
“A wizard is never late, Frodo Baggins. Nor is he early; he arrives precisely when he means to.”
(巫师从来不会迟到,弗罗多·巴金斯。他也从来不会早到,他总是在他觉得合适的时候准时出现。)
——《指环王》
这是维护者对社区漫长等待的幽默回应(巧合的是,runc 1.0.0正式版也同样使用了这句台词)。它宣告着这个“期待已久”的版本虽然姗姗来迟,但一切等待都是值得的,它在功能打磨到最合适的时候终于发布了。
发布于2025-05-21,一个包含大量更新的重大版本,引入了Go API的破坏性变更,以及增加了对zstd压缩层处理的支持等新特性。
结语
在高度自动化的CI/CD流程中,这些手写的、带有温度的名字提醒我们:冰冷的机器背后,是鲜活的灵魂。他们不仅定义了云原生世界的基础法则,也用自己的方式表达了对这个世界的热爱与幽默。
在动辄影响全球云基础设施的严肃开发中,请务必珍惜这群顶尖极客们固执留下的这一份“不正经”。因为正是这点看似无用的幽默、碎碎念与独属于人类的浪漫,构成了开源世界最无法被计算、也最熠熠生辉的灵魂。