用地道 Rust 重写的 Linux 0.11,可在 QEMU 中启动

Hacker News Top 工具

摘要

一个用现代 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 风格的文件系统,并将结果打包成可启动的磁盘镜像。
  • 配套镜像工具——mbrkitminiximg 是独立的 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-i386x86_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

相似文章

用 x86_64 汇编写成的 Linux 桌面

Lobsters Hottest

一位开发者借助 Claude Code,用纯 x86_64 汇编重建了完整的 Linux 桌面栈——从 shell、终端、窗口管理器到各种工具,实现微秒级启动,并延长数小时续航。

如何在新平台上移植Linux内核

Hacker News Top

本文以模拟RISC-V CPU为例,阐述如何在新平台上移植Linux内核,包含设置最小硬件组件的分步指导与代码实现。

一人,双内核,与大量RISC-V

Hacker News Top

QRV Systems的Yuri Zaporozhets在FPGA上构建了一台基于RISC-V的个人计算机和一台大型机,并两次重写了QNX。他最新的操作系统QSOE正在FOSS世界中引起关注。