runc的版本号名称都说了些什么?

屈原、《进击的巨人》,以及全球容器基础设施

打开opencontainers/runc的GitHub仓库,右侧Release栏里赫然写着:

“路漫漫其修远兮,吾将上下而求索!”

这不是浏览器翻译出了bug。屈原的《离骚》确实被标记在runc v1.4.0,这个支撑着全球容器生态的最核心底层组件的最新版本号旁边。

如果你继续往下翻,或者去看它的兄弟项目umoci,会发现这是一个持续了多年的传统:维护者Aleksa Sarai(cyphar)习惯在每次发布时,附上一句名言、歌词或动漫台词作为版本副标题,典故囊括了莎士比亚、《银河系漫游指南》、《进击的巨人》、普希金、布兰妮,等等等等。

以下是runc与umoci全部60个版本名称的出处整理。有些引用和版本内容之间有明确的对应关系,有些是维护者当时的心情写照,也有些我实在猜不出为什么选了这句。但无论如何,透过这些副标题,你一定能从中看到一部鲜活的开源软件维护史。

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》(张学友《吻别》英文版)

发布于2025-11-27,修复了v1.3.3引入的回归bug——由修bug引入的新bug。深夜里修它的时候,耳机里循环的大概就是这首。

v1.2.9

“Stars hide your fires, let me rest tonight.”

(群星啊,掩住你们的火光,让我今夜得以安歇。)

——莎士比亚《麦克白》,有改动

原文是“Stars, hide your fires; / Let not light see my black and deep desires”——麦克白在谋划弑君前的独白。维护者把后半句改成了“let me rest tonight”,杀意变成了困意。

发布于2025-11-27,同样修复回归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, v1.4.0-rc.1, v1.3.1, v1.2.7

这四个版本(2025年9-10月间)全部引用了大友克洋的《阿基拉》(AKIRA):

“私の役目は信じるかどうかではない。行うかどうかだ。”(我的职责不是去相信与否,而是去执行。)

“おめェもボスになったんだろぉ?”(你也成为老大了对吧?)

“この瓦礫の山でよぉ”(在这堆瓦砾山中啊)

“さんをつけろよデコ助野郎!”(给我加上“先生”啊,你这呆瓜!)

看起来维护者在这段时间集中看了一遍(或重温了一遍)AKIRA。v1.3.1是1.3系列的首个补丁版本,修的全是1.3.0遗留的边角问题——CPU亲和性继承、rootfs传播状态、seccomp代理泄漏,所以“在这堆瓦砾山中”貌似是有几分道理。

v1.3.2

“Ночь, улица, фонарь, аптека…”

(夜,街道,路灯,药店……)

——亚历山大·勃洛克(Alexander Blok),俄国诗人

发布于2025-10-03,修复cgroup v1到v2的CPU权重转换等小问题。勃洛克这首诗写的是一种无尽循环的宿命感——夜、街道、路灯、药店,然后药店、路灯、街道、夜,永远如此。拿来形容“修完旧bug来新bug”的日常倒是很合适。

v1.3.0

“Mr. President, we must not allow a mine shaft gap!”

(总统先生,我们绝不能允许出现矿井差距!)

——电影《奇爱博士》(Dr. Strangelove)

发布于2025-04-29,v1.3首个正式版本。这个版本最大的意义不在技术细节,而在于runc开始采用全新的版本发布和长期支持策略,正式宣布v1.1系列停止支持。电影里这句台词讽刺的是冷战军备竞赛中的荒诞逻辑。

v1.3.0-rc.2

“Eppur si muove.”

(然而它依然在转动。)

——伽利略(传说)

发布于2025-04-09,修复rc.1引入的回归问题:错误读取了宿主机而非容器内的/etc/passwd来设置HOME环境变量。rc.1刚发布就出了回归bug,但项目整体还是在向前走——“然而它依然在转动”。

v1.2.6

“Hasta la victoria, siempre.”

(直到最后的胜利,永远如此。)

——切·格瓦拉

发布于2025-03-17,修复runc exec的time namespace处理和旧内核兼容性问题。

v1.3.0-rc.1

“No tengo miedo al invierno, con tu recuerdo lleno de sol.”

(我不惧怕严冬,因为对你的回忆充满了阳光。)

发布于2025-03-04,1.3.0首个候选版本。包含对libcontainer的破坏性API变更、正式支持OCI runtime-spec 1.2.1、新的版本发布与长期支持策略。一个承前启后的大版本。

v1.2.5

“Мороз и солнце; день чудесный!”

(严霜与阳光;多么美妙的一天!)

——亚历山大·普希金《冬天的早晨》

