Three months ago I shared a project I’ve been working on: moss, a Linux-compatible kernel written in Rust and AArch64 assembly. Since then, it has crossed a pretty major milestone and I wanted to share an update. It now boots into a dynamically linked Arch Linux aarch64 userspace (ext4 ramdisk) with /bin/bash as init.
Some of the major additions over the past few months:
- ptrace support (sufficient to run strace on Arch binaries) - Expanded ELF support: static, static-pie, dynamic, and dynamic-pie - Dynamically linked glibc binaries now execute - /proc support sufficient for ps, top - Job control and signal delivery (background tasks, SIGSTOP/SIGCONT, etc.) - A slab allocator for kernel dynamic allocations (wired through global_allocator) - devfs, tmpfs, and procfs implementations - Full SMP bringup and task migration with an EEVDF scheduler
The kernel currently implements 105 Linux syscalls and runs in QEMU as well as on several ARM64 boards (Pi 4, Jetson Nano, Kria, i.MX8, etc).
The project continues to explore what an async/await-driven, Linux-compatible kernel architecture looks like in Rust.
Still missing:
- Networking stack (in the works) - Broader syscall coverage
The project is now about ~41k lines of Rust. Feedback is very welcome!
I also want to thank everyone who has contributed over the past three months, particularly arihant2math, some100, and others who have submitted fixes and ideas.
Repo: https://github.com/hexagonal-sun/moss