Multiboot ELF entry
boot.S is a spec-compliant Multiboot entry point. GRUB, QEMU, or any Multiboot loader hands the ELF a stack and an instruction pointer — no bootloader of our own to maintain.
// features
cllm is a single 32-bit Multiboot ELF that boots on QEMU or bare-metal x86 and serves HTTP. These are the capabilities that ship today — grouped by the layer they live in — followed by an honest list of what is still on the roadmap.
boot.S is a spec-compliant Multiboot entry point. GRUB, QEMU, or any Multiboot loader hands the ELF a stack and an instruction pointer — no bootloader of our own to maintain.
There is no kernel/userspace split, no syscall trap, and no scheduler. kernel.c runs the main loop in ring 0 and never context-switches to an unrelated process.
memory.c manages a statically-allocated 4 MB arena with malloc/free. No virtual memory manager, no page faults, no allocator surprises under load.
string.c ships only the libc we call — snprintf, memcpy, memset, strncmp — so there is no external C library to audit or link against.
network.c walks the PCI configuration space, finds the Intel e1000 device (8086:100e), and claims it — no ACPI, no device tree, no probe framework.
A from-scratch e1000 driver brings up the descriptor rings and moves raw Ethernet frames. The driver is a few hundred lines you can hold in your head.
Just enough of the stack to carry HTTP/1.1: IPv4, TCP, and the framing that the request router needs. No socket API, no BSD compatibility layer.
http.c parses requests and api.c routes them. The HTTP server is the packet-processing loop; there is no daemon sitting on top of an OS.
POST /v1/completions and /v1/chat/completions match the llama.cpp request/response shape, so existing clients and SDKs point at cllm without code changes.
POST /v1/embeddings and GET /v1/models round out the OpenAI-flavoured surface that tooling expects to find.
POST /tokenize and /detokenize expose the tokenizer directly for clients that manage their own prompt budgets.
llm.c is the interface where the llama.cpp inference path plugs in. The routes parse and dispatch today; inference returns a stub until that engine lands.
make run builds a release kernel and boots it in QEMU with serial on stdio. First serial line appears in well under a second.
make run-debug builds with symbols and pauses QEMU on :1234. target remote :1234 in GDB and step through ring-0 code directly.
make run is serial-on-stdio for CI and headless boots; make run-vga opens a VGA window for interactive inspection.
The deployment unit is one Multiboot ELF. No base image, no init system, no package manager, no userspace to patch.
// not yet — we do not overstate
The scaffolding — kernel, drivers, network, HTTP — ships now. The inference engine and the items below are roadmap. Treat cllm as a working substrate the engine will land on.