发布于2025-02-14。这个版本专门绕过了一个上游systemd的回归bug,该bug严重影响了NVIDIA GPU在容器中的工作负载。当一个折磨人的workaround终于跑通时,心情大概确实像严冬里突然放晴。

v1.2.4

“Христос се роди!”

(基督降生了!)

——东正教传统的圣诞节问候语

发布于2025-01-07,东正教圣诞节当天。技术上则是一次无奈的妥协:v1.2.0出于安全考虑移除了tun/tap默认白名单,结果导致Docker和Podman大面积故障,这个版本把它加回来了。圣诞礼物。

v1.2.3

“Winter is not a season, it’s a celebration.”

(冬天不是一个季节,而是一场庆典。)

——Anamika Mishra,印度作家

发布于2024-12-11,修复了共享根文件系统中并发创建挂载点的EEXIST错误(曾导致BuildKit故障)和旧内核eBPF兼容性退化。

v1.2.2

“Specialization is for insects.”

(专业分工是给昆虫准备的。)

——罗伯特·海因莱因《时间足够你爱》

发布于2024-11-16,修复rootless容器在只读cgroup环境下的删除失败问题。海因莱因原文的意思是“人类什么都该会一点”,用在runc这种需要适配千奇百怪宿主环境的基础组件上倒也合理。

v1.2.1

“No existe una escuela que enseñe a vivir.”

(没有一所学校能教人如何生活。)

发布于2024-11-01,包含影响SELinux发行版的关键修复,并完全移除了刚在1.2.0中引入但局限性过大的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)日语版台词

发布于2024-10-22,1.2.0正式版。引入了基于overlayfs的/proc/self/exe克隆保护机制,完善了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.”

(尊敬的先生,您是如何渡过这洪水的?朋友,我不停歇也不挣扎,就这样渡过了洪水。)

——佛教经典《相应部》

发布于2024-10-07,修复ppc64le下seccomp兼容性问题和旧内核导致容器挂载泄漏到宿主机命名空间的高危缺陷。不急不躁,见招拆招。

v1.2.0-rc.3

“The supreme happiness of life is the conviction that we are loved.”

(生活中最大的幸福是坚信我们被爱着。)

——维克多·雨果《悲惨世界》

发布于2024-09-03,修复了CVE-2024-45310。

v1.1.14

“年を取っていいことは、驚かなくなることね。”

(变老的好处,就是不再会对事情大惊小怪了吧。)

——宫崎骏《哈尔的移动城堡》女主苏菲经典台词

发布于2024-09-03。v1.1系列的第十四个补丁版本了,什么场面没见过。

v1.2.0-rc.2

“TRUE or FALSE, it’s a problem!”

(不管是真还是假,反正这是个问题!)

发布于2024-06-26,引入大量新特性和破坏性变更,最低编译要求提升至Go 1.20。

v1.1.13

“There is no certainty in the world. This is the only certainty I have.”

(世界上没有什么是确定的。这是我唯一确定的事。)

——老普林尼(Pliny the Elder),古罗马学者

发布于2024-06-13,修复runc listrunc delete之间的竞态条件等问题。

v1.2.0-rc.1

“There’s a frood who really knows where his towel is.”

(那个家伙真是个明白人,知道自己的毛巾在哪儿。)

——道格拉斯·亚当斯《银河系漫游指南》

发布于2024-04-03,1.2分支首个候选版本。在《银河系漫游指南》里,“知道自己毛巾在哪”意味着你是个靠谱的、准备充分的人。这个版本升级支持了OCI runtime-spec 1.2.0,引入id-mapped bind-mount,以及两种新的CVE-2019-5736缓解机制。大版本出发前,先带好毛巾。

v1.1.12

“Now you’re thinking with Portals™!”

(现在你正在用传送门思维思考了!)

——经典解谜游戏《传送门》(Portal)宣传语与成就名

发布于2024-01-31,紧急修复CVE-2024-21626。这个漏洞的原理是runc内部泄漏的文件描述符被利用来在宿主机和容器之间打开了一条通道——攻击者字面意义上在两个隔离空间之间开了一扇“传送门”。

v1.1.11

“Happy New Year!”

(新年快乐!)

发布于2024-01-02。就是字面意思。

v1.1.10

“Śruba, przykręcona we śnie, nie zmieni sytuacji, jaka panuje na jawie.”

(在梦中拧紧的螺丝,无法改变现实中的处境。)

——斯坦尼斯瓦夫·耶日·莱茨(Stanisław Jerzy Lec),波兰思想家、诗人

发布于2023-11-01,修复cgroup相关问题和tmpcopyup的umask权限依赖。

v1.1.9

“There is a crack in everything. That’s how the light gets in.”

