Skip to content
miroslaw edited this page Sep 29, 2026 · 1 revision

Exyde

A Unix-compatible microkernel OS for x86_64.

The kernel provides only fundamental mechanisms: threads and scheduling, address spaces, physical memory, IPC with capability transfer, synchronization, interrupt dispatch, handle tables, process and thread primitives. Everything else — VFS, filesystems, console, device drivers, file descriptor tables, the C library allocator — runs in userspace and talks to the kernel over IPC.

Status

Boots under QEMU, runs a userspace service manager, passes its own regression suite end to end. Source-only, no prebuilt binaries. x86_64, single CPU. No shell, no keyboard / display / storage drivers, no networking, no user accounts.

Build

Requirements on a Linux host: gcc, ld, nasm, objcopy, cpio, grub-mkrescue, qemu-system-x86_64 (with KVM).

make clean
make run

make run builds the userspace programs, packages them into a cpio newc initrd, embeds the initrd and init.elf into the kernel, and boots the result under QEMU. make iso produces a bootable ISO locally.

Layout

src/kernel/          microkernel
  arch/x86_64/       x86_64-specific code
  core/              scheduler, IPC, PMM, VMM, heap, syscalls
  include/exyde/     kernel headers
  linker/            linker script
src/userspace/       userspace
  crt/               startup code
  include/           libc and Exyde-native headers
  libc/              libc, libvfs, libconsole, initrd parser
  init/              service manager
  test/              regression suite
  echo/              echo service
  vfs/               VFS + RAMFS server
  console/           console server
  linker/            linker script
tools/               build helpers
build/               build output (gitignored)

Kernel ABI

The kernel exposes exactly these syscalls. No file descriptors, no paths, no brk.

PING                  KPUTS                 EXIT
HANDLE_CREATE         HANDLE_CLOSE          HANDLE_QUERY
GETPID
IPC_CREATE            IPC_SEND              IPC_RECV
IPC_TRY_SEND          IPC_TRY_RECV
IPC_SEND_CAP          IPC_RECV_CAP          IPC_TRY_RECV_CAP
SPAWN_ELF             WAIT                  GET_BOOTSTRAP
MAP                   UNMAP                 YIELD

Handles carry rights (READ, WRITE, EXEC, TRANSFER). A message can carry one capability. Plain recv refuses a capability-carrying message rather than silently dropping it; use RECV_CAP.

Initrd

Userspace programs live in a cpio newc archive (bin/console, bin/echo, bin/exy-vfs, bin/test). The kernel maps the archive read-only into init's address space and does not parse it. init parses the archive itself and spawns each program with SPAWN_ELF. The archive is built by tools/mkinitrd.sh.

License

See LICENSE in the main repository.

Clone this wiki locally