vatt'ghern jaskier's ballads

2026.08.20 —— 今日 10 則

TODAY'S THREAD 今天有好幾則都在講同一件事:本來關起來的東西被打開,代價卻不一定對等——Mojo 把整個編譯器開源,DeepSeek 把 1.7T 參數的權重放上 Hugging Face,Spectre 的研究者把 Cloudflare Workers 裡本來已經修過的側信道又撬開了一次;Bun 的 Rust 重寫則反過來,維護者把溝通的門關上,PR 佇列堆到五千則。

10 items ai · 3 systems · 1 infra · 2 web · 1 backend · 3
0 / 10 read
#05

指令跟資料,LLM 分不出來

文章把 LLM 的核心弱點講得很白:「模型收到的指令與資料是同一串 token,這串序列裡沒有任何標記能區分命令與資訊」,這就是 prompt injection 能成立的根本原因。間接注入的例子是 EchoLeak——郵件裡藏著的指令能讓 Microsoft 365 Copilot 外洩內部檔案;真正造成傷害的模式被稱為「lethal trifecta」,也就是 agent 同時擁有私有資料存取、暴露在不可信內容之下、又有對外通訊管道這三個條件。供應鏈同樣有風險,nullifAI 這類手法能把反向 shell 藏進序列化的模型檔,Protect AI 檢查超過四百萬個模型,在超過五萬個模型裡標記出約 35.2 萬個不安全或可疑問題;建議的防線是縱深防禦疊起來,Meta 的「Agents Rule of Two」則建議 agent 最多只能同時具備三種高風險屬性裡的兩種。

read source → llm-security

#07

編譯器最後一塊也開源了

Modular 在 8 月 18 日把整個 Mojo 編譯器、工具鏈與標準函式庫原始碼放上 GitHub,授權是 Apache 2.0 附 LLVM exceptions;標準函式庫早在 2024 年就開放外部貢獻,其後又釋出「數十萬行用 Mojo 寫的 kernel 程式碼」,這次補上的是最後、也最核心的一塊。建置流程走 Bazel,一行 ./bazelw run --config=build-mojo 就能從原始碼編出編譯器;官方目前仍限制外部貢獻編譯器本體,目標是「今年底前」開放。

read source → deep read mojo

#08

1.7T 參數,MIT 授權放出來

DeepSeek-V4-Pro-0813 是正式版,取代先前的 preview,架構是 1.7 兆參數的 MoE,搭配 DSpark 模組做推測解碼,高/max 推理力度下建議輸出長度上限 384K token。官方說法是這一版「大幅強化 agentic 能力,生產環境的表現也有提升」,並支援低、高、max 三種推理力度;在 Terminal-Bench 2.1 拿下 87.9 分,Toolathlon-Verified 74.1 分,DSBench-FullStack 71.1 分,跟主流閉源模型並列。權重以 MIT 授權開放在 Hugging Face 上,部署建議走 vLLM 或 SGLang 並開啟 DSpark 推測解碼,agentic 情境下官方建議 temperature=1.0、top_p=0.95。

read source → deepseek

#06

48 位元的位址,只吃 12 KB

這篇從頭建立虛擬記憶體的機制:x86-64 用四層分頁表(PGD、PUD、PMD、PTE),48 位元虛擬位址拆成四段 9 位元索引加 12 位元偏移,稀疏配置讓一個已映射分頁只占約 12 KB,而不是攤平表格所需的 256 GiB。TLB 快取已完成的位址轉換,「只要工作集大小落在 TLB 容量內(通常幾百到幾千筆),轉換結果就會留在快取裡,很少需要真正走訪分頁表」;分頁錯誤發生時核心才配置實體頁框並清零,這個延遲配置機制同時也是一種安全保證。Fork 一開始靠 copy-on-write 讓親子行程共用實體頁框,直到其中一方寫入才觸發錯誤、配置並複製那一頁;mmap() 則讓 PTE 直接指向核心的 page cache,省掉 read() 需要的使用者緩衝區複製,但冷分頁仍然需要缺頁才能建立映射。

read source → virtual-memory

#02

從 120 bit/h 到 12 bit/s,側信道回來了

研究者在 Cloudflare Workers 上找到新的 Spectre 洩漏路徑——利用 obj instanceof ObjP 的分支誤預測,讓 CPU 投機執行 obj.ptr[0],藉此洩漏 TypedArray 背後儲存區的 64 位元指標。搭配樹狀 pseudo-LRU 快取汰換放大單次記憶體存取的訊號,實際洩漏速率來到「12 bit/s,準確率 99%」,遠快於 2021 年那一版約 120 bit/h 的速度。攻擊者靠 Durable Objects 搭配 WebSocket 心跳把執行環境留在原地,繞過原本 30 秒的 CPU 時間上限;Cloudflare 已在 2025 年 9 月導入 Memory Protection Keys,並整合 V8 Sandbox,目標是把原始 64 位元指標從大部分 JavaScript heap 裡拿掉。

