Hi everyone,
I'm sharing a project I’ve been building called Daxo OS. It’s a custom x86_64 kernel written entirely in Rust from scratch.
It started as a learning project following Philipp Oppermann’s "Writing an OS in Rust" series, but I’ve since extended it significantly with custom architecture, memory management tweaks, and peripheral drivers.
It currently boots via UEFI on both QEMU and real hardware.
What’s working right now:
* Boot & Architecture: UEFI boot process on QEMU and physical systems.
* Memory: 4-level paging with user-accessible memory isolation and a custom fixed-size block heap allocator.
* Privilege Levels: GDT/TSS setup with a working Ring 0 to Ring 3 transition via iretq.
* Multitasking: A cooperative async task executor with a basic PS/2 keyboard driver and hlt idle state handling.
* Storage & FS: A simple ATA PIO driver (sector reading) paired with a basic FAT-like filesystem layer.
What’s missing / In progress:
* Proper IPC (inter-process communication)–it's not a true microkernel *yet*.
* System calls (currently just stubbed out, not wired to user space).
* ATA DMA bus mastering on physical motherboards.
The hardest part so far:
Getting the Task State Segment (TSS) and Interrupt Stack Table (IST) configured properly to stop triggering triple faults during the switch to Ring 3 took me two weeks of debugging QEMU register dumps.
Right now, my biggest headache is getting ATA DMA to work reliably on real hardware (it behaves fine in QEMU, but falls apart on physical motherboards without full UEFI Disk I/O). If anyone has experience debugging PCI IDE controllers on bare metal, I'd love some advice.
You can check out the source code, along with some project web pages and a development proof archive, here:
* GitHub Repository: https://github.com/daxo-developer/daxo_os
* Web Portal & Demos: https://daxo-developer.github.io/
https://daxo-developer.github.io/daxo-os-website/
https://daxo-developer.github.io/daxo-os-gallery-web/
I'd appreciate any technical feedback, code reviews, or insights from fellow OSDev developers!
[Project] Daxo OS: x86_64 Kernel written in Rust (UEFI, Ring 3, Async)
-
DaxoDeveloper
- Posts: 3
- Joined: Thu Aug 20, 2026 5:19 am
-
nyllerrorthedev
- Posts: 8
- Joined: Tue Aug 18, 2026 7:30 am
Re: [Project] Daxo OS: x86_64 Kernel written in Rust (UEFI, Ring 3, Async)
Looks great! Your OS looks amazing
Have you gotten a shell so far? Im stuck with a shell that goes like
Code: Select all
M key pressed: execute something -
DaxoDeveloper
- Posts: 3
- Joined: Thu Aug 20, 2026 5:19 am
Re: [Project] Daxo OS: x86_64 Kernel written in Rust (UEFI, Ring 3, Async)
Thanks! Appreciate itnyllerrorthedev wrote: ↑Thu Aug 20, 2026 2:38 pm Looks great! Your OS looks amazingHave you gotten a shell so far? Im stuck with a shell that goes like
Code: Select all
M key pressed: execute something
As for a shell, I actually tried to hack one together (there's even an experimental file for it in the repo), but it didn't quite work out the way I wanted yet
How are you handling backspaces and line editing in your shell right now? That part seems like it could get tricky on bare metal!
-
nyllerrorthedev
- Posts: 8
- Joined: Tue Aug 18, 2026 7:30 am
Re: [Project] Daxo OS: x86_64 Kernel written in Rust (UEFI, Ring 3, Async)
I've gotten a similar PS2 keyboard driver system as well. I think it reads the key you pressed using inb, and reads the raw scan code, if a specific raw scan code is detected; like the scancode for the E key, it will execute a command. It's very bare bones.
As for backspace And stuff like that, I haven't gotten some of that to work. Thanks for the tips, though!
As for backspace And stuff like that, I haven't gotten some of that to work. Thanks for the tips, though!
-
DaxoDeveloper
- Posts: 3
- Joined: Thu Aug 20, 2026 5:19 am
Re: [Project] Daxo OS: x86_64 Kernel written in Rust (UEFI, Ring 3, Async)
That sounds like a solid foundation!nyllerrorthedev wrote: ↑Fri Aug 21, 2026 4:06 am I've gotten a similar PS2 keyboard driver system as well. I think it reads the key you pressed using inb, and reads the raw scan code, if a specific raw scan code is detected; like the scancode for the E key, it will execute a command. It's very bare bones.![]()
As for backspace And stuff like that, I haven't gotten some of that to work. Thanks for the tips, though!![]()
Honestly, getting raw scan codes working is a huge milestone. Dealing with key-up/key-down states (make/break codes) is basically a rite of passage for us OS developers.
Once you decide to move past polling with inb, look into interrupt-driven input, it’s a bit of a headache at first, but it definitely makes the system feel more "real". Keep at it, backspace and line editing will fall into place eventually! Good luck!
-
nyllerrorthedev
- Posts: 8
- Joined: Tue Aug 18, 2026 7:30 am
Re: [Project] Daxo OS: x86_64 Kernel written in Rust (UEFI, Ring 3, Async)
Thank you! Your very kind
Hope you have good luck on Daxo OS!
Hope you have good luck on Daxo OS!