2026.05.22 —— 今日 10 則
TODAY'S THREAD C# 把 unsafe 從「語法宣告」重新定義為「呼叫端契約」、LinkedIn 在一場 hashbrown 凍結裡把 jemalloc 與 mmap_lock 的隱性合約挖出來、illegalcode.net 的 RFC 想把 dependency cooldown 換成 phased rollout——今天的事都繞著「把隱藏在語法、預設、政策裡的契約往外搬」這條線展開。
Stripe 開出自家 agent benchmark——SOTA 模型解得了 subscription,解不了「一個專案」
Stripe 用真實 sandbox 帳號把 webhook、subscription、refund 等整合任務切成可量測的 benchmark,丟給現役 SOTA LLM。結果:有界範圍的子題大部分能過,但需要跨多天、累積上下文的「整個整合專案」仍然會卡。對於正在評估「把 SDK 整合外包給 agent」的團隊,這是第一份來自支付平台自己的、用真錢和真 API 跑出來的基準。
Dropbox 把內部 coding agent 平台 Nova 拉到聚光燈下——sandbox、tool routing、eval 管線整套自製
Nova 是 Dropbox 給內部 fleet 自己用的 agent runtime:標準化 sandbox、工具路由、policy gate 和 eval 管線,把外部框架在 demo 場景跑得通卻在 hyperscaler 量級壞掉的問題各自解一遍。對任何在公司內架 agent infra 的人,這是一份「不是賣的、是用的」對照樣本——文章具體寫到 tool routing 如何在數百種 internal API 上做 disambiguation。
Google Tensor SDK 進 beta——PyTorch 與 TFLite 終於能直接打到 Pixel TPU
SDK 把 Pixel 上的 Tensor 處理器開放給開發者:可以直接把 PyTorch / TFLite 模型編譯後部署,並由 SDK 處理 CPU / GPU fallback、量化路線、記憶體配置。對任何做 on-device 推論的人,這是把「裝置端 NPU 只能走廠商 toolchain」的限制打開了——配合後續的 LiteRT-LM,on-device GenAI 的延遲基線會被重畫一遍。
C# 把 unsafe 從「我關掉檢查」重新定義成「我承諾這份契約」——.NET 11 的 caller-facing 安全
.NET 11 把 unsafe 不再只是一個關掉 borrow / null / bounds check 的旗號,而是讓函式簽名把「呼叫端要負責什麼」明確標出來:對齊、生命週期、所有權傳遞、NULL 前提。明確意圖是讓 LLM 在生成 .NET 程式碼時能看到「呼叫端契約」、減少 hallucinate 的安全條件。對任何要把 AI-assisted code 接進 .NET 的人,這是把 memory safety 從「祈禱呼叫者讀完 docstring」往「契約寫進型別系統」推一步。
Uber 把資料庫保護從「死板 QPS」換成「依成本動態 shed」——peak hour 不再手動降流量
原本每張表配靜態 QPS cap,遇到大量慢 query 一起進來就一起拖死;新做法把 query 成本(rows scanned、joins、index miss)與 DB 餘量訊號結合,動態決定要 backpressure 哪一類 client。同時保留 priority queue 給核心交易——付款還是過,dashboard 等等。對任何在管理共用 DB 又不能在 peak 手動下調 cap 的人是一份 SRE 教材。
Notion 把 search / analytics / AI / event 全部改造成 region-aware——control plane 怎麼撐住
不是「歐洲擺一台 DB」那層,而是讓寫入路徑、分析管線、AI 訓練資料、widget event 全都知道 region 邊界。Notion 把每筆使用者資料先做 residency 標記,再讓後續每段管線各自尊重;同時保留 cross-region replication 給 fallback。對任何要在 SaaS 加 data residency 又不想複製整套 stack 的團隊,這是當代的 control-plane 範本。
RFC:把 dependency cooldown 換成 phased rollout——一份重新分配風險的提案
作者反對近年流行的「依賴更新要等 cooldown 期才能升級」做法:cooldown 統計上對小套件不公平、對抗供應鏈攻擊也效果有限。改提 phased rollout——把每次更新依下游影響規模分階段曝光、可被消費端 opt-in 接收特定階段。對任何在維護 OSS 或設計企業 npm / PyPI policy 的人,這是一份從統計面重新檢視「等多久才能升」的論證。
XSS 對 Passkey 是致命的——attestation: none 被忽略的副作用
Scott Helme 拆解一個常被忽略的 WebAuthn 設定:當網站開 attestation: none,被 XSS 利用後攻擊者可以靜默地用 navigator.credentials API 在受害者帳號註冊一把自己的 passkey——而且這把 key 看起來是 phishing-resistant,後續的 risk engine 還會更信任它。修補:把 attestation 級別提升、credential 註冊跳到 step-up flow、server-side 監控異常 ceremony。
LinkedIn 的五千八百萬 key 凍結——一場 HashMap resize 教會的 jemalloc 記憶體預算
一個 Rust 服務每隔幾天會「凍」上十幾秒——CPU 沒事、cgroup 沒被 throttle、Envoy 沒抱怨。線索藏在 process-wide 的讀寫號誌:當索引長到 58,720,256 把 key 那一刻,hashbrown 的 doubling 觸發一次塞爆 jemalloc 大 chunk 路徑的 mmap,所有要碰記憶體的 thread 都被 kernel mmap_lock 擋在門外。文章用 eBPF off-CPU profile 把這條 rw_semaphore 從 50 萬個 fleet 樣本中找出來。
Square 揭 EventBridge 跨帳號劫持——AWS event flow 的隱形路徑
Square 安全團隊揭露 AWS EventBridge cross-account event flow 常被忽視的攻擊面:當帳號 A 把 rule 寫成把事件投到帳號 B 的 bus,正確設定下要兩邊都明確授權;實務裡常見設定漂移、IAM 條件式錯誤或缺 SCP——攻擊者能從錯設的 source 灌假事件、觸發目標帳號的 Lambda 或 Step Functions。文章附 audit checklist 與 IaC 範本。
today's deep reads
C# 的 unsafe 重新對焦——.NET 11 把記憶體安全從語法搬到契約
為什麼 .NET 11 要把 unsafe 從一個全有全無的旗號改成「呼叫端要保證什麼」的契約?哪些舊有的 unsafe 慣用法會被推著走向哪一條新形式?這個改變在 AI 生成程式碼的情境下又改變了什麼?
LinkedIn 的 HashMap resize 凍結——調查一場 jemalloc 預算失算
為什麼一張裝了 5800 萬 key 的 hashbrown HashMap,resize 那一刻會讓 Rust 服務全 fleet 同時停下?jemalloc 大 chunk 路徑、kernel mmap_lock 的 process-wide 讀寫號誌、Tokio runtime 的 task 排隊三者怎麼疊在一起?eBPF off-CPU profile 怎麼把線索撈出來?
Cooldown 還是 phased rollout——兩種對抗供應鏈攻擊的提案
「等幾天再升級」和「分階段曝光」各自擋住什麼、漏掉什麼?對小套件、對 transitive 依賴、對 zero-day 攻擊的回應分別有什麼差別?對 OSS 維護者跟對企業 policy 各自意味著什麼?