read source → deep read spectre

#09

一個玩笑買下的網域,變成軍事情報來源

sondehub.org 在 2018 年 5 月 12 日以玩笑心態註冊,最初只是把 Habhub 加上探空氣球濾鏡重新導向;後來長成完整的探空氣球追蹤平台,帶自己的 API 與即時資料流,其中的「反向預測」功能能從風場反推發射地點,意外連軍事砲兵陣地都能被標定出來。2024 年 12 月服務開始遭遇類似 DDoS 的攻擊,分析發現預測請求集中在烏克蘭與俄羅斯邊境一帶,疑似被用於無人機標定;烏克蘭一方據稱把它用於無人機作戰,俄羅斯則像是在反過來攻擊這個服務,美國軍方也大量介入,除了要資料還開了支援工單。開發者後來寫了本地端的預測軟體降低對 API 的依賴,向 AWS 求助時特別強調「服務中斷可能造成人命損失」。

read source → osint

#01

PR 排到五千個,「下一版」說了三個月

Bun 從 Zig 改寫成 Rust 的計畫,讓外界從檢視效能轉向檢視溝通與程式碼品質。作者原本承諾 7 月 7 日出 1.4,距上一個穩定版至今已經三個月,中間只剩「下一版就會有」的重複貼文;儲存庫堆了超過 5,000 個未處理 PR,文章作者形容是「我看過最大的數字」,GitHub 官方建議單一分支的安全上限其實低於 1,000。Zig 語言作者 Andrew Kelley 讀過程式碼後直言「我們越看越心驚——到處是縫縫補補的 hack」,而重寫打的旗號是記憶體安全,Rust 版本裡的 unsafe block 數量卻顯示這個承諾沒有真正兌現;同一個月裡自動化 agent 貢獻了 15,800 次 commit,人類負責人只有 790 次。

read source → deep read bun

#03

kNN 跟 ANN 誰上場,SQL 自己算

Azure SQL 的混合搜尋不是固定選一種策略,而是「依成本與選擇性動態切換 kNN 與 ANN 向量搜尋」;全文搜尋那一側用 BM25 排序,搭配語言感知的斷詞與詞形還原,讓查詢「run」也能對到「ran」「running」。向量那一側靠微軟研究院的 DiskANN 技術,在數百萬到數十億筆向量規模下做近似最近鄰搜尋而不必吃下過多記憶體;兩條路徑算出的排序再用 Reciprocal Rank Fusion 合併成一份結果,可依應用需求調整權重。查詢改寫、意圖偵測、結果融合與重排都能直接在 SQL 裡跑完,檢索不必再外掛一套獨立的 orchestration 系統。

read source → vector-search

#04

每一份多出來的資料,都欠一次同步

這篇整理的是讀寫路徑分家的常見演進順序:先在篩選欄位上加索引,撐不住流量後在查詢前面掛一層快取,讀多寫少的報表流量再切到獨立的 read replica。文章點出的代價很直接——「前面每一種修法,都是把某份資料的副本放到來源之外的地方」,而副本與來源之間的同步就成了新的 bug 來源,實例是使用者更新個人資料後卻在別處看到舊版本。後續要談的 denormalization、materialized view、專用讀取儲存、fan-out 與 CQRS,都是同一個取捨的不同版本;文章也把「一致性」拆成兩種不同定義,把兩者混為一談正是這類 bug 的根源。

read source → system-design

#10

存活探針比啟動探針先開火,是真的 bug

文章把三種探針的角色講清楚:startup 探針偵測應用是否啟動完成、readiness 探針決定要不要接流量、liveness 探針失敗則會觸發重新啟動容器,三者都是由每個節點上的 kubelet 發出。作者發現一個真實的 Kubernetes bug——「liveness 探針不應該在 startup 探針成功之前就先開火」,在 k3s、minikube、kind 上用 v1.36.2 都重現得出來,看起來是 v1.35.0 引入的迴歸。failureThreshold 設太低會直接造成 crash-loop,threshold=1 時「單一次暫時性失敗」就能讓 pod 被踢出 service,threshold=2 就安全得多;startup 探針的 periodSeconds 從 1 秒改成 5 秒,會讓整個部署時間從約 11 秒拉長到 19、20 秒,因為新副本得先通過探針舊副本才會縮編。

read source → kubernetes

today's deep reads

deep · 01 PR 排到五千個,「下一版」說了三個月 deep · 02 從 120 bit/h 到 12 bit/s,側信道回來了 deep · 03 編譯器最後一塊也開源了