GemOS

Desktop OS, built from the boot sector up.

A from-scratch 32-bit operating system for x86 with its own bootloader, kernel, GUI stack, scheduler, filesystem and a real Ring 3 transition already running practical userland apps.

GemOS is not trying to be flashy. It is trying to be technically coherent, calm to use and honest about what is done versus what is still in transition.

Project

What GemOS is

GemOS is a classic desktop-style operating system built end-to-end: own boot chain, protected-mode bring-up, memory management, graphics, input, filesystem, scheduler, window manager and now real isolated userland applications.

The point is not novelty for its own sake. The point is to build a system that earns each new layer without throwing away the working one underneath.

  • System, not demo
  • Architecture before features
  • Small steps over big rewrites
  • Thin interfaces before abstraction sprawl
  • Own the whole stack

Screenshots

Real system state

GemOS desktop overview
Desktop overview

Kernel-hosted desktop shell

The current desktop stays in kernel space on purpose while the userland path matures through smaller, safer interfaces.

Current state

What works right now

Boot chain

Own stage 1 + stage 2, A20, protected mode, kernel entry.

Kernel core

IDT, ISR/IRQ, PIC, PIT, RTC, heap, paging, scheduler and serial debug.

Graphics and input

VBE LFB, page-flipped rendering, PS/2 keyboard and mouse, TrueType text.

Desktop shell

Window manager, topbar, dock, menus, focus routing and window decorations.

Storage

ATA PIO and GemFS with working read/write paths and seeded userland binaries.

Isolation

Ring 3, separate CR3 per process, TSS/esp0 updates and fault containment.

Hosted app model

Userland owns app state and render logic; kernel hosts the window and surface.

Current apps

UTERM and About are real userland apps; TextEdit is in active bring-up.

Architecture

Transition by layers

User apps: UTERM.ELF, ABOUT.ELF, UTEXTEDIT.ELF
Thin hosted-app services and syscalls
Scheduler, process model, ELF loader
Paging, heap, interrupts, timer
VBE, PS/2, ATA, serial, RTC
Own boot chain

Current rule

Userland without a GUI rewrite

  • WM, topbar, dock and decorations remain in kernel space
  • Userland apps run isolated and talk through a small ABI
  • APIs stay thin until multiple real apps prove they need more
  • The desktop stays stable while userspace grows around it

Applications

What userland looks like today

UTERM screenshot

UTERM.ELF

Usable

First practical userland app. Exercises input, output, focus, fault containment and hosted-window lifecycle.

About screenshot

ABOUT.ELF

Stable

Small informational app with periodic updates and a clean, low-boilerplate hosted-app pattern.

TextEdit screenshot

UTEXTEDIT.ELF

In progress

Current bring-up target for real text editing: document state, multiline render, caret movement and dirty tracking are already landing.

Build

Build and run

make all
make run

# debug
make debug
i686-elf-gdb build/kernel.elf
target remote :1234

Tooling

Expected environment

  • `nasm`
  • `qemu-system-i386`
  • `i686-elf-*` or `x86_64-elf-*` cross-toolchain
  • macOS and Linux are both supported as host environments

Roadmap

Next milestones

  • Finish TextEdit open/save flow and unsaved-close behavior
  • Keep hardening hosted app lifecycle and cleanup
  • Move more small apps to userland only after the pattern is stable
  • Expand file-facing APIs only when real apps force the need

Not now

Deliberately out of scope

  • POSIX compatibility and `fork/exec`
  • Dynamic linking
  • A large userspace GUI toolkit
  • USB, TCP/IP and audio
  • A giant userspace rewrite of the desktop shell

Links

Start here