# 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

