“That was the age when nothing was; / There was no sand, nor sea, nor cool waves, / No earth nor sky nor grass there, / Only Ginnungagap.” — Völuspá, Poetic Edda

Welcome to the documentation for ginnOS.
Like its name, Ginnungagap, the primordial void from Norse mythology, this project starts with almost nothing. No bootloader framework, no kernel libraries, no abstractions to hide what’s happening underneath the surface. Just the hardware and a compiler.
This documentation isn’t primarily about what the code does. The source code already answers that.
Instead, it’s about why the code looks the way it does. Every operating system is a long sequence of decisions. What to build first, what to postpone, what trade-offs to accept, and why one implementation was chosen over another. Those decisions are often more interesting, and more educational than the finished code itself.
What is ginnOS?
ginnOS (“ginn” short for Ginnungagap, and “OS” short for Operating System) is a personal hobby operating system, which i’m developing alongside a course on operating systems i’m taking at DTU.
The name comes from Ginnungagap, the primordial void from which the world was created in Norse mythology. The operating system follows the same philosophy. Starting from almost nothing and constructing everything piece by piece.
The kernel is written in C and x86 assembly. I intentionally avoid existing bootloaders and third-party libraries, not because they’re bad tools, but because the goal of this project is to understand every layer by building it myself.
The current target is 32-bit x86 with BIOS, allowing for easier development of the core architecture before eventually transitioning to x86_64.
Whether you’re reading this to learn how operating systems work, to follow the evolution of the project, or just out of curiosity, i hope these notes provide as much insight into the reasoning behind the implementation as the implementation itself.
Note on Documentation
This documentation is a work in progress and will be more blog style. If you are interested in the full documentation of the api this can be found here (generated with doxygen).