(万物皆有裂痕,那是光照进来的地方。)

——莱昂纳德·科恩(Leonard Cohen)的歌曲《Anthem》

发布于2023-08-11,修复v1.1.8引入的tmpfs回归bug(丢失sticky bit)。

v1.1.8

“海纳百川 有容乃大”

——林则徐

发布于2023-07-19。这个版本最大的亮点是正式加入了RISC-V(riscv64)架构支持。“海纳百川”恰如其分。

v1.1.7

“Ночевала тучка золотая на груди утеса-великана.”

(一朵金色的云彩,在巨人般的悬崖胸膛上过夜。)

——米哈伊尔·莱蒙托夫《悬崖》(俄国诗人)

发布于2023-04-27,1.1系列最后一个计划版本。

v1.1.6

“In this world nothing is certain but death and taxes.”

(在这个世界上,除了死亡和税收,没有任何事情是确定的。)

——本杰明·富兰克林

发布于2023-04-12,集中修复一系列cgroup问题。

v1.1.5

“囚われた屈辱は 反撃の嚆矢だ”

(那份被囚禁的屈辱,正是反击的镝矢。)

——《进击的巨人》主题曲《红莲的弓矢》歌词

发布于2023-03-29,紧急修复三个容器逃逸与提权漏洞(CVE-2023-25809、CVE-2023-27561、CVE-2023-28642)。再一次,容器逃逸,以及《进击的巨人》。

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.”

(起初什么都没有,然后砰的一声就爆炸了。)

——特里·普拉切特《死神学徒》(常被用作对宇宙大爆炸的幽默调侃)

发布于2022-06-09,修复s390x架构seccomp规则、systemd通信机制等底层疑难杂症。

v1.1.2

“I should think I’m going to be a perpetual student.”

(我想我将永远做个学生。)

——安东·契诃夫《樱桃园》(剧中人物特罗菲莫夫台词)

发布于2022-05-11,修复低危漏洞CVE-2022-29162(进程意外继承非空Linux capabilities)。

v1.1.1

“Violence is the last refuge of the incompetent.”

(暴力是无能者最后的避难所。)

——阿西莫夫《基地》

发布于2022-03-29,修复了多个在特定配置下不必要直接报错退出的bug——让runc遇事别动不动就“暴力”崩溃。

v1.1.0

“A plan depends as much upon execution as it does upon concept.”

(计划的成功,执行与构思同等重要。)

——弗兰克·赫伯特《沙丘》

发布于2022-01-17,1.1系列首个正式版。

v1.1.0-rc.1

“He who controls the spice controls the universe.”

(谁控制了香料,谁就控制了宇宙。)

——弗兰克·赫伯特《沙丘》

发布于2021-12-14,引入RDMA cgroup支持、seccomp SCMP_ACT_NOTIFY等大量新特性。连续两个版本引用《沙丘》,兴许是赶上了维伦纽瓦电影版上映。

v1.0.3

“If you were waiting for the opportune moment, that was it.”

(如果你在等待绝佳的时机,那就是现在了。)

——《加勒比海盗》杰克·斯派罗船长经典台词

发布于2021-12-06,修复CVE-2021-43784,虽然在现有版本中实际无法被利用。防患于未然。

v1.0.2

“Given the right lever, you can move a planet.”

(给我一个支点,我能撬动整个地球。)

——阿基米德名言,有改动

发布于2021-08-23,修复多个影响Kubernetes的问题,并实现了可重现构建。

v1.0.1

“If in doubt, Meriadoc, always follow your nose.”

(如果心存疑虑,梅里雅达克,跟着你的鼻子走就对了。)

——《指环王》甘道夫经典台词

发布于2021-07-16,1.0分支首个补丁版本。五年磨一剑的1.0.0发布后,真实生产环境立刻暴露出一堆新问题,只能凭直觉和经验在黑暗中摸索排查。

v1.0.0

“A wizard is never late, nor is he early, he arrives precisely when he means to.”

(巫师从来不会迟到,也从来不会早到,他总是在他觉得合适的时候准时出现。)

——《指环王》甘道夫经典台词

发布于2021-06-22。

从2016年的v1.0.0-rc1算起,runc的1.0正式版花了五年。五年,约422位贡献者,无数个RC版本。社区调侃了无数次“1.0到底什么时候发”,维护者用甘道夫的这句话做出了他的回应:巫师从来不会迟到。

v1.0.0-rc95

“Just when I thought I was out, they pull me back in.”

(就在我以为我已经金盆洗手的时候,他们又把我拉回去了。)

——《教父3》麦克·柯里昂经典台词

v1.0.0正式发布前的这段RC历程,本身就是一出好戏。

