Hobby Operating System
  • Rust 63.9%
  • C++ 29.5%
  • C 4.2%
  • CMake 0.8%
  • Assembly 0.6%
  • Other 1%
Find a file
Drew Galbraith d4e46d27d0
Some checks failed
Check / Check Rust (push) Has been cancelled
Move rust to top level. (#14)
Move rust code out of a subdirectory and in to a top level of the repo.

Reviewed-on: #14
2026-07-19 08:32:37 +00:00
.cargo Move rust to top level. (#14) 2026-07-19 08:32:37 +00:00
.forgejo/workflows Add rust lint CI job. (#9) 2025-12-14 09:02:59 +00:00
lib Move rust to top level. (#14) 2026-07-19 08:32:37 +00:00
scripts Move some commands to just (#10) 2026-07-17 08:30:58 +00:00
sys Move rust to top level. (#14) 2026-07-19 08:32:37 +00:00
sysroot [Voyageurs] Add a basic ps/2 keyboard driver. 2023-11-25 13:08:30 -08:00
toolchain Move some commands to just (#10) 2026-07-17 08:30:58 +00:00
usr/testbed Move rust to top level. (#14) 2026-07-19 08:32:37 +00:00
yunq Move rust to top level. (#14) 2026-07-19 08:32:37 +00:00
zion Move rust to top level. (#14) 2026-07-19 08:32:37 +00:00
.bochsrc Enable bochs magic breakpoint. 2025-05-07 01:41:27 -07:00
.ccls Specify our target in .ccls 2023-06-16 23:15:41 -07:00
.clang-format Add a clang format spec 2023-05-17 20:30:15 -07:00
.gdbinit Add a kernel ELF module and load it in a new process. 2023-05-29 00:32:54 -07:00
.gitignore Move rust to top level. (#14) 2026-07-19 08:32:37 +00:00
Cargo.lock Move rust to top level. (#14) 2026-07-19 08:32:37 +00:00
Cargo.toml Move rust to top level. (#14) 2026-07-19 08:32:37 +00:00
CMakeLists.txt Move rust to top level. (#14) 2026-07-19 08:32:37 +00:00
init-dbg.sh [Zion] Enable SSE instructions at the start of boot. 2023-11-20 16:40:07 -08:00
justfile Move rust to top level. (#14) 2026-07-19 08:32:37 +00:00
LICENSE Add LICENSE and README 2023-05-31 00:03:44 -07:00
README.md Update README. 2023-12-05 17:02:16 -08:00
RELEASES.md Draft 0.1.1 release notes added with work so far. 2024-01-11 20:53:31 -08:00
rust-toolchain.toml Add rust lint CI job. (#9) 2025-12-14 09:02:59 +00:00
x86_64-acadia-os.json Move rust to top level. (#14) 2026-07-19 08:32:37 +00:00

AcadiaOS

AcadiaOS is a hobby operating system I use to explore and learn about OS development.

It is built on top of a small capability-based microkernel that provides memory management, process scheduling, and hardware access.

Directory Structure

The subdirectories of the project are as follows:

  • zion: Contains kernel code as well as a couple headers that user space uses to interface with the kernel.
  • lib: Library code used by the kernel and user space.
  • sys: System services.
  • sysroot: Files that are copied to the root filesystem.
  • toolchain and scripts: Contain tooling for the cross-compile environment.
  • yunq: Contains the El Yunque IDL used for IPC between processes in userspace.

Where available, further documentation about each of these components can be found in the README fi les in each respective subdirectory.

Building AcadiaOS

Run ./scripts/build_toolchain.sh to build a gcc cross-compile toolchain for the project. This step may take a long time (~5 mins on my new laptop, ~45 mins on my 2013 laptop).

Run ./init-dbg.sh to initialize the CMake project.

Run ./scripts/qemu.sh to build and run AcadiaOS in a VM. I usually run this from the builddbg directory so it is easier to run ninja clean when necessary (for instance when updating yunq files).

System Dependencies

On arch linux I require the following packages to build this project:

base-devel limine dosfstools parted cmake ninja qemu-desktop qemu-system-x86

Boot Process

AcadiaOS uses the limine bootloader to enter into a 64-bit kernel in the negative 2GB address space (mcmodel kernel).

The Zion kernel then sets up interrupts, scheduling, and memory management before passing off control to the Yellowstone process.

The kernel passes capabilities to the Denali and VictoriaFalls binaries to the Yellowstone process to allow it to manage the rest of the boot process.

The Yellowstone, Denali, and VictoriaFalls processes are all passed at boot using limine modules, however any subsequent processes are loaded off disk.