Skip to content

Version History

kazah-png edited this page Jul 28, 2026 · 16 revisions

Version History

Every tagged release of NyxOS, oldest first. The authoritative log is the release table in AGENTS.md at the repository root; this page is the reader-facing summary of it.

Current release: v5.9.180. Latest LTS: v5.9.0-LTS.

See also: Home, Architecture, Building

Reading this page

Versions are grouped into the eras below. Development is deliberately incremental — most releases add exactly one capability and verify it, which is why the patch numbers run so high. Releases whose entry names a bug are usually more interesting than the ones that name a feature.

Foundations — v1.0 to v2.4

A 32-bit kernel finds its feet: VGA text, interrupts, a ramdisk VFS, the first network packets, DOOM, and the first window compositor.

Version Change
v1.0.0 Base kernel
v1.1.0 Ramdisk VFS + shell commands
v1.2.0 Real networking (RTL8139, ARP, IP, UDP, ICMP/ping)
v2.0.0 Clean slate: removed all hacking/offensive code
v2.0.1 DOOM game integration (VGA mode 13h, doomgeneric, shell command)
v2.1.0 Preemptive multitasking, interrupt-driven I/O, pipe support, diff command
v2.1.1 Full TCP stack, RTL8139 fixes, GUI/window compositor, PC speaker, bitmap font
v2.2.0 GUI auto-boot: NyxOS Desktop launches at startup instead of text shell
v2.3.0 Real EXT2 read support: VFS mount layer, auto-mount at /mnt, ls/cd/cat on ext2
v2.4.0 Sound Blaster 16 DMA/IRQ audio driver (sb16play command, DMA buffer fix, auto-init)

x86_64 and ring 3 — v3.0 to v4.2

The rewrite to long mode: 4-level paging, ELF64, syscall/sysret, a higher-half kernel, NX and SMEP.