发布于2021-05-19,修复CVE-2021-30465。本以为RC阶段快结束了,又被拽回来了。

v1.0.0-rc94

“Time is an illusion. Lunchtime doubly so.”

(时间是一种幻觉。午餐时间更是如此。)

——道格拉斯·亚当斯《银河系漫游指南》

发布于2021-05-10,修复rc93的回归bug。RC的发布周期长到让人觉得时间本身都是幻觉。

v1.0.0-rc93

“I never could get the hang of Thursdays.”

(我从来都搞不定星期四。)

——道格拉斯·亚当斯《银河系漫游指南》

发布于2021-02-04,宣布进入特性冻结期。这个版本真的是在星期四发布的。

v1.0.0-rc92

“Almost, but not quite, entirely unlike tea.”

(几乎,但不完全,和茶毫无相似之处。)

——道格拉斯·亚当斯《银河系漫游指南》

发布于2020-08-06,紧急热修复。rc91“感觉快完美了”,但带了一个影响Docker的大bug。书中这句话形容的是一杯机器合成的、和茶毫无相似之处的难喝液体。

v1.0.0-rc91

“Just Hook a Right Over Here”

(就在这儿往右拐 / 就在这儿挂个钩子)

发布于2020-07-02。一句指路的日常口语,也是对该版本核心更新的双关:在这个版本中,社区期待已久的OCI Hooks机制终于被合并了。

v1.0.0-rc90

“We Have To Go Back!”

(我们必须回去!)

——美剧《迷失》(Lost)男主角杰克·谢泼德经典台词

发布于2020-06-02,这个版本的故事比引用本身更有意思。因为rc10在字典序上排在rc2前面,Go modules无法正确识别最新版本,维护者只好把版本号直接跳到rc90——代码和rc10完全相同,纯粹是为了修版本号排序。“我们必须回去!”就是字面意思。

v1.0.0-rc10

“Procfs Strikes Back”

(Procfs的反击)

——恶搞《星球大战2:帝国反击战》(The Empire Strikes Back)

发布于2020-01-24,热修复CVE-2019-19921。本以为快发1.0了,procfs相关安全漏洞又给了一记重击。

v1.0.0-rc9

“Watch out for that first step, it’s a doozy!”

(小心第一步,那可是个大麻烦!)

——《土拨鼠之日》(Groundhog Day)

发布于2019-10-05,热修复CVE-2019-16884。被困在无尽的RC循环里,每次试图迈向1.0的第一步都踩进新坑。

v1.0.0-rc8

“Oops, We Did It Again!”

(哎呀,我们又搞砸了!)

——布兰妮·斯皮尔斯《Oops!… I Did It Again》

发布于2019-04-26。rc7刚修完高危漏洞,结果引入了新的回归bug导致旧内核无法运行,很多用户反而没法升级来修漏洞。

v1.0.0-rc7

“The Eleventh Hour”

(最后时刻 / 危急关头)

发布于2019-03-28,紧急缓解CVE-2019-5736。眼看1.0要发了,在最后关头爆出高危容器逃逸漏洞。

v1.0.0-rc6

“For Real This Time”

(这次是真的了)

发布于2018-11-22,宣布进入特性冻结期。维护者信誓旦旦“这次真的要发1.0了”——这个flag立了将近三年。

v1.0.0-rc5

“The Final Stretch”

(最后的冲刺)

发布于2018-02-27。第一个副标题。如今我们知道,“最后的冲刺”又冲了三年多。

umoci

v0.6.0

“Please mind the gap between the train and the platform.”

(请注意列车与站台之间的空隙。)

——地铁的经典广播提示语

发布于2025-10-15,包含破坏性Go API变更。升级时请注意脚下安全。

v0.5.1

“🖤 Yuki (2021-2025)”

维护者Aleksa Sarai在发布说明中写道,过去四年里他写下的大部分代码,都是在这只名叫Yuki的猫趴在他胸口打呼噜时完成的。这个版本献给她。

发布于2025-09-06。

v0.5.0

“A wizard is never late, Frodo Baggins. Nor is he early; he arrives precisely when he means to.”

(巫师从来不会迟到,弗罗多·巴金斯。他也从来不会早到,他总是在他觉得合适的时候准时出现。)

——《指环王》

发布于2025-05-21。和runc v1.0.0用了同一句台词。有些话值得说两遍。

后记

这些手写的副标题没有任何实际功能。CI/CD流水线不会用到它们,容器也不关心屈原说了什么,只是,它们的存在本身就是一种声明:这些代码不是从虚空中自动生成的,它们背后站着具体的、会疲惫、会暴躁、会在深夜循环播放《吻别》的人。