v3.0.0-BETA
2026-06-16
64-BIT ERA
First release of the 3.0 series — the AArch64
and x86_64 64-bit ports. x86_64 reaches desktop
parity with aarch64: it boots to the graphical desktop (login, mouse, an interactive tcsh
terminal), schedules preemptively, reclaims address spaces on exec, runs the NetSurf browser,
and has a working network stack (virtio-net + lwIP + DHCP + sockets).
// ADDED — THE 64-BIT PORTS
- AArch64 (ARM64) is the new primary architecture; x86_64 is the second 64-bit target and the anchor that keeps the machine-independent / machine-dependent split honest
- x86_64 long-mode boot → higher-half kernel + physmap (standard amd64 layout) → ELF64 loader →
syscall/sysret → ld-musl dynamic linking → the full /etc/init.d service tree → graphical desktop
- Copy-on-write
fork, shared read-only file-cache pages, per-process address spaces, and file-backed mmap on x86_64
- Full 585-entry FreeBSD-ABI POSIX syscall table dispatches on x86_64; musl libc, libc++, and the whole world cross-build for both arches
- x86_64 device layer: virtio-blk root, AC'97 audio (
/dev/audio), std-VGA linear framebuffer, virtio-net, plus Disk Utility / Activity Monitor / Settings data hooks
// ADDED — A WEB BROWSER + NETWORKING
- NetSurf browser renders real web pages in-OS — now running on all three architectures (i386, aarch64, x86_64)
- x86_64 TCP/IP: a virtio-net-pci driver bridges lwIP with DHCP and the BSD socket API (
socket/connect/bind/listen/accept/send/recv)
- DNS resolution (
gethostbyname); NetSurf renders HTML/CSS with JavaScript via the Duktape engine, PNG + JPEG images through stb_image
wget + httpsget (BearSSL TLS) network tools; select/poll over a pty + socket so nc works interactively in the desktop terminal
// ADDED — TLS, CRYPTO & SECURITY
- BearSSL 0.6 TLS 1.2 with a 121-CA trust store and full X.509 chain / hostname / expiry validation against wall-clock time
- Kernel ChaCha20 fast-key-erasure CSPRNG;
getrandom(2) / getentropy()
- Salted PBKDF2-HMAC-SHA256 passwords (50,000 iterations) verified by
authd with a constant-time compare — no plaintext on the image
// ADDED — DESKTOP & UI
- Modern flat window chrome with antialiased TrueType fonts across the compositor
- Runtime resolution switching (enumerate + live mode change) from a new Settings display option
- Settings gains a Sound pane alongside General / Desktop / Appearance / Network
// ADDED — SMP BRING-UP
- x86_64 secondary cores boot: ACPI MADT CPU enumeration, x2APIC IPIs, an AP trampoline through real→protected→long mode on the shared kernel PML4
- aarch64 SMP M0–M3: per-CPU state via
TPIDR_EL1, PSCI CPU_ON AP start, per-CPU GICv2 + timer, and an opt-in AP scheduler entry
- Activity Monitor gains per-core CPU graphs (Overall / Per-core toggle) backed by
/proc/stat per-core accounting
// CHANGED & FIXED
- i386 retired from master — 32-bit support is frozen on the
releng/2 branch; master is 64-bit only
- Scheduler dispatch made SMP-safe (run-queue lock held across the context switch)
- Per-task FPU / SIMD vector state is now saved across context switches on both arches (fixes silent FP corruption under preemption)
- Concurrent VFS I/O corruption under SMP serialised with a coarse
vfs_io_lock
v2.4.0-BETA
2026-06-14
BETA
// ADDED — KERNEL THREADS & musl PTHREADS
- Real
pthread_create / pthread_mutex / pthread_cond / pthread_join on musl, backed by rfork + the CLONE bits (SETTLS / PARENT_SETTID / CHILD_CLEARTID)
futex syscall (FUTEX_WAIT / WAKE / REQUEUE) over the kernel's wait-channel primitive — backs musl's mutex / cond / sem / barrier / once
- Per-thread TLS via a shared LDT slot re-installed on every context switch; detached threads via a native
thread_exit_unmap (musl's __unmapself)
membarrier syscall; the UbixOS-native ABI (int $0x81) carries the Linux-only primitives, keeping the POSIX table a clean FreeBSD ABI
// ADDED — SMP (i386, OPT-IN) & UI
- i386 application-processor bring-up: per-CPU GDT/TSS/
%gs, per-CPU idle thread, per-CPU LAPIC timer, AP scheduler entry (gated behind SMP_ENABLE_APS)
- objGFX UI primitives: rounded rectangles, soft drop shadows, and packed-RGB color blending
- Modern
vlogin sign-in card (rounded, drop-shadowed, accent-underlined fields); active-window highlight routed to the taskbar
// FIXED
- Cold-boot triple fault (i386) — the per-CPU TSS was seeded with a null
ss0 before the IDT populated it (the long-standing "reboots on first boot, works on the second")
- Cold-boot pool-read races —
execFile() (PID 1 launch) and the UbixFS root mount retry on the transient first-read miss
fork no longer COW-marks the per-process LDT page (CPU state, never shared)
v2.3.0-BETA
2026-05-31
BETA
// ADDED — DESKTOP ENVIRONMENT & THEMING
- Selectable desktop background with three modes:
image (stretched wallpaper), solid (flat color), and jailbars (four brightness shades from one base), with a click-to-set RGB picker
- Original procedural wallpapers (no third-party assets): an 80s synthwave family (miami / outrun / mountains / road / vapor) and a tropical set, 1024×768
- Per-user accent theming — focused window title bars and the entire taskbar palette (bar, buttons, start-menu flyout) are derived from one accent color via
scale_color
- Per-user settings layering over the registry: each login resolves its own desktop and accent, falling back to the machine default
- Live wallpaper Preview thumbnail (decoded + downscaled) and an Apply button in the Desktop pane
- New default boot: the synthwave "miami" wallpaper with a matching magenta-purple accent (
0xC0308C); ttyv0 boots straight into /bin/views
// ADDED — SETTINGS APP
- macOS-style single-window Settings app with a category sidebar: General, Desktop, Appearance, Network
- Desktop pane: background-mode tabs, wallpaper dropdown picker (keyboard navigable), live preview
- Appearance pane: accent RGB picker that writes the per-user override and re-themes views + taskbar live
- Network pane: DHCP/Static toggle with editable IP / netmask / gateway / DNS fields
// ADDED — UBISTRY REGISTRY
- The 2004-era flat key/value ubistry rewritten as a hierarchical typed-tree registry: path-addressed string/int/bool leaves + ordered containers
- Persisted as text to
/var/db/ubistry.db (load at boot, dirty-flag coalesced flush); served over MPI with a real GET/SET/ENUM/DEL request/reply protocol
ubix_api client (ubistry_get/set/enum/del, plus per-user get_for/set_user) so any app can read/write config
ulog()/ulogf() system-log wrapper (klog_write → logd → /var/log/messages) for background-service diagnostics
- Data-driven cascading start menu loaded from
/views/startmenu (top-level categories + one submenu level, dispatched by exec path or @action)
// ADDED — NETWORKING
net_configure() syscall (slot 59) pushes a network config into the in-kernel lwIP stack on the tcpip thread
- DHCP and static configuration:
bin/netcfg reads /net/* from the registry and applies it; runs at boot and is re-run by Settings
- Kernel still auto-DHCPs at boot, so networking works even if userland config fails
// ADDED — BUSYBOX 1.36.1 USERLAND
- Replaced UbixOS stub utilities (
cat, ls, uname, stat) with busybox 1.36.1
- Text processing:
grep, find, less, more, wc, head, tail, sort, cut, tr, uniq
- File operations:
cp, mkdir, rm, mv, touch
vi — busybox vi 1.36.1 ported to uBixOS
// ADDED — GRAPHICS & TTY
- objgfx PNG support:
ogImage::Load() sniffs file magic and decodes PNG (any depth/color type) via vendored stb_image v2.30, alongside BMP
- Pseudo-terminal pool: graphical terminals run the user's interactive shell over a pty
// FIXED
- Pipe refcount + EOF handling corrected (no more
0xBEBEBEBE reads)
- Kernel now actually closes fd < 3 and allocates from the lowest free slot
- FAT
ftruncate now shrinks the cluster chain instead of leaking clusters
v2.2.0-BETA
2026-05-24
BETA
// ADDED — C++ STANDARD LIBRARY
contrib/libcxxabi/ — minimal Itanium C++ ABI: new/delete, construction guards, pure virtual, __dso_handle
contrib/libcxx/ — LLVM libc++ 18.1.8 subset: <string>, <vector>, <map>, <memory>, <algorithm>, <optional>, <variant>, charconv/ryu
ubix.musl.cxx.prog.mk BSD make snippet for C++ programs with STL: -std=c++20 -fno-rtti -fno-exceptions
- C++ RAII wrappers:
ubix::Mailbox, ubix::Shell, ubix::yield(), ubix::pid()
bin/views, bin/taskbar, bin/term — migrated to STL (std::vector, std::string)
// ADDED — SCHEDULER PHASE 3 (QoS + AGING)
- QoS classes:
SCHED_CLASS_RT, SCHED_CLASS_INTERACTIVE, SCHED_CLASS_NORMAL, SCHED_CLASS_BATCH
- I/O completion boost: tasks unblocked from I/O wait receive a transient priority increase
- CPU decay: long-running CPU-bound tasks shift down one QoS band automatically
- Starvation aging: tasks not scheduled for
AGING_THRESHOLD ticks are promoted one band
// ADDED — POSIX SIGNALS (PHASES 1–5)
sigaction, sigprocmask, sigpending, sigsuspend fully implemented
SA_SIGINFO frames with 128-byte musl-layout siginfo_t; SA_RESTART, SA_RESETHAND
- Process groups:
setpgid, tcsetpgrp, Ctrl-C targets foreground pgrp
SIGCHLD on child death; SIGSTOP/SIGCONT pause and resume
- AST delivery in timer ISR for SIG_DFL/SIG_IGN signals at user-mode preemption points
// ADDED — VMM PHASE 3 (SWAP)
- Swap partition integration — 64 MB, clock-algorithm eviction (
swap.c)
- Background pageout daemon — polls every 100 ticks, proactive reclaim (
pageout.c)
PAGE_SWAPPED PTE encoding; page fault handler restores from swap on fault
// ADDED — VMM PHASES 1–2 (RB-TREE + DEMAND-ZERO)
- Intrusive red-black tree (
rbtree.c) replaces flat VMA array — O(log n) lookup
vm_map_t embedded in kTask_t; fork copies, exec frees
- Demand-zero anonymous pages:
mmap(MAP_ANON) reserves VMA only; fault backs
MAP_FIXED and non-fixed anonymous mappings both supported
// ADDED — PROCFS & MISC
/proc/mounts — walks mounted filesystem list; bin/mount rewritten to use it
FD_TYPE_* and VFS_TYPE_* constants canonicalized across headers
- Ring-0 kernel stack enlarged from 4096 to 8192 bytes
// FIXED
- Fork now propagates pipe file descriptors with correct
fd_type; pipe reads no longer block forever after fork
- FAT
chdir deep-path stack overflow corrupting sig_pending — fixed by enlarging ring-0 stack
- Taskbar MPI wait retries on
EINTR instead of treating signal interruption as error
v2.1.0-BETA
2026-05-13
BETA
// ADDED — VIEWS COMPOSITOR (C++ REWRITE)
- Full composited window system:
Framebuffer, Window, WindowManager C++ classes
- Server-side decorations: title bar, close button, drag, Z-order, focus-follows-click
bin/taskbar — taskbar ported to C++ with flyout launcher menu and clock
bin/term — windowed VT100 terminal emulator using ogSurface and ogBitFont
include/views/display_proto.h — MPI display protocol with DISPLAY_QUERY/DISPLAY_INFO
- Doom running windowed (
vdoom) inside the compositor
- Tessera (Tetris clone) running as a windowed Views application
// REMOVED
bin/launcher/ — dead pre-2019 application, never integrated with MPI display stack
lib/objgfx40/ — older objgfx fork, superseded by lib/objgfx/
sys/sde/ — kernel-side Software Display Environment retired; replaced by userland compositor
v2.0.1-BETA
2026-05-13
BETA
// ADDED
bin/ed/ — POSIX ed line editor: full address forms, all standard commands
- Syscall 42
sys_ttyctrl — kernel TTY raw/echo mode toggle
- TTY line discipline in
atkbd.c: canonical mode, backspace, echo; raw mode for password masking
// FIXED
fgetc returned 0 at EOF instead of -1 — fgets loops never terminated on short files
- Double-echo removed: echo now owned exclusively by keyboard ISR line discipline
- Login password prompt uses
tty_setraw to mask input correctly
v2.0.0-BETA
2026-04-12
BETA
// ADDED
- musl libc 1.2.5 ported to uBixOS; replaces hand-rolled libc
- ELF dynamic linker —
libexec/ld; PT_LOAD, PLT/GOT, RELA relocations
- tcsh 6.24.16 as default login shell
- FreeBSD syscall ABI compatibility layer (slot 0–500)
- AC97 audio codec driver with DMA ring-buffer playback
- DOOM port (vdoom) — fullscreen and windowed via SDE
- USB UHCI host controller — HID keyboard + mass storage
v1.1.0-CURRENT
2025
LEGACY
// HIGHLIGHTS
- O(1) priority bitmap scheduler (Phase 1 — 32-level bitmask, constant-time dequeue)
- procfs:
/proc/<pid>/status, maps, cmdline
- FAT16/FAT32 VFS with LFN support
- IDE (ATA) driver with DMA
- Initial Views compositor (C-based, SDE-backed)
- MPI inter-process messaging system