Version: 2.2.0-BETA | Architecture: i386 (x86 32-bit) | License: BSD 3-Clause
UbixOS is a hobby/research operating system for the x86 platform, developed from scratch since 2002. It implements a monolithic kernel with a modular subsystem layout, a FreeBSD-derived POSIX userland, and its own native filesystem (UbixFS).
Features
- Kernel: Preemptive multitasking with O(1) scheduler (QoS classes, I/O boost, starvation aging); SMP support; x86 protected mode (ring 0/3)
- Memory: Paged virtual memory with copy-on-write forking
- Filesystems: UbixFS v1/v2, UFS, FAT16/32, DevFS, procfs — all via a VFS abstraction layer
- Networking: lwIP 2.0.3 TCP/IP stack; NE2000, Lance (PCNET), and Intel e1000 NIC drivers
- IPC: Custom MPI message passing, POSIX pipes, semaphores
- Signals: POSIX
sigaction/sigprocmask/sigsuspend;SIGSTOP/SIGCONT; ZOMBIE/wait4 lifecycle - Drivers: AT keyboard, PIT, PIC (8259), floppy, serial (RS-232), PCI hard disk, PS/2 mouse, USB mass storage
- GUI: Composited window system (
views), taskbar, VT100 terminal — all via shared-memory MPI protocol - Userland: 30+ utilities including tcsh 6.24.16, ed, uname, mount, ps; FreeBSD-derived libc; C++ runtime (libc++ 18 subset); objgfx rendering library
- ELF loader: Loads and executes standard i386 ELF binaries; runtime dynamic linker (
ld.so)
Quick Start
bmake # Build kernel + world bmake image # Build bootable disk image (ubixos.img) bmake run # Launch in QEMU
See BUILDING.md for full toolchain requirements and platform-specific setup.
Directory Structure
| Path | Description |
|---|---|
sys/ |
Kernel source — all subsystems |
bin/ |
Userland executables |
lib/ |
Userland libraries (libc, libstdc++, graphics, etc.) |
libexec/ |
Runtime linker and library execution support |
include/ |
Userland POSIX-style headers |
contrib/ |
Third-party libraries (lwIP, jemalloc, TCC, etc.) |
etc/ |
System configuration files |
share/ |
Shared data files |
tools/ |
Build and installation utilities |
docs/ |
Architecture, design, and driver documentation |
build/ |
Compiled object output (generated) |
debug/ |
Debugging utilities and test code |
For a detailed breakdown of kernel internals, see ARCHITECTURE.md.
Documentation
| Document | Description |
|---|---|
| ARCHITECTURE.md | Kernel subsystems, memory layout, boot sequence |
| BUILDING.md | Toolchain setup, build steps, QEMU and VirtualBox |
| SYSCALLS.md | Syscall tables, ABI, and how to add a new syscall |
| DEBUG.md | Debug defines, serial output, GDB |
| CONTRIBUTING.md | Conventions, PR workflow, doc-sync rules |
| docs/ | Architecture deep-dives, design specs, driver guide |
License
UbixOS itself is licensed under the BSD 3-Clause License. The sys/,
bin/, lib/, libexec/, share/, tools/, and include/ trees are
all original UbixOS code under that license.
Third-party components
The contrib/ tree contains imported third-party code, each retained
under its original license. The compiled UbixOS image bundles these
binaries alongside the BSD-licensed base — analogous to how FreeBSD
historically shipped GPL'd gcc/binutils in /usr/bin. License terms
apply per-binary; the BSD base is unaffected.
| Component | Version | Purpose | License |
|---|---|---|---|
| musl | git snapshot | libc (dynamic, ld-musl-i386.so.1) | MIT |
| libcxx | 18.x subset | LLVM C++ standard library | Apache 2.0 with LLVM exception |
| libcxxabi | 18.x subset | Itanium C++ ABI | Apache 2.0 with LLVM exception |
| lwip-2.0.3 | 2.0.3 | TCP/IP stack | BSD 3-Clause |
| jemalloc | — | malloc implementation | BSD 2-Clause |
| tcsh-6.24.16 | 6.24.16 | Interactive shell | BSD 3-Clause |
| tcc | — | Tiny C Compiler (self-hosted dev) | LGPL 2.1 |
| tzcode | — | POSIX time-zone routines | Public Domain |
| gdtoa | David Gay's | strtod/dtoa floating-point conversion | Permissive (Gay) |
| libc-pwcache | FreeBSD | passwd/group cache | BSD 2-Clause |
| libc-vis | FreeBSD | string-visualization helpers | BSD 3-Clause |
| minimp3 | — | MP3 decoder (used by mp3play) |
CC0 / Public Domain |
| doomgeneric | id Software | DOOM source release (bin/doom, bin/vdoom) |
GPL 2 |
| busybox-vi | 1.36.1 (vi only) | bin/vi editor |
GPL 2 |
The GPL'd components (doomgeneric, busybox-vi) build into standalone
executables. Their source remains in contrib/ (and is shipped under
/usr/src/ on the disk image) per GPL source-redistribution terms.
The BSD-licensed UbixOS base does not link against or derive from
GPL'd code.
Contributing
See CONTRIBUTING.md for conventions, code style, and the doc-sync rules that keep documentation current with the source.