Releases: nyxos-dev/nyx-os
Release list
NyxOS v6.4.228 — Boots on Real Hardware 🌙
NyxOS boots on real hardware 🌙
NyxOS — a hobby x86-64 desktop OS written from scratch in C/asm — now boots on a physical UEFI machine, all the way to the desktop.
Verified end-to-end on an Intel Core i5-1035G7 handheld (8" UMPC): UEFI → GOP-framebuffer graphics → keyboard login → full GUI desktop (terminal, windows, taskbar, animated wallpaper), running entirely from RAM.
What it took to get here (v6.4.222 → v6.4.228)
- UEFI boot via GRUB-EFI (multiboot2), drawing into the bootloader's GOP framebuffer instead of the QEMU-only Bochs VBE.
- Fixed the first bare-metal panic — a stale multiboot-1 module parser choking on the multiboot-2 boot info — and a boot hang on an unbounded i8042 mouse-init poll.
- Display rotation (
rotate=boot option) for portrait-mounted handheld panels. - Keyboard works via i8042 legacy-USB emulation; MouseKeys drives the pointer from the keyboard (Alt+WASD to move, Alt+Space to click) when there is no mouse/touchpad.
Download & flash
NyxOS-uefi.iso— modern UEFI PCs & handhelds. Flash with Rufus in DD mode, and turn Secure Boot OFF in firmware. At the boot menu pick a rotation if your screen is portrait (handhelds: rotate 90); the default is landscape.NyxOS.iso— legacy BIOS / QEMU.
RAM-only — no disk is touched. On bare metal, networking (Wi-Fi) and the internal touchpad are not supported yet.
Try it in QEMU
qemu-system-x86_64 -cdrom NyxOS.iso -m 512
🌙 Nyx — goddess of the night.
DOOM UPDATE 🎮
DOOM now runs on NyxOS!
v5.9.29 – Fullscreen framebuffer syscalls (SYS_FBINFO/SYS_FBPRESENT)
v5.9.30 – Raw key-event path with press/release (SYS_GETKEYEVENT)
v5.9.31 – DOOM engine source recovered from git history
v5.9.32 – Whole engine compiles (83/83 TUs), 35 symbols to link
v5.9.33 – Full link succeeds: doom.elf = 448 KB, zero undefined
v5.9.34 – DOOM RUNS — E1M1, status bar, ESC menu, Ctrl-C exit
v5.9.35 – DOOM desktop icon (hell-red tile on the desktop)
v5.9.36 – DOOM desktop icon actually launches the game
Play the original 1993 DOOM shareware on NyxOS. Requires doom1.wad on /mnt (ext2 disk).
57 syscalls. 0 panics.
v5.9.0-LTS — P0.1 CLOSED
P0.1 CLOSED — the intermittent ring-3 [fault] was a preemptible CR3-switch→iretq window in the syscall-exit path, fixed with a single cli. LTS release.
Also includes: 3 GUI highs (paint divide-by-zero, menu hit-test skew, fb backbuffer repoint, level-triggered menus), VFS fd refcounts, ext2 write-path overhaul verified by e2fsck (9 defects), editor truncation guard, full audit/hardening (ELF bounds, user_v2p, FMASK, cld, TSS struct, 22-pixel GUI offset, framebuffer clipping, dynamic linker, fork isolation with mprotect), SMP stages (per-CPU TSS, user procs on APs, spinlocks, TLB shootdown IPIs), thread/fd table coherence, and the full rc1-rc17 arc.
v5.8.0 — Nyx C language runtime
🌙 Nyx C — first native programming language on NyxOS
v5.8.0 introduces Nyx C, a Go/Zig-inspired typed subset of C that transpiles to C and links against the nyxrt runtime. The first .nyx program — hello.nyx — writes to the terminal using string interpolation and direct syscalls.
What's new
- Nyx C runtime (
user/nyxrt.h,user/nyxrt.c):nyx_str,nyx_slice,nyx_resulttypes, fixed-width integers__nyx_syscall6for ring-3 syscalls- String interpolation:
__nyx_fmt_begin/_str/_i64
- First
.nyxprogram:user/hello.nyxwithwrite()andgetpid() - Build system:
NYXCFLAGSrule inkernel/makefile,hello_nyx.elflinked with crt0+nyxrt, embedded in initramfs - Version bump:
v5.7.25→v5.8.0
Verified
nyx:/$ exec /hello_nyx.elf
hola desde nyx c! pid=5
nyx:/$
Files included
| File | Description |
|---|---|
user/nyxrt.h |
Runtime header — types, syscall ABI, format helpers |
user/nyxrt.c |
Runtime implementation — append with NUL, i64-to-string |
user/hello.nyx |
Nyx C source code |
user/hello_nyx.c |
C transpilation output from nyxc |
kernel/makefile |
Build rules (NYXCFLAGS, nyxrt.o/hello_nyx.o targets) |
kernel/initramfs_data.h |
Initramfs regenerated with hello_nyx.elf |
Commits
330e497— i18n: AGENTS.md + hello.nyx + hello_nyx.c English-only commentsb390f5f— Website & README: Nyx C badge, v5.8.0 timeline update42e6e63— v5.8.0: Nyx C language runtime - first .nyx program on NyxOS7e853bc— Nyx C runtime + first hello_nyx.elf on NyxOS
NyxOS v5.7.0 — Per-fd offsets / streaming file I/O
v5.7.0 — Per-fd offsets / streaming file I/O
New
- Per-fd byte offsets: Userspace fd table tracks byte offset per open fd, advanced by each SYS_READ/SYS_WRITE — enables streaming reads and append writes from ring 3
- vfs_pread / vfs_pwrite: Offset-aware variants that grow + zero-fill without discarding existing content. Kernel-internal vfs_read/vfs_write (offset 0) unchanged
Fixed
- snprintf: Added missing format specifiers %%c, %%ld/%%lx/%%lu, %%p\ — fixes File Manager names showing as garbage (%%A) and calculator display (%%ld)
- VFS readdir: Implemented (was stub returning NULL). Directories now browsable from File Manager
- vfs_open: Now accepts directories (removed type != 0 check)
- vfs_write_file: Auto-creates files if they don't exist
- Calculator: Window height fixed to include missing top margin (204→212)
- Editor: Default save path changed to absolute /home/user/untitled.txt
- Heap bug: kmalloc fell back to heap on slab miss for sizes 505-1016 B; added missing 1024 slab class; dual magics for correct kfree routing
- Process reaping: exec now frees page directory, stacks, and process_t on exit
- SYS_WRITE: Routes file fds (≥3) through ufd table to vfs_write
Compositor
- Workspace switching: Ctrl+1..4 (bare digits are passed to terminal/calculator)
- Removed WASD mouse cursor debug movement
- Reduced pause loop 2M→100K for better responsiveness
- About window: NyxOS Nightfall text
v5.3.0 - Login System
Boot animation (NyxOS-themed, ~5s, 23-step progress bar)
Auth backend: credential storage on EXT2 (/etc/passwd)
Login screen: framebuffer UI with keyboard input (no mouse)
Default user nyx/nyx with fallback when no EXT2 disk
On login failure → reboot; on success → launch NyxOS Desktop
Keyboard buffer exposed for direct polling
NyxOS v5.2.0
v5.2.0 — Mouse cursor + compositor stability
Fixes
- PIT/compositor loop hang: sleep(10) at end of compositor loop blocked forever because the PIT IRQ (IRQ0) wasn't incrementing ick_count when the APIC was active. Replaced with a pause-based busy-wait.
- PS/2 bit-5 guards: Keyboard and mouse IRQ handlers now check the PS/2 status register bit 5 to prevent stealing each other's data bytes from port 0x60.
- WASD cursor sync: After WASD keys modify the cursor position, mouse_set_pos() syncs the hardware position so the next loop iteration doesn't overwrite it.
- SDL display: Changed -display gtk to -display sdl for Windows compatibility.
Cursor
- Restored cursor to original arrow shape (was a red debug rectangle).
v5.1.0 — Stability and bugfix release
v5.1.0 — Stability and bugfix release
Stability and bugfix release — six critical fixes for crashes and GUI rendering.
Fixes
- TSS struct alignment fix (\kernel/kernel.h): three reserved \uint32_t\ fields (SS0/SS1/SS2 at offsets 28-39) were incorrectly merged into a single \uint64_t, shifting all IST pointers 4 bytes early. Any exception using an IST (double fault, NMI) read a garbage stack pointer → triple fault.
- GDT limit correction (\kernel/gdt.c): limit was (68+16)-1=63\ (too large), corrected to (58+16)-1=55.
- APIC/PIC IRQ masking fix (\kernel/irq.c): when APIC is active, the legacy PIC stays fully masked. Prevents duplicate interrupt delivery.
- switch_to_user_process inline asm fix (\kernel/switch.asm): AT&T operand order was reversed (source/destination swapped in \mov), causing exec'd user processes to crash.
- QEMU display fix (
un.ps1): changed from -display gtk\ to -display sdl\ (gtk is broken on Windows). - VGA 8x16 font data corruption fix (\kernel/font.c): font_data array had marker bytes (the glyph's own index) inserted at position (index % 16), shifting all pixel data. Replaced with correct IBM VGA 8x16 ROM font. GUI text now renders legibly.
- Build: zero errors, zero warnings.
v5.0.0 - Full GUI Application Suite
What's new
- Text Editor — Full keyboard-driven text editor with cursor navigation (arrows, Home/End, PgUp/PgDn), click-to-position, scroll, Open/Save buttons, Ctrl+S/Ctrl+O shortcuts, line numbers, cursor blink, status bar (line/col). File access via VFS.
- Image Viewer — 512x384 color-bar test pattern with checkerboard grid overlay, zoom (+/-) from 25% to 400%, arrow-key pan, R to reset, nearest-neighbor scaling.
- Sound Test — PC Speaker section (440Hz beep, C major scale melody, alternating alarm), Sound Blaster 16 section (sine 440Hz, square 220Hz, sweep 200-3000Hz via fixed-point sine table).
- Brighter wallpaper — Sky-blue gradient with green grass strip, replacing extremely dark navy gradient.
- Desktop expanded to 8 icons — Files, Terminal, Editor, Viewer, DOOM, Settings, Paint, Sounds. More vibrant colors + solid label backgrounds.
- All Start menu placeholders replaced — Text Editor, Image Viewer, and Sound Test are now real GUI apps.
- Build: zero errors, zero warnings.
NyxOS v4.0.0 - Nightfall
NyxOS v4.0.0 - Full x86_64 Native
This release officially recognizes NyxOS as a fully native x86_64 (long mode) operating system. The kernel has been 64-bit from the ground up — this version cleans up the documentation and removes dead 32-bit code.
Changes
- Full x86_64: Long mode, 4-level PML4 paging, syscall/sysret MSRs, ELF64 loader, 64-bit GDT/IDT/TSS, iretq, full r8-r15 context switching
- Cleanup: Removed dead 32-bit assembly files (gdt_flush.asm, idt_load.asm, build_doom.sh)
- Docs: AGENTS.md updated to reflect true x86_64 architecture
- Build: tools/build.sh targets x86_64-elf, busybox x86_64 binary
Features
- 40+ shell commands, file operations, pipes, environment variables, Tab completion
- TCP/IP stack (RTL8139, ARP, IP, UDP, ICMP, DHCP, TCP)
- Preemptive multitasking with ring 3 ELF64 userspace
- EXT2 read/write filesystem with VFS mount layer
- GUI compositor with windows, taskbar, desktop icons, 4 workspaces
- Terminal emulator and File Manager windows
- Sound Blaster 16 DMA audio, PC speaker
- DOOM game integration
- Initramfs with userspace init program (libc)