Pluto OS

A modular Rust operating system bootable on three architectures - x86_64, ARM64, and RISC-V64 - from a single Cargo workspace via a shared Hardware Abstraction Layer.

MarsOS and Sigrun are both x86_64-only, and I kept wondering how much of a kernel actually has to change to run on a completely different instruction set. Pluto OS is that question made concrete: one kernel, one Hardware Abstraction Layer, three architectures.

One HAL, three targets

The workspace is organized so arch-specific code - boot sequence, interrupt handling, low-level memory setup - lives behind a Hardware Abstraction Layer, while the kernel core, scheduler, and drivers are written once against that abstraction. The same kernel crate compiles and boots under QEMU for x86_64-unknown-none, aarch64-unknown-none, and riscv64imac-unknown-none-elf - three separate Rust targets, one shared codebase for everything above the HAL boundary.

Workspace layout

Each member compiles independently, which matters more here than in a single-architecture kernel - a change that only makes sense on one architecture shouldn’t force a rebuild or reasoning pass across the other two.

Key decisions

Built with