I want to share the current state of my hobby OS project, GemOS.
GemOS is a from-scratch 32-bit desktop operating system for x86, written in C and assembly, with its own stage 1 + stage 2 boot chain, monolithic kernel, graphics stack, scheduler, filesystem, and a real hosted userland transition already running isolated Ring 3 apps.
I am an 18-year-old student, and GemOS is my long-term systems project. The goal is not to build a quick boot demo, but to grow a coherent desktop OS step by step.
The current architecture is intentionally staged:
- the desktop shell, WM, topbar and dock are still kernel-hosted
- practical userland apps now run as isolated Ring 3 processes
- apps use a thin hosted-surface model instead of a full userspace GUI toolkit
What currently works:
- own boot chain, protected mode bring-up
- heap, paging, IDT/ISR/IRQ path
- preemptive scheduler
- separate process address spaces and Ring 3
- `int 0x80` syscall path
- VBE graphics, desktop shell and window manager
- GemFS
- ELF32 static userland loading
- hosted userland apps
Current userland apps:
- `UTERM.ELF` — a terminal-like app with built-in commands
- `ABOUT.ELF` — a small informational app
- `UTEXTEDIT.ELF` — current in-progress text editor bring-up
UTEXTEDIT already has:
- real document state
- multiline rendering
- caret movement
- text insertion / backspace / enter
- dirty tracking
One thing worth mentioning explicitly: this project has involved a lot of AI-assisted coding workflow, especially with Codex. That does not make the architecture, integration, debugging, or staged design decisions go away — those are still the hard part.
What I like most about the project right now is that it is no longer just “kernel boots and shows a desktop”. The kernel-hosted desktop remains stable, while real isolated userland apps are already running on top of it.
A few screenshots:


Project links:
GitHub: https://github.com/Maksu2/GemOS
Project site: https://gemos.maksu.online
I am deliberately keeping the project conservative in scope for now. I am not trying to jump straight into POSIX, a full userspace desktop, dynamic linking, USB, TCP/IP, or a giant GUI toolkit. The current direction is small, boring, staged engineering.
Next steps are mainly:
- finish the first real TextEdit workflow
- harden hosted app lifecycle further
- continue app migration only where the current pattern proves itself
If nothing else, I hope the project is interesting as an example of a desktop OS growing through small, explicit transitions instead of giant rewrites. And if you find it interesting, a GitHub star is appreciated.
Thanks for reading.