vatt'ghern jaskier's ballads

把排程邏輯寫死在核心裡、用一個 \0 標記字串的結尾、覺得給 agent 更多工具一定更好、把「多加一個依賴」當成免費——這週有一半的文章,都在對著一個跑了很久、早就沒人再多看一眼的預設值,重新問一次「它還成立嗎」,然後量出一個往往不成立的答案。

第 30 週 —— 重新盤問那些預設值

這週的主軸

月十四到二十日,五天五篇 roundup、十二篇 deep story,主線不在哪個新東西發布,而在一種姿勢:把一個沒人再質疑的預設值撿起來,翻過來問「這真的還對嗎」。不是唱反調式的懷疑,是拿 benchmark、拿延遲數字、拿一段實測去逼問——然後多半量到「原本以為的」跟「實際上的」中間有一道差。這週特別多這種故事。

最乾淨的一例是 共用工具換上了,Copilot Code Review 卻變差。給 code review agent 換上更完整、維護更好的共用工具,理論上是一次乾淨的升級;GitHub 內部 benchmark 卻量到相反的結果——同一批審查任務,成本變高,抓到的問題反而變少。真兇不是工具本身,而是指令跟 benchmark 沒跟著任務一起換。「更好的工具=更好的結果」這個預設,在這裡直接被自家數字打臉。

換到系統那層,Meta 把排程邏輯搬進一支可插拔的 BPF 排程器挑戰的是更硬的預設:執行緒排程本來寫死在核心的 CFS 與 EEVDF 裡,改一次就要重編核心。Meta 把它搬進一個開機後才載入、隨時可以整支換掉的 BPF 程式——初次上線廣告服務 p99 延遲降了 28%,之後完全沒再碰核心版本、純靠重新啟動一個 user-space 行程迭代策略,又再降了 60%。被拆掉的不是效能,是「改排程就要等下一次核心升級」這道門檻。

最極端的預設藏在最底層。C Strings:一個 50 年的錯誤盯上的是那個 8 位元的 \0——它決定 C 字串在哪裡結束,這個設計跟著 C 超過五十年,久到沒人記得它其實只是 1970 年代記憶體吃緊時的權宜之計。作者主張把長度變成一個顯式欄位,換來零拷貝子字串、乾淨的二進位相容,以及不必為了知道字串多長而重新掃一遍;Redis 自己動手寫了 SDS,早就替這個立場投過票。

連 roundup 這頭也在同一條線上。GitHub 工程團隊那篇 「答應一件事的成本已經變了」主張 AI 把成本結構翻了過來——寫程式幾乎免費,但 review、擁有與長期維護那份程式的成本沒變,於是他們把一個生成出來的 patch 重新定義成「詢價」而不是交付物。而 lobste.rs 把生產資料庫從 MariaDB 收進 SQLite,正面挑戰的則是「站點就該配一台獨立資料庫」這個直覺。從一個依賴、一顆資料庫、一支排程器到一個字串終止符,這週反覆在做的,是把繼承來的預設值重新標價。

沒被合稱的個別亮點

Homescale:從快照長出可寫的資料庫分支是這週最漂亮的系統手法。一個 100 GB 的資料庫要多生一條可寫分支,Homescale 不先複製那 100 GB,而是靠 Ceph RBD 既有的機制——clone 剛生出來跟來源共用所有資料,只有第一次寫入才真正分家。這是七月十七日那一整天「把綁死在中心的東西拆開」的縮影,同一天還有把推論搬進瀏覽器、把預訓練散到網際網路的兩篇作陪。

Roc 用 487 天把 Rust 編譯器改寫成 Zig是這週最誠實的一篇。三十幾萬行的 Rust 編譯器,因為一個叫 lambda set resolution 的架構問題卡到必須大改,團隊乾脆整個重寫成 Zig——487 天後功能追平,incremental build 從 10 秒掉到理論上的 35 毫秒,記憶體損毀 bug 從 21 起降到 10 起,但編譯期少了 borrow checker 幫忙擋著。它沒把重寫寫成勝利宣言,代價跟收穫一起攤開,這是這週 narrative 裡最值得收藏的一篇。

Thinking Machines 開源 Inkling:975B/41B 稀疏 MoE是這週 AI 側最大的一筆。model card 上寫著 975B total、41B active——同一顆模型,975B 個參數確實存在,但每算一個 token 真正被喚醒的只有 41B,中間的落差不是模型縮水,是路由做出的選擇。一個把這種稀疏度攤在開放權重上示範的多模態模型,值得盯著看它接下來怎麼被人接手。

jvns:實際跑 SQLite 學到的幾件事則是這週最實用的一篇。一個在 4000 列資料表上跑的全文搜尋查詢要價 5 秒,下一行只是敲進 ANALYZE,同一個查詢立刻變成 0.05 秒——這個反差比任何「SQLite 夠不夠快」的爭論都更值得記下來。整篇是那種親手跑過才寫得出來的筆記,沒有二手轉述的味道。

Regressive JPEG:把整段動畫塞進一張漸進式 JPEG是這週的奇技一筆。把十張裁到十六分之一解析度的縮圖一張張塞進同一個漸進式 JPEG 的 scan 序列,Chrome 會照單全收地往下解,實測大約撐到第 90 張才放棄。這不是瀏覽器的 bug,是 JPEG 規格本身留下的合法縫隙——又一個沒人再看一眼的預設,被人翻出來玩到極限。

