Tunix is a small Unix-like operating system experiment for x86_64. It includes a custom bootloader, kernel, initramfs-based userspace, framebuffer terminal, and a small set of ported userland tools.
- Custom bootloader and kernel code
- Persistent ext2 root filesystem on the boot disk (Linux-mountable); the initramfs only seeds it on first boot
mount/umount: a real mount table, tmpfs mountable anywhere, bind mounts, and a/proc/mountsthat reports it — see Mounting- Hard links:
link()/linkat(),st_nlink, and a file that outlives the name it was created under —link-testchecks it on both filesystems - Framebuffer terminal with keyboard input
- Basic VFS, devfs, procfs, process, and syscall support
- Symmetric multiprocessing: every processor the firmware describes is started and the scheduler runs processes on all of them — see Multiprocessor
- GNU userland (coreutils, grep, sed, gawk, findutils, diffutils, tar, gzip, make), Bash, GCC, binutils, nano, Lua, and selected libraries
- CPython 3.14, built shared so
ctypesand C extensions load;python-testexercises threads, subprocess, signals, sockets, epoll, mmap and sqlite3 - Networking with both ends of TCP:
bind/listen/acceptas well asconnect, and a real loopback, so a server and its client can both run on this machine —tcp-testproves it over127.0.0.1; see Networking curl, and Git'shttps://transport, both out of one static curl port built against mbedTLS — socurl https://…andgit clone https://…work. The tool speaks http, https and file over IPv4;ssh://remotes are not supported- Intel HD Audio playback behind ALSA's
/dev/sndinterface, with alsa-lib ported on top of it:snd-testdrives the kernel ioctls directly andalsa-testgoes through the library, mixer included - dinit as PID 1: services under
/etc/dinit.d, controlled withdinitctl - Real users: per-process credentials, file permission checks, setuid binaries,
and a console
loginprompt. shadow-utils (login,su,passwd) andsudoare ported. The image shipsroot/rootandtunix/tunix— see Users and Permissions - Eight virtual terminals, switched with Ctrl+Alt+F1..F8 or
chvt: a login prompt on the first four, the graphical session on the seventh, each with its own screen and keyboard — see Virtual Terminals - A full Xfce desktop on Xorg (xfwm4, xfce4-panel, xfdesktop, Thunar and xfce4-terminal), started by the session of whoever logs in, so it runs as that user; a Weston (Wayland) session is also available
- A graphical login: LightDM with lightdm-gtk-greeter owns the display from boot, authenticating through Linux-PAM — see Display Manager
- A package manager: xbps, installing from Tunix's own binary repository
(tunix-ports, built and published by
CI) with Void Linux's
x86_64-muslset behind it —xbps-install -S && xbps-install -y tty-clock— see Package Manager - A virtio-gpu driver, so the display is scanned out where it lies instead of
being copied into the framebuffer every frame;
make run-gpu— see virtio-gpu
Initialize submodules first:
git submodule update --init --recursiveBuild the disk image:
make allRun it in QEMU:
make runOr run headless:
make headlessClean generated files:
make clean