Zig Fmt 的「可引導性」設計哲學
matklad.github.io · 2026-05-08
Zig 核心成員 matklad 在 2026-05-08 發表的文章中,深入剖析 zig fmt 之所以成功的根本原因:它是「可引導的(steerable)」——不強加單一排版,而是讓開發者透過明確的代碼訊號選擇排版策略。
核心改動
zig fmt 的引導機制以尾逗號(trailing comma)為主要訊號:函式呼叫若無尾逗號,則參數排成一行;有尾逗號則每個參數獨占一行。這讓開發者得以精確控制排版,而非靠「猜測格式化器意圖」。
陣列初始化則更進一步:若第一個換行出現在第 N 個元素後,格式化器會以 N 為欄寬對齊後續元素,形成欄位對齊的視覺矩陣。此設計讓命令列參數、查找表等密集資料的排版保持可讀性。
// 三欄對齊範例
const table = .{
.a, .b, .c,
.d, .e, .f,
.g, .h, .i,
};設計取捨
作者認為格式化器能做的決定中,影響最大的是開發者自行決定的部分:空白行的插入、變數命名、程式結構。格式化器處理的「剩餘 10%」才是工具的責任範圍。相較於「格式化器猜測」的方式,引導式設計讓工具成為開發者意圖的執行者,而非主導者。
作者也展示了以 ++(陣列串接)搭配換行位置,靈活調整每行元素數量的技巧,體現了 Zig 格式化體系給予開發者的控制粒度。
影響範圍
此設計哲學對正在開發程式語言格式化工具的社群具有參考價值:明確的引導訊號比模糊的推斷更能建立長期信任。Zig 社群目前仍在討論部分邊緣案例的格式規則,此文為相關討論提供了設計原則的基礎。
原始來源:matklad.github.io
Linux 核心 killswitch:漏洞揭露到部署修補之間的緊急緩解原語
Linux Kernel Mailing List · 2026-05-07
Linux 核心開發者 Sasha Levin 在 2026-05-07 提出 killswitch 補丁,一個以 kprobe + function error injection 為基礎的 per-function 緊急緩解機制,讓管理員在正式修補版本部署前,能夠在不重啟系統的情況下讓有漏洞的核心函式直接返回指定錯誤值,而非執行其主體邏輯。
核心改動
killswitch 的運作方式是在目標函式的入口點掛載 kprobe,pre-handler 執行時透過 override_function_with_return() 跳過函式主體並以指定值返回。管理員透過 securityfs(/sys/kernel/security/killswitch/control)下指令:
echo "engage af_alg_sendmsg -1" > /sys/kernel/security/killswitch/control也支援 boot parameter killswitch=fn1=<val>,fn2=<val>,可在整個機群重啟前預先設定。
規格細節
依賴 KPROBES && HAVE_KPROBES_ON_FTRACE、HAVE_FUNCTION_ERROR_INJECTION、SECURITYFS,跨 x86、ARM 等多架構可用。明確不是 livepatch——沒有替代實作,函式只是返回選定值。Exported kernel API:
int killswitch_engage(const char *symbol, long retval)int killswitch_disengage(const char *symbol)bool killswitch_is_engaged(const char *symbol)
影響範圍
對 AF_ALG、ksmbd、nf_tables、vsock 等特定子系統的高危漏洞(如 CVE-2026-31431 algif_aead 提權),killswitch 提供了從漏洞公開到修補核心部署之間的零重啟緊急緩解窗口。補丁目前在審查階段,尚未合併主線。