【草稿】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流程中,這些手寫的、帶有溫度的名字提醒我們:冰冷的機器背後,是鮮活的靈魂。他們不僅定義了雲原生世界的基礎法則,也用自己的方式表達了對這個世界的熱愛與幽默。
在動輒影響全球雲基礎設施的嚴肅開發中,請務必珍惜這群頂尖極客們固執留下的這一份“不正經”。因為正是這點看似無用的幽默、碎碎念與獨屬於人類的浪漫,構成了開源世界最無法被計算、也最熠熠生輝的靈魂。