Version Change
v3.0.0 ELF userspace loader, initramfs, per-process paging, ring 3 execution, int 0x80 syscalls
v3.1.0 RTC driver, more syscalls (open/read/close/getpid/sbrk/fsize/exec), libc (printf/malloc/snprintf), initramfs auto-boot, desktop polish (right-click, settings, wallpaper)
v4.0.0 Full x86_64 native (long mode, 4-level paging, syscall/sysret, ELF64, ring 3), clean 32-bit dead code removal, docs corrected
v4.1.0 Higher-half kernel mapping (PML4[256] mirror), user/kernel page-table isolation (user has no identity mapping), CR3 switching in ISR/IRQ/syscall entries, scheduler uses next_cr3
v4.2.0 NX bit (No-Execute) + SMEP (Supervisor Mode Execution Prevention), PAGE_NX added to user stack/heap/data, Local APIC + I/O APIC init, CPUID detection, IST (Interrupt Stack Table) for double fault (#8) and NMI (#2), repo cleanup (README x86_64, .gitignore, AGENTS.md)

Desktop, login and hardening — v5.0 to v5.6

A real GUI application suite, the boot animation and login screen, the syscall-boundary audit, and the first ring-3 programs that actually run.

Version Change
v5.0.0 Full GUI application suite: Text Editor (file open/save, cursor nav), Image Viewer (test pattern, zoom/pan), Sound Test (PC speaker + SB16 sine/square/sweep). Brighter wallpaper gradient (sky-blue + grass). 8 desktop icons. All placeholders replaced with real apps. No crashes, zero warnings in build
v5.1.0 Stability and bugfix release: TSS struct alignment fix (IST pointers shifted 4 bytes early → triple fault on double fault/NMI), GDT limit correction, APIC/PIC IRQ masking fix (PIC left fully masked when APIC active), switch_to_user_process inline asm operand reversal fix, VGA 8x16 font data corruption fix (marker bytes inserted in each glyph → garbage text in GUI). QEMU display changed to sdl for Windows compatibility
v5.3.0 Login system: boot animation (~5s, NyxOS-themed, 23-step progress bar), credential storage on EXT2 (/etc/passwd), framebuffer login screen with keyboard input, default user nyx/nyx, fallback when no EXT2 disk, login failure → reboot, success → launch desktop
v5.4.0 Audit/hardening pass: fixed clean-build break (sha256.h pulled host <stdint.h>, conflicting with kernel int types); build is warning-free again (0 warnings from ~160 — pointer-truncation casts routed through uintptr_t, keyboard keymap over-initializers trimmed, dead code removed). Security: ring-3 syscall boundary hardened — user pointers validated against the canonical user half, and userspace now gets small integer fds via a translation table instead of raw (forgeable) kernel VFS handles (closed an info-leak + arbitrary-kernel-r/w reachable via exec). Panic handler now prints faulting RIP/CS/ring/error
v5.5.0 Ring-3 userspace now actually runs
v5.6.0 Userspace cleanup + heap bug

Scheduling, networking and SMP — v5.7.x

The preemptive scheduler, job control, the network stack made to actually work end to end, demand paging, copy-on-write, and multi-core bringup.

Version Change
v5.7.0 Per-fd offsets / streaming file I/O
v5.7.1 Fd-based I/O routes to EXT2 mounts (persistent files)
v5.7.2 Fd-based readdir on EXT2 mounts (file-manager can browse disk)
v5.7.3 Networking works — DHCP completes
v5.7.4 Full network stack: DNS + TCP + HTTP work
v5.7.5 GUI stability fixed — the KERNEL_BASE+3 crash is dead
v5.7.6 Preemptive scheduler + timer live
v5.7.7 Preemptive ring-3 processes
v5.7.8 wait() / job control — foreground & background jobs
v5.7.9 Legacy blocking-exec path removed
v5.7.10 Blocked sleep() + safe kill (timer wait queue)
v5.7.11 Shell job control — jobs + wait
v5.7.12 Priority scheduling (weighted round-robin)
v5.7.13 VFS re-entrancy audit + guard
v5.7.14 Per-process file descriptors
v5.7.15 Idle desktop yields CPU + nice/renice
v5.7.16 File manager: real drag-and-drop into folders
v5.7.17 Networking: loopback + ICMP echo replies + a real ping
v5.7.18 TCP retransmission (RTO) + robust multi-segment receive
v5.7.19 TCP passive open (listen/accept) + in-guest loopback TCP
v5.7.20 NIC-side TCP listen — NyxOS serves HTTP to real clients
v5.7.21 Per-shell CWD + full-path pwd/prompt
v5.7.22 SMP: multi-core bringup verified + exposed (cpus)
v5.7.23 Demand paging + copy-on-write (serviced from the #PF handler)
v5.7.24 GitHub Wiki + clean up
v5.7.25 Real fork() — copy-on-write process clone (the VM capstone)

Userspace comes alive — v5.8.0 to v5.8.49

fork/execve/pipes/signals/mmap, the ring-3 shell, coreutils, /proc and /dev, the shared libc, and the first TUI applications.

Version Change
v5.8.0 Nyx C language runtime + first .nyx program on NyxOS
v5.8.1 waitpid() — a parent reaps its children from ring 3
v5.8.2 Per-process syscall stacks → waitpid() truly blocks
v5.8.3 Anonymous pipes + blocking read() — real cross-process IPC
v5.8.4 execve() — replace a process image (fork→exec→wait complete)
v5.8.5 dup2() — fd redirection (the shell-pipeline primitive)
v5.8.6 execve() argv passing — programs receive real command-line arguments
v5.8.7 A userspace shell with pipelines — the process-model capstone, zero kernel changes
v5.8.8 Interactive stdin — a live shell you type into
v5.8.9 Lazy sbrk — the demand-paged heap (last VM roadmap item)
v5.8.10 Coreutils (cat/wc/ls) + shell background jobs (&)
v5.8.11 Signals — kill/signal/handlers + Ctrl-C
v5.8.12 mmap/munmap — anonymous demand-zero mappings
v5.8.13 Shell polish — I/O redirection (> >> <) + grep/head/tail
v5.8.14 Shell polish part 2 — cd/pwd/export/$VAR on a per-process CWD
v5.8.15 Userland file tools — mkdir/rm/touch/sort/find (+ a real VFS bug fix)
v5.8.16 Raw tty + shell line editor — arrow-key history and cursor editing (+ a real keyboard-driver bug fix)
v5.8.17 Shell tab completion — commands and paths, zero kernel changes
v5.8.18 File-backed mmap + mprotect
v5.8.19 /dev special files — null/zero/random/urandom, no new syscalls
v5.8.20 6-argument syscalls — mmap gets a real offset
v5.8.21 Userspace ps + kill — process management from ring 3
v5.8.22 /proc filesystem — live kernel state as files (no new syscalls) + real process names
v5.8.23 Userspace top — a live process monitor (+ timed input + terminal clear)
v5.8.24 Foreground jobs no longer freeze the desktop — TUIs run live in the GUI
v5.8.25 edit — a full-screen text editor (terminal cursor addressing + Ctrl keys)
v5.8.26 ANSI colors in the terminal (SGR) — ls --color + a colored editor status bar
v5.8.27 Visual refresh — unified crescent-moon logo (login + nyxfetch) + updated GIFs
v5.8.28 Shared ELF libc — one copy of libc, mapped into every process
v5.8.29 dlopen/dlsym — runtime dynamic loading
v5.8.30 /proc/<pid>/maps — a process's mapped memory regions
v5.8.31 pmap + free — userspace tools over /proc
v5.8.32 env / date / sleep — coreutils + real environment inheritance
v5.8.33 $PATH command resolution — the environment becomes functional
v5.8.34 Terminal scrollback — PgUp/PgDn + mouse wheel + a scrollbar
v5.8.35 More coreutils — cp / mv / uname / whoami / which / clear (+ a real build-system fix)
v5.8.36 Job control — Ctrl-Z stop + jobs/fg/bg with transparent restart
v5.8.37 Shell globbing (*/?) + ~ expansion
v5.8.38 Wallpaper app — a color-picker for the desktop background (purple by default)
v5.8.39 Shell operators — && / || / ; command lists
v5.8.40 Double-buffered compositor — the desktop no longer flickers
v5.8.41 Graphical kernel panic — a visual stop screen instead of a silent freeze
v5.8.42 Shell command substitution $(cmd) (+ two latent kernel bugs it exposed)
v5.8.43 Shell quoting — '...' and "..."
v5.8.44 Ring-3 fault isolation — a crashing program no longer panics the kernel
v5.8.45 Pager — less / more
v5.8.46 Identity map now covers all RAM (was a fixed 64 MB) — fixes the pipeline kernel-panic root cause
v5.8.48 Fix pipeline-corruption root cause #1 — pin the shared-libc master frames un-freeable
v5.8.49 Catchable CPU-exception signals — signal(SIGSEGV/SIGFPE/SIGILL, handler) recovers instead of dying

Sockets, threads and real SMP — v5.8.50 to v5.8.99

BSD sockets from ring 3, poll, alarm, user threads with clone+futex, spinlocks, TLB shootdown, and user processes running on the application processors.

Version Change
v5.8.50 Panic-screen polish + kernel %x de-doubled
v5.8.51 Network byte order consolidated into htons/htonl/ntohs/ntohl + an IP4_OCTETS display macro (hardening refactor — behavior-preserving)
v5.8.52 Userspace TCP sockets — socket()/connect()/read()/write()/close() wired to the real TCP stack, plus a built-in loopback echo service
v5.8.53 Server-side userspace sockets — bind()/listen()/accept() (a userspace program can now run a TCP server)
v5.8.54 Scheduler fix — a process preempted mid-syscall now resumes on the correct CR3 (a latent crash the busy-polling socket syscalls newly exposed)
v5.8.55 Userspace UDP sockets — socket(SOCK_DGRAM) + sendto()/recvfrom() over the existing udp.c
v5.8.56 nc (netcat) — a userspace tool that bridges stdin/stdout to a TCP or UDP socket, plus a UDP echo service to talk to
v5.8.57 sigsetjmp/siglongjmp — multi-fault recovery (finishes the catchable-signals work from v5.8.49)
v5.8.58 alarm() + SIGALRM — timer-driven signals
v5.8.59 Persistent filesystem — verified end-to-end + polished
v5.8.60 poll() — I/O multiplexing over sockets, pipes, and stdin (the full-duplex / multi-fd primitive)
v5.8.61 nc is now full-duplex (built on v5.8.60's poll())
v5.8.62 The GUI file manager can now browse (and edit) the persistent /mnt ext2 filesystem
v5.8.63 The GUI file manager opens files in the Text Editor (cross-app integration)
v5.8.64 Persistent user accounts on the ext2 disk — useradd survives a reboot; the misleading "EXT2 not available" fallback is fixed
v5.8.65 Account security hardening — random per-user salts, a stronger KDF, a password policy, and login lockout
v5.8.66 Create your own account from the login screen, with a profile picture
v5.8.67 Login fixes — a failed login no longer closes the VM, and the create-account panel no longer overflows
v5.8.68 Login create-panel crash fix — repaint only the active field per keystroke, not the whole panel
v5.8.69 Taskbar user menu — click your badge to change your profile picture or log out (back to the login, no reboot)
v5.8.70 Per-user home directories — the Terminal and File Manager start in /home/<user>
v5.8.71 Starter content for a new home directory
v5.8.72 Minesweeper — a GUI game (new app) + a right-click routing fix
v5.8.73 wget — a userspace HTTP client over the TCP sockets, with its own DNS-over-UDP resolver
v5.8.74 exec forwards argv — userspace tools run with arguments straight from the kernel shell
v5.8.75 The kernel shell auto-execs userspace ELFs — run tools by bare name, no exec prefix
v5.8.76 Tab-completion now includes userspace ELFs
v5.8.77 wget follows redirects + an open command = download-and-read
v5.8.78 Concurrent multi-process sockets: hardening + a repro — the "sockets stay single-process" garble no longer reproduces
v5.8.79 Root-caused the v5.8.78 concurrent-socket "Heisenbug": it was a conn-table capacity limit masked by a Makefile stale-build gap — and fixed the Makefile
v5.8.80 Four POSIX file syscalls — stat/fstat/lseek/getppid (SYS 44–47) — plus two Makefile build-correctness fixes that had been silently shipping stale kernels
v5.8.81 VFS hardening — closed a latent heap OOB and raised the capacity caps
v5.8.82 dup + rename syscalls, and shell-spawned tools now inherit the terminal's cwd
v5.8.83 THE pipeline-corruption Heisenbug — root-caused and FIXED after spanning many increments
v5.8.84 Physical allocator now honors the multiboot2 memory map — the principled generalization of the v5.8.83 firmware-hole fix
v5.8.85 User stacks are now demand-grown with a guard page (was a fixed, pre-committed 64 KB)
v5.8.86 SMEP + SMAP — hardware-enforced ring-0 ↔ user isolation
v5.8.87 Real user threads — clone(CLONE_VM) + futex (SYS 50/51, count 50→52)
v5.8.88 Thread coherence — one heap and one mmap table per thread group (multi-threaded malloc now works)
v5.8.89 Shared fd table per thread group — the thread model is now complete
v5.8.90 SMP stage 1 — the application processors are alive
v5.8.91 SMP stage 2 — real spinlocks, and the syscall path's scratch state goes per-CPU
v5.8.92 SMP stage 3a — the APs run scheduled kernel threads, in parallel with the BSP
v5.8.93 SMP stage 3b — user processes run in ring 3 on the application processors
v5.8.94 TLB shootdown IPIs — the mechanism, proven
v5.8.95 TLB shootdown wired into unmap and mprotect — and a deadlock shape found while auditing
v5.8.96 COW remap shoots down too — and two things that did NOT work, reverted and documented
v5.8.97 get_current_process() was BSP-only — the root cause of both v5.8.96 hangs, found and fixed
v5.8.98 The #GP pinned down to one instruction — but not solved, and said so
v5.8.99 preempt_count is per-CPU (release blocker P0.2) — and a correction to my own priority call

The v5.9.0 audit and LTS — v5.9.0-rc1 to v5.9.0-LTS

A systematic security and correctness audit. Each release closes a specific confirmed finding; v5.9.0-LTS is the long-term-support snapshot.

Version Change
v5.9.0-rc1 Release blocker P0.3 closed: the last local-only invalidations on paths that REMOVE or REPLACE a mapping
v5.9.0-rc2 Ring-3 → ring-0 arbitrary write closed at its root (3 CRITICAL findings, one fix)
v5.9.0-rc3 Two more CRITICALs closed, from the completion audit of the six areas whose verification had died on a quota limit
v5.9.0-rc4 The missing cld — every interrupt entry path was running with whatever RFLAGS.DF ring 3 left set
v5.9.0-rc5 The mprotect family: fork isolation restored, and the address range bounded (3 HIGH + 1 MEDIUM)
v5.9.0-rc6 Three of the unverified findings checked by hand — all three real, all three fixed
v5.9.0-rc7 Three more HIGHs: framebuffer clipping and the dynamic linker
v5.9.0-rc8 dup() of a mount-backed file was a double free
v5.9.0-rc10 libseg_load — the last confirmed CRITICAL — validated nothing at all
v5.9.0-rc11 Ring-3 flags that survived into the kernel, and the rest of the ELF header validation (1 HIGH + 3 more)
v5.9.0-rc12 The 22-pixel GUI family: one missing term, six places
v5.9.0-rc13+rc14 The editor no longer eats your file, and the file manager stops indexing entries[-1]
v5.9.0-rc15 The ext2 write path, verified by e2fsck instead of by itself
v5.9.0-rc16 A VFS fd IS a node pointer — so the node pool must know who is holding one
v5.9.0-rc17 The three GUI highs — and a fourth found only by actually clicking
v5.9.0-LTS P0.1 CLOSED — the intermittent ring-3 [fault] was a preemptible CR3-switch→iretq window in the syscall-exit path. LTS release

Polish, DOOM, the browser and TLS — v5.9.1 to v5.9.99

The Nightfall desktop theme, window management, the DOOM port, the games, Selene, the full TLS 1.2 crypto arc, and the image decoders.

Version Change
v5.9.1 "Nightfall" desktop — a central GUI palette, and the brand purple everywhere the placeholder green used to be
v5.9.2 The palette actually reaches the apps — and the focused window is finally the brand colour
v5.9.3 The window frame joins the focus story
v5.9.4 Desktop icons wrap instead of running off the screen
v5.9.5 No window can be born off-screen
v5.9.6 Window geometry follows the screen — the follow-up v5.9.5 named as its own honest limitation
v5.9.7 Window-management keyboard shortcuts — and they retire v5.9.6's honest gap
v5.9.8 Window snapping — Alt+Left/Right half-tiling, built on v5.9.7's chord layer
v5.9.9 Quarter-tiling — v5.9.8's snap grown from one axis to two
v5.9.10 Window drop shadows — the first depth in the compositor, a fresh visual area after four increments of window management
v5.9.11 Title-bar gradient — the second depth cue, sitting with v5.9.10's shadows
v5.9.12 Rounded window tops — the capstone of the modern-window look (shadow + gradient + rounded corners)
v5.9.13 Taskbar depth — the same gradient treatment carried down from the window chrome to the last flat surface
v5.9.14 Start menu depth + hover — the last flat panel joins the polished chrome
v5.9.15 Context + user menus polished — every menu now shares one look
v5.9.16 Login card — the brand look reaches the first screen the user sees
v5.9.17 Rounded-corner primitives consolidated into fb.c — paying down the debt v5.9.16 flagged
v5.9.18 Windows round on all four corners — the v5.9.12 follow-up, closed with a framebuffer clip region
v5.9.19 README hero screenshot refreshed — the repo's public face finally matches the OS
v5.9.20 Per-CPU IST stacks — first increment of the kernel-internals track (pivot away from the visual arc)
v5.9.21 VFS node-pool spinlock — first increment of the T1 SMP-locking arc
v5.9.22 VFS mount-table spinlock — second increment of the T1 SMP-locking arc
v5.9.23 Keyboard input path locked — third T1 increment, the terminal's line discipline made SMP-safe
v5.9.24 Network stack serialized under one net_lock — the capstone of the T1 arc (after the VFS node pool, mount table, and keyboard input)
v5.9.25 The EXT2 driver locked — the T1 follow-up beyond the planned trio, and the last major non-reentrant subsystem a user process can reach under smpbalance
v5.9.26 EXT2 sector cache — the driver's first cache, write-through so it cannot corrupt the disk
v5.9.27 Partial munmap now splits the VMA — a real "the unmap silently didn't take" bug in the memory manager
v5.9.28 Partial mprotect now splits the VMA too — the companion to v5.9.27, closing the mmap/mprotect precision pair
v5.9.29 Fullscreen framebuffer syscalls — a userspace program can finally put pixels on the screen. First step toward the v5.9.40 DOOM milestone
v5.9.30 Raw key-event path — press AND release for a fullscreen game. Second DOOM-milestone enabler (DG_GetKey), after v5.9.29's video
v5.9.31 The DOOM port begins — the doomgeneric engine recovered from git history, and the platform hooks scoped against the new syscalls
v5.9.32 DOOM userspace build, step one: the whole engine compiles, and the link gap is pinned to 35 symbols
v5.9.33 DOOM links — the whole engine now produces a userspace ELF (448 KB, zero undefined symbols)
v5.9.34 DOOM RUNS — the original 1993 DOOM (shareware), playable on NyxOS. The "but can it run DOOM?" milestone, reached
v5.9.35 DOOM gets a desktop icon — launch the game by clicking, not by knowing the doom command
v5.9.36 The DOOM desktop icon actually launches the game now — v5.9.35 wired the icon but clicking it did nothing
v5.9.37 DOOM runs in a WINDOW now, not fullscreen — you can see the desktop around it
v5.9.38 Title-bar buttons made pixel-consistent — the maximize icon was malformed on every window
v5.9.39 Pong — an in-kernel GUI game, and the compositor's first ANIMATED window
v5.9.40 A "Games" desktop folder gathers Minesweeper, DOOM and Pong — and Pong gets a clickable icon, like DOOM
v5.9.41 Every desktop app icon gets its own identity — a little picture of what it does, not one shared generic square
v5.9.42 Snake — a second in-kernel game, and the Games folder grows to four
v5.9.43 Tetris — the fifth game, and the most mechanically complete one yet
v5.9.44 Selene — the NyxOS web browser fetches and renders the real internet
v5.9.45 Selene grows up — clickable links, keyboard link-navigation, and a Back history
v5.9.46 Auto-DHCP at boot — the network is ready for everything, no manual dhcp
v5.9.47 Selene reads like a page, not a wall of text — headings, paragraphs, lists and rules
v5.9.48 TLS, step 1 — NyxOS speaks TLS with a real https server (ClientHello → ServerHello)
v5.9.49 TLS, step 2 — X25519, the first cryptographic primitive (Curve25519 ECDH), proven against the RFC 7748 vectors
v5.9.50 TLS, step 3 — the TLS 1.2 PRF (P_SHA256), the key-derivation function, proven against RFC 4231 + the canonical PRF vector
v5.9.51 TLS, step 4 — the real ECDHE key agreement: NyxOS and a live https server derive the same session keys
v5.9.52 TLS, step 5 — AES-128-GCM, the record cipher: authenticated encryption that reproduces the NIST vectors byte-for-byte
v5.9.53 TLS, step 6 — the record layer: AES-128-GCM records + the Finished verify_data, framed exactly on the wire
v5.9.54 TLS, step 7 — the handshake COMPLETES: NyxOS establishes a verified, encrypted TLS channel with a real https server
v5.9.55 https, for real — NyxOS fetches and decrypts a live https page over the TLS channel
v5.9.56 Selene opens https sites — the browser speaks TLS
v5.9.57 A real CSPRNG — the TLS ephemeral key and ClientHello random are now unpredictable
v5.9.58 DER/ASN.1 reader — reading an X.509 certificate, step 1 of the TLS trust model
v5.9.59 NIST P-256 (secp256r1) curve arithmetic — the math behind the certificate's signature
v5.9.60 ECDSA-P256 signature verification — the check at the heart of certificate validation
v5.9.61 TLS now cryptographically verifies the server's ServerKeyExchange signature against its certificate
v5.9.62 RSA PKCS#1 v1.5 signature verification — the last crypto primitive for the trust chain
v5.9.63 SHA-512 / SHA-384 — the hash the certificate chain's CA links need
v5.9.64 NIST P-384 (secp384r1) curve arithmetic + ECDSA-P384/SHA-384 verify — the other primitive the CA links need
v5.9.65 TLS certificate-chain verification to a pinned trust anchor — the trust model is closed, TLS is now MITM-resistant (FINALE of the crypto arc)
v5.9.66 Leaf-certificate hostname + validity checks — "verify the peer" is now complete
v5.9.67 Streaming https receive — Selene can now load large pages (back to the browser after the crypto arc)
v5.9.68 HTML forms in Selene — the browser payoff TLS was gating all along (search boxes work)
v5.9.69 POST forms — Selene can submit login-style forms (the complement to GET)
v5.9.70 NIST P-256 (secp256r1) ECDHE key agreement — NyxOS's TLS now reaches the huge set of servers that prefer P-256, not just x25519 ones
v5.9.71 TLS now verifies the RSA-signed ServerKeyExchange too — ECDHE-RSA servers are no longer trusted "unverified"
v5.9.72 TLS certificate enforcement — the trust model can now REFUSE a connection, not just warn (MITM defence goes from "reported" to "blocked")
v5.9.73 A real TLS trust store — strict mode now works across the web, not just SSL.com-rooted sites
v5.9.74 RSA-PSS ServerKeyExchange verification + the SKE signature folded into strict mode — strict TLS is now fully MITM-safe
v5.9.75 Selene: find-in-page (Ctrl+F) — back to the browser after the long TLS arc, with a visible feature
v5.9.76 Selene: <img> placeholders — images stop vanishing; each one renders as a framed box showing its alt text (or filename)
v5.9.77 Selene: <table> column layout — tables stop collapsing into a run-on line and render as aligned, bordered columns
v5.9.78 Selene: tabs — several pages open at once in one window (the browser's biggest UX jump yet)
v5.9.79 ECDSA-P384/SHA-384 ServerKeyExchange verification (0x0503) — the last common SKE signature scheme NyxOS couldn't check
v5.9.80 secp384r1 as an ECDHE group + P-384 ECDHE key agreement — which turns v5.9.79's KAT-only ECDSA-P384 check into a LIVE, end-to-end verification
v5.9.81 DEFLATE / zlib decompression (inflate.c) — the first step toward decoding real images in Selene
v5.9.82 A PNG decoder (png.c) on top of v5.9.81's inflate — NyxOS can now turn PNG bytes into pixels
v5.9.83 Selene draws real images — the payoff of the image arc: <img> PNGs are now fetched, decoded and rendered inline
v5.9.84 Lazy + progressive image loading — an image-heavy page shows its text instantly and only downloads the pictures you can actually see
v5.9.85 BMP image support + a format-agnostic image pipeline — Selene now shows .bmp as well as .png
v5.9.86 GIF support — the third image format, with a real LZW decompressor. Selene now shows PNG, BMP and GIF
v5.9.87 Cooperative, non-blocking image loading — the browser never freezes while pictures download. Selene loads one image per compositor frame
v5.9.88 Animated GIF playback — Selene's GIFs now MOVE, driven by v5.9.87's per-frame tick. gif_decode_anim composites every frame, honouring sub-rectangle, transparent index and disposal method
v5.9.89 A baseline JPEG decoder (jpeg.c) — the last major web image format. Sequential DCT, Huffman-coded, 8-bit, with restart markers
v5.9.90 JPEG wired into Selene — the browser shows real photos. The image arc is complete: PNG + BMP + GIF (static and animated) + JPEG
v5.9.91 "Fancy" chroma upsampling for JPEG — 4:2:0 photos now decode as sharply as a reference decoder, using libjpeg's triangle filter instead of nearest-neighbour
v5.9.92 RSA-PKCS1-SHA512 ServerKeyExchange verification (0x0601) — NyxOS now verifies every common SKE signature scheme
v5.9.93 GIF loop count honoured (NETSCAPE2.0) — animated GIFs stop after their specified number of plays instead of looping forever
v5.9.94 Selene decodes ~30 HTML entities (named + numeric) to readable text
v5.9.95 Selene follows HTTP redirects (301/302/303/307/308), ≤ 5 hops — first feature after the kernel/ folder reorg
v5.9.96 Selene tables handle colspan/rowspan via an occupancy grid
v5.9.97 Selene renders nested <table>s — flattened inline as [ a b / c d ] instead of corrupting the outer grid
v5.9.98 Selene renders ordered + nested lists — <ol> numbered 1. 2. 3., nested lists indented per level
v5.9.99 Selene formats <pre> (whitespace preserved) and <blockquote> (indented) — the last feature increment

General maintenance — v5.9.100 to v5.9.126

Feature work stops; a correctness, cleanup and hardening sweep begins — one file or subsystem per release, self-tests re-run each time. Several releases close remotely- or certificate-reachable defects.

Version Change
v5.9.100 Start of the maintenance pass — 14/15 build warnings fixed (zero C warnings), plus a real UB bug (negative shift in JPEG) and two latent hazards
v5.9.101 initramfs_data.h untracked (clean builds stop churning 27k lines) + the last NASM warning fixed — make is 100 % warning-clean
v5.9.102 Dead-code + stale-comment sweep — two never-called functions removed, three comments that contradicted shipped features corrected
v5.9.103 -Wshadow made a permanent flag after fixing the two shadow warnings (a dhcp.c cookie, a compositor.c height)
v5.9.104 Fixed a remotely-triggerable NULL-deref kernel crash in the TCP receive path (unchecked kmalloc under memory pressure)
v5.9.105 get_phys_addr returned a wrong address for NX pages (the NX bit leaked into the result); three duplicate frame masks consolidated
v5.9.106 Hardened the X.509 date parser (der.c), which accepted a 'Z' in any date position; der.c now -Wsign-conversion-clean
v5.9.107 -Wsign-conversion audit of the untrusted image decoders — all five bounds-sound; gif.c made clean
v5.9.108 Fixed a latent out-of-bounds stack read in the HTTP request builder (snprintf-return clamp); http.c made clean
v5.9.109 Fixed a rename() that applied half of a failed cross-directory move
v5.9.110 Fixed heap fragmentation — adjacent free blocks were never merged, so a large allocation could fail with plenty of free memory
v5.9.111 Fixed a data+FIN TCP segment being half-handled, so a graceful close stalled until the peer retransmitted a bare FIN
v5.9.112 Added the missing in-order sequence check to the TCP receive path — a duplicate or out-of-order segment no longer corrupts the recv stream
v5.9.113 DHCP option-walker bounds-checked — the option loops no longer read a length byte or value past the packet
v5.9.114 IP header validation — the RX checksum is verified and the IHL parsed before a packet is trusted
v5.9.115 mmap length-overflow fix — an oversized length can no longer wrap the range arithmetic
v5.9.116 ICMP checksum byte-order fix — external ping gets replies for the first time
v5.9.117 ARP header validation (RFC 826) — non-Ethernet/IPv4 or mismatched hlen/plen frames are rejected before caching
v5.9.118 ext2 block-group-descriptor bounds — an out-of-range group index is rejected before a BGD read/write
v5.9.119 ext2 block-pointer bounds — on-disk block numbers are validated against total_blocks, including indirect blocks
v5.9.120 ext2 write capacity check — a write that would exceed the filesystem is refused up front
v5.9.121 Ethernet RX hardening — a MAC filter and a defensive length clamp on every received frame
v5.9.122 TLS record-layer hardening — a plaintext-length bounds check and a certificate-leaf bound
v5.9.123 X.509 self-test buffer-overflow fix — the tampered-leaf copy is bounded to its buffer (enlarged 1003 → 2048)
v5.9.124 SYS_FBPRESENT integer-overflow fix — w*h*4 could wrap to 0 and blit an out-of-bounds read to the screen; a per-dimension cap closes it
v5.9.125 ext2 writer free-space check — an up-front check prevents a block leak when the disk fills mid-write
v5.9.126 RTL8139 promiscuous mode dropped from the receive config — the NIC no longer accepts frames addressed to other hosts

Desktop image viewing and Selene's CSS engine — v5.9.127 to v5.9.180

The maintenance pass gives way to features again. The desktop Image Viewer learns to open real image files, then Selene grows a full inline-CSS and legacy-HTML rendering engine — colour and backgrounds, the bold/underline/strike/overline family, text-align and text-transform, tables with per-cell/row/column colour and alignment, definition lists and captions, ~60 more HTML entities, and form widgets — one verified increment at a time.

Version Change
v5.9.127 Image Viewer opens real image files — PNG/BMP/GIF/JPEG, with animated-GIF playback
v5.9.128 File Manager opens images in the Image Viewer (auto-fit zoom) + a files command
v5.9.129 Selene: inline CSS text colour — style="color:.." (and legacy <font color>), with a nesting colour stack
v5.9.130 Selene: inline CSS background/background-color (and legacy <font bgcolor>), per character
v5.9.131 Selene: bold — <b>/<strong> and font-weight:bold/700+
v5.9.132 Selene: underline — <u> and text-decoration:underline (a per-char text-flags byte replaces the bold grid)
v5.9.133 Selene: strikethrough — <s>/<del>/<strike> and text-decoration:line-through
v5.9.134 Selene: more semantic inline tags — <mark> (highlight), <ins> (underline), <code>/<kbd>/<samp>/<tt> (a code background)
v5.9.135 Selene: text-aligncenter/right/left and the <center> tag, applied per wrapped line
v5.9.136 Selene: <hr> becomes a real 2px rule (fb_fill_rect) instead of a row of dashes
v5.9.137 Selene: <q> inline quotation — quote marks around the quoted text, carrying the enclosing style
v5.9.138 Selene: <abbr> with a dotted underline (a fourth text decoration)
v5.9.139 Selene: <sub>/<sup> — a same-size glyph shifted down/up (a 2-bit vertical-offset field)
v5.9.140 Selene: <hr> honours width and alignment — width:N%, legacy width=, and align=
v5.9.141 Selene: <hr> takes a colour (color/border-color) instead of the default grey
v5.9.142 Selene: list-style-type (and legacy type=) on <ul>/<ol> — disc/circle/square, decimal/roman/alpha
v5.9.143 Selene: text-transform — uppercase/lowercase/capitalize, per span, with nesting
v5.9.144 Selene: <dl>/<dt>/<dd> — a real definition list, each description indented on its own line
v5.9.145 Selene: a <table>'s <caption> rendered as a centred title above the box
v5.9.146 Selene: a nested <ul> cycles its bullet by depth — disc → circle → square
v5.9.147 Selene: CSS text-indent on block elements — a first-line indent in px/em/rem
v5.9.148 Selene: CSS caption-side:bottom moves a table caption below the box
v5.9.149 Selene: <figure>/<figcaption> laid out as an indented block with the caption beneath
v5.9.150 Selene: border=0 (or border:none) draws a borderless table — aligned columns, no rules
v5.9.151 Selene: a table's cellpadding attribute widens the space inside each cell
v5.9.152 Selene: <ol start=N> — an ordered list can begin numbering at N
v5.9.153 Selene: <li value=N> — a list item can restart the numbering mid-list
v5.9.154 Selene: text-align on a table <caption> — left/right override the centred default
v5.9.155 Selene: text-align on a <figcaption> — centre/right placement, completing the caption pair
v5.9.156 Selene: <ol reversed> — an ordered list numbers downward (3, 2, 1)
v5.9.157 Selene: display:none / visibility:hidden / the hidden attribute drop the element's whole subtree
v5.9.158 Selene: the CSS colour parser grows from ~28 to ~90 named colours (tomato, steelblue, rebeccapurple, ...)
v5.9.159 Selene: per-cell table alignment — <td>/<th> align=/text-align place text within the column
v5.9.160 Selene: text-decoration:overline — a rule along the top of the text (completes the decoration family)
v5.9.161 Selene: row-level table alignment — <tr align=..> sets a default for every cell in the row
v5.9.162 Selene: <details>/<summary> disclosure widgets — collapsed ([+]) vs open ([-])
v5.9.163 Selene: column-default table alignment — <col align>/<colgroup align> (the cascade cell > row > column)
v5.9.164 Selene: &nbsp; (and &#160;/&#xA0;) is a true non-breaking space — "10 kg" never wraps apart
v5.9.165 Selene: white-space:nowrap keeps a styled run on one line
v5.9.166 Selene: ~30 more HTML entities — typographic, currency, math, arrows and card suits, each a real CP437 glyph
v5.9.167 Selene: the legacy presentational align attribute (center/right/left) on block elements (p/div/h1-h6)
v5.9.168 Selene: <hr size=N> (or CSS height) draws a rule of a chosen thickness (1-8 px)
v5.9.169 Selene: <body bgcolor>/<body text> (and the CSS equivalents) set the whole-page colours
v5.9.170 Selene: table cell and row backgrounds — <td>/<th>/<tr> bgcolor (and background-color)
v5.9.171 Selene: column backgrounds — <col bgcolor>/<colgroup bgcolor>, completing the table-colour cascade
v5.9.172 Selene: Greek letters and more accented-Latin characters added to the HTML-entity table
v5.9.173 Selene: HTML5 <progress> and <meter> as inline CP437 block bars with a percentage
v5.9.174 Selene: the legacy <nobr> element keeps its whole content on one line
v5.9.175 Selene: <audio>/<video> render as a small inline placeholder box showing the file name
v5.9.176 Selene: <input> checkbox and radio render as a state glyph — [x]/[ ] and (*)/( )
v5.9.177 Selene: a <blockquote> gets a vertical bar down its left margin, one per nesting level
v5.9.178 Selene: the italic/emphasis family — <i>/<em>/<cite>/<var>/<dfn> rendered with an underline
v5.9.179 Selene: <kbd> rendered as a bracketed keycap — [Key]
v5.9.180 Selene: <select> rendered as an inline dropdown badge showing the chosen <option>

See also

  • Home - what the current release contains
  • Architecture - the system these releases built
  • Contributing - the versioning and release conventions

External resources

Clone this wiki locally