用地道 Rust 重写的 Linux 0.11,可在 QEMU 中启动
摘要
一个用现代 Rust 重写的 Linux 0.11 内核,可在 i386 上的 QEMU 中启动,包含完整的用户空间(shell 和 coreutils),支持一键构建镜像和 devcontainer 环境。
查看缓存全文
缓存时间: 2026/07/13 22:55
Poseidon-fan/linux-0.11-rs 仓库:https://github.com/Poseidon-fan/linux-0.11-rs
linux-0.11-rs
一个使用现代 Rust 重写的 Linux 0.11 内核——可在
i386上的 QEMU 中启动,运行自托管的 Unix 风格用户空间。
$ cd kernel && make run
...
Welcome to linux-0.11-rs.
https://github.com/Poseidon-fan/linux-0.11-rs
(login: 0 @ linux-rs :: Wed May 27 09:35:43 UTC 2026)
[root@linux-rs /root]# ls /bin | wc -l
69
linux-0.11-rs 使用现代 Rust 从零重新构建了 1991 年的 Linux 0.11 内核。它保留了原始系统的语义(即它的行为),同时重新思考了实现方式:更强的类型、更清晰的模块边界、处处使用惯用抽象。该内核可在模拟的 i386 硬件上启动,运行完整的 init → shell → coreutils 栈,并附带相关工具,只需一条命令即可构建自己的可启动镜像。
✨ 亮点
- 包含 Linux 0.11 大部分功能的内核——进程、带有请求分页和写时复制(CoW)fork 的虚拟内存、Minix v1 文件系统、ATA 磁盘驱动、VGA + PS/2 控制台、8250 串行控制台、TTY 层、信号以及完整的系统调用表。
- 一个 Rust 用户空间“标准库”——
user_lib镜像了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 镜像的项目都很有用。 - 包含开发容器——克隆仓库,在 VS Code 中打开,点击“Reopen in Container”,然后运行
make run。
🚀 快速开始
# 构建所有用户程序,布局 /etc /dev /bin,打包到 disk.img 中。
tools/build-disk.sh
# 构建内核并在 QEMU 中启动。
cd kernel && make run # VGA 控制台
cd kernel && make run-console # 串行控制台(-nographic)
你会进入 /root 下的 shell 提示符。试试:
ls /bin # 浏览已安装的程序
echo $((1 + 2 * 3)) # 算术展开
for f in /etc/*; do echo $f; done # for 循环 + 通配符
fact() { if [ $1 -le 1 ]; then echo 1; else echo $(($1 * $(fact $(($1-1))))); fi; }
fact 7 # → 5040
ec # 补全为 `echo `
↑ # 浏览命令历史
在开发容器之外,你还需要最新的 Rust nightly(在 rust-toolchain.toml 中锁定)、qemu-system-i386、x86_64-linux-gnu-* 交叉编译工具链以及本地镜像/测试工具:
tools/install-tools.sh # 将 mbrkit、miniximg、ktest 安装到 PATH 中
✅ 测试
端到端测试在 QEMU 中启动内核,并通过串行控制台驱动 ktest/suites/ 下的简短 .ktest 脚本。
tools/run-tests.sh # 运行所有测试
tools/run-tests.sh --suite=shell # 运行单个测试套件
tools/run-tests.sh --test-set=shell.basic # 运行单个测试
tools/run-tests.sh --disable-reboot # 所有测试共享一个 QEMU 实例
🗂️ 仓库布局
kernel/ 内核本身
user_lib/ 仿 std 风格的用户空间库
user_lib_macros/ 过程宏:#[user_lib::main]
user_program/ 约 80 个 coreutils + sh shell
ktest/ 端到端测试运行器(通过串口驱动 QEMU)
mbrkit/ 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 所需的功能。
- 用户空间——可用于实际的交互工作。
- 教程——早期草稿;长期计划是完成一份从零开始的完整构建教程。
📚 教程
cargo install mdbook
cd tutorial && mdbook serve --open
🙏 致谢
- 感谢 yuan-xy/Linux-0.11 (https://github.com/yuan-xy/Linux-0.11) 提供了原始的 Linux 0.11 内核源码,在开发过程中作为重要参考。
- 本项目的许多部分也受到 rcore-os/rCore-Tutorial-v3 (https://github.com/rcore-os/rCore-Tutorial-v3) 的启发或参考其实现。
📄 许可证
参见 LICENSE。
相似文章
zinnia: 一个用Rust编写的模块化64位类Unix内核
Zinnia 是一个用Rust编写的模块化64位类Unix内核,旨在在UEFI系统上启动并运行带有Wayland或X11的现代桌面。它实现了POSIX API和常见的Linux/BSD扩展。
用 x86_64 汇编写成的 Linux 桌面
一位开发者借助 Claude Code,用纯 x86_64 汇编重建了完整的 Linux 桌面栈——从 shell、终端、窗口管理器到各种工具,实现微秒级启动,并延长数小时续航。
如何在新平台上移植Linux内核
本文以模拟RISC-V CPU为例,阐述如何在新平台上移植Linux内核,包含设置最小硬件组件的分步指导与代码实现。
浏览器标签中的Windows内核,第一部分:冷启动、快速启动与四兆字节
本文介绍了 nanokrnl(一个用 Rust 编写的 64 位 Windows 内核)和 nanox(一个 65KB 的 WebAssembly 模拟器),后者可直接在浏览器中以长模式启动该内核,仅需约四兆字节即可运行一个操作系统。
一人,双内核,与大量RISC-V
QRV Systems的Yuri Zaporozhets在FPGA上构建了一台基于RISC-V的个人计算机和一台大型机,并两次重写了QNX。他最新的操作系统QSOE正在FOSS世界中引起关注。