Skip to content

Releases: nyxos-dev/nyx-os

NyxOS v6.4.228 — Boots on Real Hardware 🌙

Choose a tag to compare

@kazah-png kazah-png released this 16 Aug 22:25

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 🎮

Choose a tag to compare

@kazah-png kazah-png released this 25 Jul 01:04

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

Choose a tag to compare

@kazah-png kazah-png released this 20 Jul 23:24

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

Choose a tag to compare

@kazah-png kazah-png released this 06 Jul 04:53

🌙 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_result types, fixed-width integers
    • __nyx_syscall6 for ring-3 syscalls
    • String interpolation: __nyx_fmt_begin / _str / _i64
  • First .nyx program: user/hello.nyx with write() and getpid()
  • Build system: NYXCFLAGS rule in kernel/makefile, hello_nyx.elf linked with crt0+nyxrt, embedded in initramfs
  • Version bump: v5.7.25v5.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 comments
  • b390f5f — Website & README: Nyx C badge, v5.8.0 timeline update
  • 42e6e63 — v5.8.0: Nyx C language runtime - first .nyx program on NyxOS
  • 7e853bc — Nyx C runtime + first hello_nyx.elf on NyxOS

NyxOS v5.7.0 — Per-fd offsets / streaming file I/O

Choose a tag to compare

@kazah-png kazah-png released this 03 Jul 03:19

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

Choose a tag to compare

@kazah-png kazah-png released this 02 Jul 12:19

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

Choose a tag to compare

@kazah-png kazah-png released this 30 Jun 09:06

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

Choose a tag to compare

@kazah-png kazah-png released this 29 Jun 01:24

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

Choose a tag to compare

@kazah-png kazah-png released this 27 Jun 01:38

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

Choose a tag to compare

@kazah-png kazah-png released this 25 Jun 23:08

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)