GNU poke 5.0 加入 IEEE 754 浮點運算、Linux 7.2 合併視窗創下貢獻者紀錄、可自舉建置邁向最後一哩路
LWN.net · 2026-08-17
GNU poke 5.0:二進位編輯器補上浮點運算
GNU 專案於 2026 年 8 月 17 日由 Mohammad-Reza Nabipoor 在 info-gnu 郵件論壇宣布 GNU poke 5.0 釋出,原始碼可自 ftp.gnu.org 下載。poke 並非單純的十六進位編輯器,而是一套具備完整程序式語言的互動式二進位資料編輯環境,可用來讀寫任意結構的二進位檔案格式。此次最大的語言層級變動,是 uint<32>/uint<64> 型別終於支援符合 IEEE 754 標準的浮點運算,新增 .+、.-、.*、./ 等專用算術與比較運算子。
執行期方面,poke 引入了「reactive IO spaces」機制:IO 空間會追蹤實際被存取的資料範圍(extent),只有在真正發生寫入時才重新映射,對讀取密集型程式帶來效能改善。編譯器也修正了對巢狀整數 struct/union 欄位寫入的處理,先前這類寫入不會正確反映回底層 IO 空間。此外左移運算的未定義行為已被排除,陣列動態邊界檢查失敗時的錯誤訊息也更明確。
對外部程式最直接的影響是 libpoke 的 DSO 版本號升到 2.0.0,專案聲明此後將維持 ABI 向下相容,公開 API 統一改用 pk_compiler 或 pk_val 參數傳遞。標準函式庫新增 sqrtf、sqrtd 等數學函式,pickle(poke 對特定檔案格式的描述模組)中的 ustar、time 也一併更新,並重新加入 IOS_F_TRUNCATE 旗標方便從空白檔案開始組裝二進位內容。MinGW 平台的編譯支援仍不完整,專案在公告中呼籲社群協助。
Linux 7.2 合併視窗:貢獻者數量創新高
Linus Torvalds 於 6 月 28 日關閉 Linux 7.2 合併視窗並發布 7.2-rc1,這是目前為止有完整數據可查、最新一輪的開發統計依據。LWN 在合併視窗結束隔日發布的 《The rest of the 7.2 merge window》統計了整個視窗期間的提交狀況。這是自 2024 年 6.7 週期(15,418 次提交)以來最忙碌的一次合併視窗,共有 13,412 次非合併提交(non-merge commits)進入主線。
更值得注意的是參與規模:本次合併視窗有 2,138 位不同貢獻者送出程式碼,可能是單一合併視窗的紀錄新高,其中 404 人是第一次替核心貢獻程式碼。706 次提交(約 5%)帶有 Assisted-by 標籤,顯示 AI 輔助工具已滲入核心開發流程並被正式記錄在 commit trailer 中。核心原始碼樹也在此週期正式突破 4,300 萬行。
| 指標 | 7.2 合併視窗 | 對照(6.7 週期,2024) |
|---|---|---|
| 非合併提交數 | 13,412 | 15,418 |
| 不同貢獻者 | 2,138 | — |
| 首次貢獻者 | 404 | — |
| 含 Assisted-by 標籤的提交 | 706(約 5%) | — |
7.2 依既定六至七週的 rc 週期推算,最終版原預計落在 8 月 16 日前後發布。對下游而言,貢獻者基數擴大與 AI 輔助標記的制度化,代表審查流程需要適應更大量、來源更分散的變更集,而 LWN 慣例會在正式版釋出後另行發布以 gitdm 工具彙整的完整週期開發者/企業統計。
可自舉建置:從 357 位元組長出整條工具鏈
現代編譯器多半是用它自己編譯出的語言寫成,形成「先有雞還是先有蛋」的信任問題:使用者必須先信任一份既有二進位檔,才能編譯出下一份編譯器。Bootstrappable Builds 專案的目標正是把這類「不可稽核」的二進位種子(binary seed)數量與體積降到最低,讓每一段可執行檔都能回溯證明其如何由原始碼產生。
GNU Guix 專案在其 Full-Source Bootstrap 部落格文章中記錄了目前最完整的實作路徑:整條建置鏈的根,是一支僅 357 位元組的 hex0 種子程式。從 hex0 出發,stage0-posix 依序建出 hex1、catm、hex2、M0、cc_x86、M1、M2,再加上 get_machine 補齊 MesCC-Tools,最後產出 M2-Planet,整個過程完全不依賴任何外部二進位編譯器。
hex0-seed(357 bytes)
→ hex0 → hex1 → catm → hex2
→ M0 → cc_x86 → M1 → M2 → get_machine
→ M2-Planet
→ GNU Mes 0.24 (Scheme 直譯器 + 用 Scheme 寫的 C 編譯器)
→ bootstrappable-tcc 0.9.26
→ glibc-mesboot 2.2.5 / binutils-mesboot 2.20.1a
→ GCC 2.95.3 → GCC 4.9.4 → 現代工具鏈M2-Planet 之後接手的是 GNU Mes 0.24,其直譯器只用約 5,000 行簡單 C 寫成,而其中的 C 編譯器則是用 Scheme 寫成,兩者互為宿主形成自舉閉環。這條鏈最終可以建出年代久遠的 glibc 2.2.5、binutils 2.20.1a 與 GCC 2.95.3,並以此為基礎逐步搭建到現代版本,足以完整自舉 x86_64-linux 與 i686-linux 上的 Guix;ARM 與 RISC-V 的移植仍在進行中,過程中唯一未能完全消除的二進位依賴,是一份約 25 MiB、靜態連結的 Guile 建置驅動程式。
原始來源:GNU poke 5.0 release announcement、LWN: The rest of the 7.2 merge window、Bootstrappable Builds、GNU Guix: The Full-Source Bootstrap