# Application Programming Interface ## Overview The Gila microkernel has a very limited API surface, but several components developed alongside it expose additional functionality- such as `libgila` and Userboot, which are treated as extensions of the kernel. ## The libgila Library The `libgila` library is shared between the kernel and any binaries built for it, serving to abstract the syscall API and any structures or protocols that pass the kernel-mode boundary. It provides the official kernel API, and its version number is incremented independent of the kernel's. ## Userboot Userboot is an early-boot program which is launched as the first unprivileged process by Gila. The kernel will pass several pieces of data to it, such as the addresses of device tree blobs, framebuffers, and ACPI tables. These addresses will not necessarily be mapped to memory. What the kernel *will* map is the page range containing the initramfs, which Userboot is responsible for decompressing and parsing. If the initramfs's structure & manifest file do not match the specification denoted here, Userboot will fail to complete the boot process. ## Initramfs Structure