Repository navigation
Home
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.
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.
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.
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)
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.
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.
See LICENSE in the main repository.