EDOSx86_64
EDOS boots on UEFI, brings up every core on the machine, and drops you into a compositing desktop with a terminal. It has its own scheduler, filesystem, network stack, USB stack and window system.
/dev/ttyS0
- [0.000000] <cpu-0:kernel> Booting...
- [0.000000] <cpu-0:kernel> cmdline: "root=UUID=87654321-4321-8765-cba9-987654321fed rootfstype=efs"
- [0.000000] <cpu-0:kernel> Initializing frame allocator
- [0.000000] <cpu-0:kernel> Mapped kernel heap at 0xffffc00000000000-0xffffc00000100000
- [0.000000] <cpu-0:kernel> Initializing acpi tables
- [0.000000] <cpu-0:kernel> Initializing apic
- [0.000000] <cpu-0:kernel> Initializing hpet
- [0.000000] <cpu-0:kernel> APIC frequency: 1000008514 Hz (1000) MHz
- [0.000000] <cpu-0:kernel> TSC frequency: 3493922000 Hz (3.49) GHz
- [0.001371] <cpu-3:kernel> SYSCALL/SYSRET enabled
- [0.008760] <cpu-3:kernel> Initializing scheduler
- [0.012664] <cpu-3:kernel> [smp] AP online: LAPIC id 3
- [0.013531] <cpu-2:kernel> [smp] AP online: LAPIC id 2
- [0.016946] <cpu-1:kernel> [smp] AP online: LAPIC id 1
- [0.105367] <cpu-0:kernel> Reaper thread started (tid=1)
- [0.106243] <cpu-0:kernel> Evict kthread started (tid=2)
- [0.209548] <cpu-0:kernel> Scanning PCI devices...
- [0.782741] <cpu-0:kernel> Found 8 PCI devices
- [0.795513] <cpu-3:kernel> xhci: version 0.0, 64 slots, 8 ports
- [0.797027] <cpu-0:kernel> virtio-gpu: initialised, control=64, cursor=16, blob=false
- [0.798908] <cpu-0:kernel> virtio-gpu: 1920x1080 @ 74Hz
- [0.808125] <cpu-2:e1000e:k:6> e1000e: initialized, MAC 52:54:00:12:34:56
- [0.808210] <cpu-2:e1000e:k:6> net: dhcp: sending DISCOVER
- [0.808546] <cpu-2:e1000e:k:6> net: dhcp: received ACK, IP 10.0.2.15
- [0.814095] <cpu-3:kernel> xhci: initial enumeration complete
- [0.854537] <cpu-1:hda:k:7> hda: /dev/dsp registered
- [0.926856] <cpu-0:kernel> verify_kernel_no_phys_aliasing: 2722 kernel-half mappings, no aliases
- [0.932629] <cpu-0:ahci:k:4> AHCI CAP: SNCQ=true, NCS=31 (32 command slots)
- [0.933450] <cpu-0:ahci:k:4> Found SATA drive on port 1
- [0.942643] <cpu-0:window-input:k:15> Window input routing thread started
- [1.910146] <cpu-3:system-mount:k:16> Root partition: UUID=87654321-4321-8765-cba9-987654321fed on device 0
- [1.910495] <cpu-3:fs:k:14> efs journal: replay scan start tail_seq=2 tail_block=10
- [1.910597] <cpu-3:fs:k:14> efs journal: scanned, nothing to replay
- [1.910615] <cpu-3:system-mount:k:16> Root filesystem mounted
- [1.631909] <cpu-0:system-mount:k:16> Spawned bin/edos-init tid=19 cpu=0
- [Terminal] Spawned shell (PID: 26)
Verbatim serial output from a four-core boot, replayed at its own timestamps. The long pause is the PCI scan; the second one is mounting the root filesystem.

ps, on an idle desktop
The kernel's own thread table is the feature list.
Nothing below is a wrapper around someone else's driver. Each of these threads is spawned by name at boot, and each one is a subsystem written for this kernel.
| PID | Name | What it does |
|---|---|---|
| 1 | reaper | Tears down dead threads and releases their file descriptors and mappings. |
| 2 | evict-inode | Does the blocking half of inode eviction, so no drop path ever waits on disk. |
| 3 | klogger | Drains the kernel log ring into /dev/klog, which is what dmesg reads. |
| 4 | ahci | Submits and completes NCQ commands, up to 32 tags in flight at once. |
| 5 | xhci | Runs USB transfers: HID keyboard and mouse, and mass storage. |
| 6 | e1000e | Moves Ethernet frames and drives DHCP and DNS. |
| 7 | hda | Intel HDA playback, exposed as /dev/dsp. |
| 8 | vga | virtio-gpu scanout and the hardware cursor. |
| 9 | tcp-retransmit | TCP timers: retransmission, delayed ACK, and TIME-WAIT expiry. |
| 10 | keyboard | Decodes scancodes into key events. |
| 11 | mouse | Reads HID boot-protocol reports and moves the pointer. |
| 12 | block_writeback | Flushes dirty pages, gated on the journal having committed. |
| 13 | journal_committer | Commits EFS metadata transactions. |
| 14 | fs | VFS work that cannot run inline: mounts, evictions, async page fill. |
| 15 | window-input | Routes keyboard and pointer events to the focused window. |
| 17 | ahci_watchdog | Catches NCQ commands that never complete. |
A filesystem, not a port
EFS is an extent-based filesystem with a metadata journal, written for this kernel and formatted by efs-mkfs, which runs on the host and inside EDOS. Mounting replays the journal when the last shutdown was unclean. Above it sit a page cache, a block cache, write-back gated on journal commits, and read-ahead; below it, AHCI with native command queuing.

A network stack that talks to the internet
Ethernet, ARP, IPv4 with fragment reassembly, ICMP, UDP and a TCP state machine, plus DHCP and DNS clients. The guest takes its address from DHCP within a millisecond of the NIC coming up. The same driver runs on real Intel I219 and I218 hardware.

The desktop is userspace
The kernel owns a window registry and routes input to whichever window has focus. Everything you can see is an ordinary process: edos-wm composites and draws decorations, edos-taskbar and edos-terminal are separate programs, and they share pixel buffers with the compositor through shared memory.

56 seconds, no cuts
Driven from outside the guest
Recorded straight off the framebuffer over QEMU's monitor socket: keystrokes and pointer events go in, PNG frames come out. It is how the OS gets tested.
The tree
What is actually in here
- Rust
- 112,295 lines across 451 files
- Kernel
- 50,827 lines, no_std, one binary
- Userspace
- 125 programs on a forked Rust std
- Syscalls
- 120, through SYSCALL/SYSRET
- Targets
- x86_64-unknown-none, x86_64-unknown-edos
- History
- 1,457 commits
Get it running
Build it, then boot it
git clone https://github.com/edg-l/edos-v2
cd edos-v2
make all # userspace, kernel, bootable ISO
make run # QEMU: q35, UEFI, KVM, 4 coresThe kernel builds on plain nightly. Userspace links a real std, so it needs a custom toolchain built from a Rust fork; the build guide walks through it. Prefer a prebuilt image? Downloads.