Linux 0.11 用原生 Rust 重写,已在 QEMU 中启动
原标题:Linux 0.11 rewritten in idiomatic Rust, boots in QEMU
速览
开发者将早期 Linux 内核版本 0.11 用地道 Rust 语言完整重写,实现了在 QEMU 模拟器中的启动。该项目展示了 Rust 在底层系统编程中的潜力,保留了原版 Linux 的设计精髓,同时利用了 Rust 的内存安全特性。这对于操作系统教育和 Rust 生态发展具有一定意义,但当前仍处于实验阶段。
AI 深度解读
背景
Linux 0.11 是 Linux 内核的早期版本,于 1991 年发布,是 Linux 发展史上一个重要的里程碑。它体积小巧、结构清晰,常被用作操作系统教学的经典案例。然而,其代码完全使用 C 语言和少量汇编编写,在现代工程实践中存在类型安全、内存管理等方面的挑战。近年来,Rust 语言因其内存安全、无垃圾回收、与现代编程范式契合等特性,在系统编程领域备受关注。来自开源社区的项目 linux-0.11-rs 正是将这一经典 30 年前的内核用“地道”的 Rust 从头重写,并能够在 QEMU 模拟的 i386 硬件上启动,运行一个自包含的 Unix 风格用户空间环境。
核心内容
该项目对 1991 年的 Linux 0.11 内核进行了现代 Rust 重写,保留了原始系统的语义(即“做什么”),但重新设计了“如何表达”:更强的类型系统、更清晰的模块边界、无处不在的符合 Rust 习惯的抽象。内核可在 QEMU 模拟的 i386 硬件上启动,运行完整的 init → shell → coreutils 栈,并附带构建工具,一条命令即可生成可启动的磁盘镜像。
内核特性
- 实现了 Linux 0.11 的大部分功能:进程管理、带请求分页和写时复制(CoW)的虚拟内存、Minix v1 文件系统、ATA 磁盘驱动、VGA + PS/2 控制台、8250 串口控制台、TTY 层、信号处理以及完整的系统调用表。
用户空间 Rust 标准库
- 提供了一个名为
user_lib的 Rust 用户空间库,其公开接口模仿了std::{fs, io, path, env, process, time},使得用户程序写起来像普通 Rust 代码,而非直接与系统调用打交道。
真实的用户空间程序
- 包含 80 多个 coreutils 以及一个手写的 POSIX 子集 shell(
sh),支持管道、控制流、函数、通配符、命令和算术替换、交互式行编辑器(带 Tab 补全和历史记录)。
一键构建镜像
tools/build-disk.sh脚本编译所有用户程序,按 Unix 风格文件系统布局,打包成可启动的磁盘镜像。
配套镜像工具
mbrkit和miniximg是独立的 crate,可单独用于任何涉及 MBR 或 Minix v1 镜像的项目。
开发环境
- 包含开发容器(Devcontainer)配置:克隆仓库后,在 VS Code 中点击“Reopen in Container”,即可运行
make run。
构建与运行
- 构建所有用户程序并创建磁盘镜像:
tools/build-disk.sh - 构建内核并在 QEMU 中启动:
cd kernel && make run(VGA 控制台)cd kernel && make run-console(串口控制台,-nographic)
- 启动后进入
/root下的 shell 提示符,可执行ls /bin查看已安装工具,演示算术扩展、for 循环、通配符、递归函数、Tab 补全、历史命令等。
外部依赖
- 开发者容器外需要:最新的 Rust nightly(版本在
rust-toolchain.toml中固定)、qemu-system-i386、x86_64-linux-gnu-*交叉工具链,以及本地镜像/测试工具(通过tools/install-tools.sh安装mbrkit、miniximg、ktest)。
端到端测试
- 在 QEMU 下启动内核,通过串口驱动执行
.ktest脚本。可使用tools/run-tests.sh运行所有测试,或指定测试套件/测试集。
项目结构
kernel/:内核本身user_lib/:std 风格的用户空间库user_lib_macros/:proc-macro 宏#[user_lib::main]user_program/:约 80 个 coreutils 和shshellktest/:端到端测试运行器,通过串口驱动 QEMUmbrkit/:MBR 磁盘镜像 CLI(也可在 crates.io 上获取)miniximg/:Minix 文件系统镜像 CLI 和库rootfs/:磁盘镜像内容模板(/etc、/root等)tools/:开发者脚本(build-disk.sh、run-tests.sh等)tutorial/:mdbook 形式的教学文档(进行中).devcontainer/:即开即用的开发环境
当前状态
- 内核:相对于 Linux 0.11 功能基本完整,有意不包含软盘支持;当前工作集中在打磨和工具链完善。
- 用户库:覆盖了 shell 和 coreutils 当前所需的功能。
- 用户空间:可用于真实的交互式工作。
- 教程:早期草稿,长期计划是完整的从零构建教学指南。
致谢
- 感谢 yuan-xy/Linux-0.11 提供原始 Linux 0.11 内核源码,作为开发时的重要参考。
- 许多部分也参考了 rcore-os/rCore-Tutorial-v3。
关键要点
- 项目使用现代 Rust 从头重写 Linux 0.11 内核,而非对现有 C 代码的简单绑定或翻译。
- 强调“地道”的 Rust 表达:更强的类型安全、清晰的模块边界、符合 Rust 习惯的抽象。
- 内核包含进程管理、虚拟内存(分页与 CoW)、Minix v1 文件系统、ATA/VGA/PS2/串口驱动、TTY、信号及完整系统调用表。
- 提供独立的 Rust 用户空间库
user_lib,接口模仿标准库,使编写用户程序如同编写普通 Rust 应用。 - 自带 80 多个 coreutils 和一个功能丰富的 POSIX 子集 shell,支持管道、控制流、函数、通配符、命令/算术替换、交互式编辑(Tab 补全、历史命令)。
- 一键构建工具
tools/build-disk.sh编译所有程序并生成可启动磁盘镜像。 - 配套工具
mbrkit和miniximg可独立用于其他项目。 - 提供开发容器配置,极大降低了环境搭建门槛。
- 端到端测试框架通过 QEMU 串口驱动自动化测试,支持按套件、测试集运行。
- 项目结构清晰,分为内核、用户库、用户程序、测试、工具、文档等模块。
- 当前内核功能基本完整,软盘支持有意排除;用户空间可实际交互使用。
- 教程文档以 mdbook 形式编写,计划覆盖从零构建的全过程。
意义与影响
- 该项目是操作系统内核重写的一个示范性工程,展示了 Rust 在系统底层开发中的能力,尤其是内存安全与零成本抽象在传统内核领域的应用。
- 保留了 Linux 0.11 的经典语义,同时通过 Rust 的类型系统和所有权模型消除了大量内存安全漏洞(如空指针、缓冲区溢出等),为研究早期操作系统设计和现代安全编程提供了实践参考。
- 项目提供了一整套自包含的构建、测试
查看原文 →github.com
