This is a curated collection of OS Development (mostly, kernel development) resources and links, mainly focussed on x86/AMD64 PC architecture and C/C++ languages. The intention is to build a collection of high-quality resources (but in some cases this is limited by what is actually available). Use the comments box at the bottom of the page for suggestions/corrections.
General links
- The OSDev wiki and forum
... the wiki is often a good first stop when looking for info on any topic. The information is not always complete however, and be warned that some of the code samples have errors. - The osdev subreddit
- Osdev Notes
An OS (kernel) development tutorial in book(ish) form.
Hardware documentation
- The Intel Software
Developer's Manual (SDM)
volumes 1 through 4, and a bunch of other Intel ISA/processor documentation. - The Intel Resource
and Documentation Center
has a heap of technical information on Intel products, including chipsets, ethernet controllers, etc. - The AMD Documentation Hub
is the place to go to find the AMD64 Architecture Programmer's Manual (5 volumes). This is an alternative to the Intel documentation; they both cover much of the same underlying material. There are however some differences, so read both! You'll also find some chipset references and GPU information, as well as processor-specific manuals. - NVidia open GPU documentation
... such as it is. - The i8259 Programmable Interrupt Controller—a more complete guide than what can generally be found elsewhere (and it's hosted here!).
Platform specifications
- UEFI Forum Specifications page
... has download links for UEFI and ACPI specs. UEFI and ACPI are both fundamental specificiations underlying the modern PC platform.
Bootloaders
- Tosaithe—UEFI x86-64 only, by yours truly. For ELF-format kernels.
- Limine—"advanced, portable, multiprotocol bootloader", probably the best-known in the amateur OSdev community.
- Pure64—x86-64 bootloader, BIOS/UEFI, written in assembly (NASM).
- KRaBs—x86/x86-64 bootloader in Rust, supports Linux protocol and ELF-format kernels.
Reusable components
If known, license is listed in (parentheses). I have not used all listed libraries but at least on a cursory inspection they appear to be potentially useful.
General libraries
- libbmcxx—C++ (and some C) standard library components suitable for kernel use, by yours truly (CC0)
- bmcxxabi—C++ ABI support routines (use with libbmcxx)
- Embedded Artistry libcpp—C++ standard library and ABI support derived from LLVM's libc++ and libc++abi (MIT)
- Embedded Template Library (ETL)—C++ template library suitable for kernel use (MIT)
- nanoprintf—single-header snprintf/vsnprintf (Unlicense/0BSD)
- eyalroz/printf—A maintained fork of mpaland/printf, "A printf / sprintf Implementation for Embedded Systems" (MIT)
- arith64—implementation of GCC's runtime support for 64-bit arithmetic (__udivdi3 and so on), useful mainly for 32-bit code (Unlicense)
ACPI
- ACPICA—reference ACPI driver implementation as incorporated into Linux and other OSes (GPLv2/BSD/Other)
- lai - Lightweight AML Interpreter—a lightweight alternative to ACPICA; has minimal documentation (MIT)
- ACPI tables—for reference, collected from real systems
Allocators
- mimalloc—high-performance malloc from Microsoft (MIT)
- rpmalloc—high-performance malloc (Public Domain/MIT)
- ltalloc—"LightweighT Almost Lock-Less Oriented for C++ programs memory allocator" (3-clause BSD)
Filesystems
- lwext4—light-weight ext 2/3/4 (GPLv2)
- ThinFAT32—light-weight FAT32 "for embedded systems" (MIT)
- uFAT—"small but feature-complete VFAT/FAT32 implementation" (3-clause BSD)
- exfat—free exFAT implementation implemented as FUSE filesystem (GPLv2)
Hardware drivers
- lightweight Intel GPU library—lacks documentation (2-clause BSD)
- CDI—Common Driver Interface, a set of drivers for various common hardware and filesystems; limited English documentation (doxygen comments) (2-clause BSD-like)
TCP/IP
- lwIP—light-weight TCP/IP stack with IPv6 support (BSD-like)
- microtcp—looks promising but license unclear
- picotcp—small-footprint library designed for embedded systems (GPLv2/v3)
- uIP—"very small implementation of the TCP/IP stack"; 11 years old and unmaintained (3-clause BSD-like) though later versions including IPv6 support are apparently incorporated into Contiki OS (https://github.com/contiki-os/contiki, https://github.com/contiki-ng/contiki-ng)
- mobileuipv6—Userspace uIPv6 for Linux, extracted from Contiki OS (3-clause BSD-like); apparently unmaintained
Terminal
- Flanterm—implements a linux-compatible terminal and includes framebuffer output using a built-in font. Minimal documentation (2-clause BSD)
- libvterm—"C99 library which implements a VT220 or xterm-like terminal emulator." No documentation. Not the same as the other libvterm. (MIT)
Other
- Genode—an "Operating System Framework", implying that it might be possible to re-use components; haven't looked into it fully
- VGA text mode fonts—naturally you can use these on a framebuffer also
- "The only proper way to debug 16-bit code on Qemu+GDB"—nice write-up about using Qemu+GDB to debug real-mode code
Please use comments for suggestions or corrections only.
Comments may be deleted once actioned.
Requests for help will be deleted immediately, use an appropriate forum instead.