Linux 0.11 以符合 Rust 慣例的寫法重寫,可在 QEMU 中開機 (★ 102 分)
這個 GitHub 專案以現代 Rust 從頭重寫 1991 年的 Linux 0.11 核心,保留原系統的行為語意,改以較強的型別、清楚的模組邊界與符合 Rust 慣例的抽象化來實作。核心可在 i386(Intel 80386 架構)的 QEMU(開放原始碼硬體虛擬機器)中開機,啟動 init、shell(命令列介面)與 Unix 風格的使用者空間,並讓使用者進入 root(最高權限)提示列。功能涵蓋行程管理、虛擬記憶體需求分頁、CoW(Copy-on-Write,寫入時複製)fork(建立子行程)、Minix v1 檔案系統、ATA 磁碟驅動程式、VGA 與 PS/2 主控台、8250 序列主控台、TTY(終端機介面)層、訊號及完整的系統呼叫表。
使用者空間部分提供接近 Rust 標準函式庫 std 的 user_lib 介面,涵蓋檔案、輸入輸出、路徑、環境、程序與時間等功能,讓應用程式不必直接處理系統呼叫。專案還附有 80 多個 Unix 核心工具,以及具備管線、條件控制、迴圈、函式、萬用字元、命令與算術替換、Tab 補全和歷史紀錄的 POSIX(可攜式作業系統介面標準)子集 shell。建置工具能一次編譯所有使用者程式、整理檔案系統並製作可開機磁碟映像;mbrkit 與 miniximg 則可獨立處理 MBR(主開機記錄)和 Minix v1 映像。專案也提供開發容器與在 QEMU 中執行的端對端測試,核心目前已大致涵蓋 Linux 0.11 的功能,軟碟支援則刻意排除,教學內容仍在撰寫中。
留言對專案規模提出了不少討論。有人比較原始 C 版本約 8,000 至 12,000 行原始碼與 Rust 版本約 50,000 行,質疑重寫後是否過度複雜;但另一份行數拆分指出,核心本身約 15,000 行,其餘主要是使用者函式庫、核心工具、測試程式與映像工具。針對 fork 系統呼叫的實作比較也顯示,Rust 版本反而略短,兩者整體結構並沒有想像中懸殊。留言者認為,較多的型別、列舉、錯誤處理、註解與抽象化都可能增加行數;也有人指出 Rust 並不必然比其他語言冗長,自己將 Python 程式改寫成 Rust 時,行數只增加約一成。對「符合 Rust 慣例」的理解,則較接近盡量採用安全程式碼,而非逐行翻譯 C。
另一個爭議是專案是否由大型語言模型(LLM,Large Language Model)大量協助產出。部分留言從說明文件中標題大量使用 emoji、措辭風格和程式碼規模,猜測這是 AI 產生的「粗製濫造作品」,並認為若目標是學習作業系統,完全交由 LLM 撰寫會削弱教育價值;也有人質疑效能與二進位檔大小尚未有充分比較。相對地,其他人認為這是低風險的趣味實驗,沒有實際用途也不妨礙其價值,甚至可將 AI 輔助的整體轉換與原版並行測試,以找出回歸問題。Rust 擁護者則強調借用檢查器能排除部分記憶體錯誤、降低長期技術負擔,但批評者認為 Rust 本身的複雜度可能成為新的負擔。留言也提醒,主線 Linux 目前僅在部分驅動程式採用可選的 Rust 支援,平台支援仍是全面重寫的重大工程問題;這個專案因此更適合作為可開機的教學與實驗平台,而非正式 Linux 的替代品。
👥 85 則討論、評論 💬
https://news.ycombinator.com/item?id=48898134