CHANGELOG 0.1.1.md — Notepad

Added

  • SVFS2 as the new version of /disk's persistent filesystem, with a primary/secondary superblock, a fixed metadata journal, a block bitmap, an inode bitmap and an inode table with extents.
  • A new sync syscall and a userland sync command to force an explicit checkpoint of the persistent state.
  • Minimal networking over rtl8139 + QEMU user-net, with ARP, IPv4, ICMP echo request/reply, basic IPv4 UDP sockets and a minimal TCP client.
  • An extended public ABI for devices and ioctl, with the /dev/fb0, /dev/input0, /dev/net0 and /dev/pcspk nodes.
  • An initial fullscreen GUI with gfx_* primitives, the internal gfxdemo demo and the external sdk/gfxhello example.
  • Minimal sound over the PC speaker with a beep command.
  • The first large external port in sdk/doomgeneric, used as a practical milestone for external graphical apps over the system's ABI.
  • An initial POSIX/libc layer for SDK v1 with public standard headers: unistd.h, fcntl.h, stdio.h, stdlib.h, string.h, dirent.h, sys/stat.h, sys/socket.h, netinet/in.h, arpa/inet.h, time.h and friends.
  • A new subsystems/posix/sdk/v1/runtime/posix.c runtime for external apps, with basic stdio, DIR*, a simple arena-style heap, conversions, string helpers, time and client sockets.
  • New syscalls/base ABI for getpid, stat, fstat, chdir and getcwd.
  • An external smoke test sdk/posixsmoke, compiled only against standard headers.
  • A keytest utility to inspect keyboard events over /dev/input0 in fullscreen and validate key down/up, keycode and ascii.
  • FB_IOC_PRESENT_REGION as an extension of the graphics ABI to present only a region of the framebuffer from userland.

Changed

  • The VFS layer now centralizes path normalization and raised the internal path capacity to 256 bytes, so process, cwd and filesystem operations share a single canonical resolution.
  • The host tooling over build/disk.img (build.ps1, tools/build-user.ps1 and tools/UserAppCommon.ps1) stopped writing SVFS1 and moved to creating and installing directly onto SVFS2 images.
  • /disk's persistent paths stopped depending on path names as their on-disk identity and moved to being mounted from stable inodes cached in kernel memory.
  • The kernel now resolves relative paths against a per-process cwd, so open, exec, spawn and filesystem operations share the current directory.
  • The PS/2 keyboard stack was hardened with a more robust controller init, decoding decoupled from TTY/UI, and better support for AltGr, locks and special keys.
  • sdk/doomgeneric stopped depending on its private set of standard headers and moved to consuming the SDK's public layer, reducing savanxp_compat.c to port-specific glue.
  • The shared runtime's gfx_* primitives were optimized to work with contiguous spans/rectangles and reduce the per-frame drawing cost.
  • gfxdemo, sdk/gfxhello and keytest stopped refreshing the whole screen on every iteration and now use dirty regions or on-demand redraws to improve fluidity in fullscreen.
  • sdk/doomgeneric's backend replaced per-pixel division-based scaling with cached row expansion, lowering the per-frame CPU cost during fullscreen rendering.
  • The main documentation and the SDK reference were updated to reflect the available POSIX/libc surface and its practical limits.

Known limits

  • The recent validation of the jump to SVFS2 covers a full build and host-side verification of the build-user flow, but does not yet include reboot/replay smoke tests inside QEMU.
  • If journal or base metadata recovery fails at mount time, the volume goes offline; there is no read-only degraded mode yet.
  • free() does not recycle memory yet; the userland allocator is still arena/bump style.
  • DIR->d_type is filled in by a best-effort stat() in userland.
  • setsockopt/getsockopt cover only basic client flags and timeouts.
  • Depending on the host and QEMU's keyboard capture, PrintScreen may not reach the guest as a dedicated key and may require Alt+PrintScreen for manual testing.
  • The recent validation of v0.1.1 is host-side; the new POSIX smoke has not been run inside QEMU in this batch.
Version 0.1.12026-03-100 changes