< Back to projects

Rust no_std Kernel

M1 SI Pair project 2025 Completed

Project for the "Systems & low-level programming - Rust no_std" course (M1 SI, supervised by Mr. Maxime Bourry), built with a project partner. A small operating system written in Rust no_std (no dependency on the standard library), compiled for the x86_64-unknown-none target, bootable and run under QEMU via the bootimage tool. The goal: understand what actually happens between powering on a machine and running a shell, with no host OS safety net.

Boot chain of the Rust no_std kernel bootimage Kernel init GDT / IDT / paging SLAB allocator custom no_std heap FAT32 driver boot sector, clusters, dirs Multi-core scheduler (APIC) Interactive shell keyboard driver, syscalls
Boot chain: bootimage hands off to kernel init (GDT/IDT/paging), which brings up the SLAB allocator, FAT32 driver and multi-core scheduler before reaching the interactive shell.

Context

Two versions were built by iterating on the same base: kernel_fat32_v_ameliore (2711 lines of Rust) followed by a more advanced bonus version, Kernel_FAT32_bonus (6106 lines), which adds integration tests and an automatically validated scheduler/timer. Each partner produced their own implementation of the same spec, which made it possible to compare two architectural approaches under the same low-level constraints.

Features implemented

  • A complete FAT32 filesystem driver: boot sector parsing, cluster chain traversal, directory navigation.
  • A custom SLAB memory allocator, no_std-compatible (no system malloc available at this level).
  • Interrupt handling and memory paging (x86-64 page tables).
  • Multi-core support: APIC configuration, synchronization primitives, thread scheduler.
  • Minimal syscalls, a keyboard driver, and an interactive shell to drive everything at boot.

Tech stack

Rust no_std x86_64 bare-metal QEMU bootimage FAT32 SLAB allocator APIC / multi-core

Status

Project completed and submitted. Both versions (standard and bonus) compile, boot under QEMU, and run the interactive shell with access to the FAT32 filesystem.