Introduction
Operating system development is the practice of writing the software that runs before any application does: code that takes over from the bootloader, initializes the processor, manages memory, and provides the environment every other program runs in. This wiki documents that practice from scratch, covering the construction of a kernel rather than the use of an existing one.
The material assumes familiarity with C and the ability to read x86 assembly, without requiring prior experience writing kernel-level code. Topics such as paging and interrupt handling are covered from first principles. Progress is typically slow: a hobby kernel capable of reaching a shell is commonly months of work rather than a short project.
Organization
Section titled “Organization”Articles are grouped roughly in the order a new kernel typically needs them. Environment & Tools covers building a cross-compiler and emulator setup before any kernel code is written. Booting covers the sequence between power-on and the kernel’s first instruction. Architecture Fundamentals, Memory Management, and Interrupts & Exceptions cover x86 mechanisms required early in most kernels. Processes & Scheduling, Drivers, and Filesystems are typically relevant once a kernel can boot and produce output.
Most examples target x86-64 in long mode and build with a GCC cross-compiler; articles note explicitly where content is 32-bit-only or otherwise architecture-specific.
Development environment
Section titled “Development environment”Development is expected to take place against an emulator such as QEMU or Bochs before any testing on physical hardware. Emulators reset quickly, support attaching a debugger to a running kernel, and provide diagnostic output unavailable on real firmware when a kernel fails early. Testing on physical hardware remains useful later in development, once basic functionality is established.