本週動向

把這週(07/14–07/20)跟上週(07/07–07/13)放在一起量,最醒目的不是哪個 domain 動了,而是總量:上週只有 26 則,這週衝到 54 則,幾乎翻倍——上週是個明顯偏少的一週,這週產出回到滿載。domain 盤子本身幾乎沒動:最大的位移是 infra 從 23.1% 退到 19.3%(−3.8 pp),ai、systems、web 三者同步從 19.2% 微升到 21.1%(各 +1.9 pp),backend 從 19.2% 收到 17.4%(−1.8 pp),沒有一個 domain 碰得到值得寫進敘事的 10 pp 門檻。這週的變化在量,不在盤子的形狀。

tag 這層倒是換了一批人上桌,只是換得溫和——沒有任何 surge、也沒有任何 faded,全是新面孔進榜。sqlite 以 4 次領頭,這週它同時出現在 jvns 的實測、Homescale 的快照分支與 lobste.rs 的搬遷裡;open-weightssecurity 各以 3 次跟上,前者靠 Inkling,後者靠 Cursor 的 git.exe 0day 與 .al 的 DNSSEC 事故。這是一個新題材集體冒頭、但還沒有誰連燒兩週的一週。

domain 分布:上週(07/07–07/13)→ 本週(07/14–07/20) 總量 26 則 → 54 則(量幾乎翻倍);盤子最大只動了 infra 的 −3.8 pp infra −3.8 pp ↓ 上週 23.1% 本週 19.3% ai +1.9 pp ↑ 上週 19.2% 本週 21.1% systems +1.9 pp ↑ 上週 19.2% 本週 21.1% web +1.9 pp ↑ 上週 19.2% 本週 21.1% backend −1.8 pp ↓ 上週 19.2% 本週 17.4%
每個 domain 一區,上週(淡)/本週(實)各一條 bar,按 |delta_pp| 排序。真正的變化不在盤子——最大位移只有 infra 的 −3.8 pp,ai、systems、web 三者更是同步 +1.9 pp——而在總量:26 則翻倍到 54 則,上週的低產出這週補了回來。

一週的形狀

五天、五篇 roundup、十二篇 deep story。這週的形狀跟上週剛好相反:上週是 technical 與 investigation 兩種 archetype 壟斷、narrative 與 freeform 雙雙掛零;這週五種 archetype 全部到齊——technical-deep-dive 4 篇領頭,investigation、narrative、explainer、freeform 各 2 篇,攤得很平。換句話說這週不只在拆機制,也在講故事(Roc 的重寫、Cursor 的 0day)、也在從零解說(Inkling、LiteRT.js),敘事調性比上週寬。

domain 這頭最值得記的一筆是 web 回血:cursor 的 git.exe、LiteRT.js 的瀏覽器推論、Regressive JPEG 的漸進式解碼,web 一口氣拿下 3 篇 deep story,追平 ai 與 systems——這在最近幾週 web 連續偏弱的背景下算是明顯的反彈。infra 2 篇(DNSSEC、Homescale),backend 只有 1 篇(jvns 的 SQLite)落單,是這週形狀上唯一偏薄的一格。

deep archetype(共 12 篇) technical 4 investigation 2 narrative 2 explainer 2 freeform 2 domain(共 12 篇) ai 3 systems 3 web 3 infra 2 backend 1
上半是 archetype、下半是 domain。這週 archetype 五種全到齊、technical 4 篇領頭,比上週的 technical+investigation 兩強壟斷平得多;domain 上 ai/systems/web 各 3 篇並列,infra 2、backend 僅 1 篇落單。

12 篇 deep story × 5 天(07/14、07/15、07/16、07/17、07/19)

五天、十二篇 deep story,archetype 在前、domain 在尾。主軸那股「重新盤問預設」的勁集中在 07/14(Copilot、Meta 排程器)與 07/16(C strings、Cursor);07/17 則整天在做「拆開中心」的另一條線。

下一週可能會展開的線索

最值得盯的是開放權重這條線。Inkling 把 975B/41B 的稀疏 MoE 攤在開放權重上,open-weights 這個 tag 這週也剛冒頭(3 次)。真正的試煉是下週:會不會出現第一篇「我把 Inkling 這種等級的稀疏模型接下來自己跑、自己微調」的實戰帖,而不只是發布當天的規格解讀。稀疏度好看是一回事,社群能不能真的接住它是另一回事。

另一條是 agent 碰檔案系統的界線。Cursor 的 git.exe 0day 到文章發布當下都還沒修,能做的緩解只剩路徑規則與隔離環境;而 07/19 的 roundup 也在問「該不該讓 AI agent 碰你的檔案系統」。這兩條撞在一起,下週很可能會有人把「編輯器/agent 到底該以什麼權限開啟一個陌生 repo」這個問題正面攤開——這是一個已經有真實 CVE、卻還沒有乾淨答案的題目。

這週的落點——「重新盤問預設值」不是為反對而反對,而是承認很多預設當初只是某個時空下的權宜:核心排程器如此、\0 字串終止符如此、「更多工具更好」與「多加一個依賴很便宜」也是如此。這週一篇接一篇地示範,把這些沒人再看一眼的預設撿起來重新標價,量出來的往往是一個更誠實、有時也更便宜的答案。五天、十二篇,從一支可插拔的排程器到一個 ANALYZE 指令,做的是同一件事:別讓「一直都這樣」變成「只能這樣」。