32KB 對 20KB:Systemd 的 Rust 支援,是被設計過的邊界
從 systemd 宣布支援 Rust 末端組件的構建介面看起,觀察一套老牌 C 專案如何把新語言的進入方式設計成可控的邊界。
科技 設計評論 約 3 分鐘閱讀
2026 年 10 月 26 日,Solidot 轉述 Phoronix 的報導:Systemd 正式支援以 Rust 開發程式。這則消息裡最有設計感的部分,並不是「支援了 Rust」這個標題本身,而是支援的方式。核心的 systemd 函式庫依然只收 C 程式碼,Rust 被允許的位置是程式與末端組件。換句話說,新語言被安排在系統的外圍,核心仍由舊語言守著。
這是一種介面設計。就像一棟老建築開放新租戶進駐,但只租外側的店面,不動承重牆。Systemd 開發者明確表示不打算把現有 C 程式碼移植到 Rust,這句話本身就是設計文件:Rust 在這個專案裡的角色被預先限定,不承諾全面翻修。
第二個細節在建構系統。所有 Rust 程式碼一律經由 Meson 構建,不使用 Rust 生態慣用的 Cargo,唯一強制的要求是以 C 語言鏈接。對熟悉 Rust 的人來說,這幾乎是反直覺的安排。Cargo 之於 Rust,就像整套原廠工具箱;放著不用,改讓既有的 Meson 流程統一發號施令。這不是技術做不到,而是專案選擇讓建構介面維持單一入口。工具鏈的一致性,被放在語言生態的便利性之前。
第三個可指認的數字是體積。報導給出一組對照:同一個測試程式,Rust 版本 32KB,C 版本 20KB。差距存在,但量級不大,而且被攤在文件裡說明。這組數字的功能類似產品規格表上的誠實標註,成本先行揭露,而不是等使用者自己發現。
實際上,這種「把承諾設計成可核對的表格」的做法,在其他 Rust 工具專案裡也見得到,例如我們先前觀察過的Snow Shot 用實測數據把輕量承諾排成表格。差別在於,Snow Shot 是新作品用數據自證,Systemd 則是二十餘年的老專案,用一份有邊界的支援聲明管理風險。前者在擴張語彙,後者在收縮入口。
還有一個容易被略過的措辭:目前的 Rust 支援是可選的。可選,意味著預設狀態下什麼都不變,下遊發行版與開發者可以完全不碰這件事。這是保守介面的典型手法,新功能以開關形式存在,主流程照舊。與許多專案急著把新語言寫進預設路徑相比,Systemd 的步調慢得多,也清楚得多。
把這幾個決定放在一起看:Rust 限定在末端、建構走 Meson 不走 Cargo、鏈接強制經過 C、體積差距如實公布、支援設為可選。每一項都在回答同一個問題:如何讓一個以 C 為骨幹的基礎設施專案,在不推翻自己的前提下吸收新語言。答案不是擁抱,也不是拒絕,而是畫一條清楚的線,並把線的位置寫進文件。
對基礎軟體而言,這條線本身就是設計。Systemd 這次的 Rust 支援,示範的是一種節制的開放:門開了,但門框、門鎖與門禁規則,全部留在原來那一側。