SchOS/docs/plan
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Nexoniarz dee3affa3b Boot manager: Niveus window, keys and wells, Instrument Sans, pointer, other systems, working power entries
The F8 menu is redrawn in the Niveus language: a window with three lights,
bevelled keys with a lit edge, wells for panels, anti-aliased corners and a
soft shadow, set in Instrument Sans rasterised into include/gfx/nvfont.h
(tools/python/mknvfont.py, make nvfont). Scale doubles on screens 1400 px tall
or more. Lists taller than the screen scroll.

The keyboard still drives everything, and a mouse, touchpad or tablet does
too: both UEFI pointer protocols are polled, hover moves the highlight, a
click activates. The cursor stays hidden until the pointer has really done
something, since the firmware installs a pointer protocol with or without a
mouse. The 'keep this resolution?' countdown is one ten-second budget however
many times the pointer moves.

Loaders found at well-known paths on any volume (Windows, Ubuntu, Debian,
Fedora, Arch, openSUSE, systemd-boot, rEFInd, other BOOTX64.EFI) are listed
and chain-loaded with LoadImage/StartImage. 'Reboot to firmware' used to halt;
it now sets OsIndications and restarts, and Restart and Shut Down call
ResetSystem.

Checked under QEMU+OVMF: menu, resolution list (incl. 2560x1600 at double
scale), system information, shut down, firmware setup, chain-loading a copy of
the loader from a second disk, and a full boot of the ISO to the login prompt.
Pointer hover and click were checked only with synthetic events: in this setup
a USB mouse or tablet delivered no event to the loader (one USB I/O handle
appeared but no pointer protocol came from it), and why was not established.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EVRhxi9zpdW2uDUN4FVcao
2026-10-26 15:31:39 +01:00
..
1.0.md eudev starts at boot; Xorg finds its input devices through it 2026-10-26 11:44:21 +01:00
finch.md docs: README, plan, guides and the site describe what is built now 2026-10-26 08:08:05 +01:00
gpu.md docs: README, plan, guides and the site describe what is built now 2026-10-26 08:08:05 +01:00
README.md Schcom is gone; the desktop path is Xorg now, Wayland groundwork next 2026-10-26 09:35:54 +01:00
roadmap.md Boot manager: Niveus window, keys and wells, Instrument Sans, pointer, other systems, working power entries 2026-10-26 15:31:39 +01:00
schapi.md Schcom is gone; the desktop path is Xorg now, Wayland groundwork next 2026-10-26 09:35:54 +01:00

What happens next

Everything in this directory is unbuilt. When a piece of it is finished it leaves — deleted from here, rewritten as a description in ../architecture/. See the rule.

Read 1.0.md first.

It draws the finish line, says where the system stands against it, and holds the register of unfinished work — the one place anything half-built is listed. No new capability starts until that register is empty, and a row leaves it only by being finished or by being deleted from the tree.


What is here

1.0.md The finish line. What 1.0 is, the acceptance test and where each clause stands, the register, and everything explicitly deferred.
roadmap.md Everything else that is scoped and agreed: storage and the installer, graphics, networking, the hardware that makes a laptop a laptop, SchFS beyond SchOS, the kernel's own gaps.
gpu.md Linux's own amdgpu through LDLS, and the /dev/dri a process has to serve. Measured, with the work it needs written down.
finch.md Later. The author's own LLVM language for SchOS's applications and tools in place of C. The language is finished and self-hosting in its own repository; the plan here is a target, bindings generated from include/uapi/, and the compiler in the image.
schapi.md The long-term API layering and the compatibility promise. Direction agreed, nothing built.

What used to be here, and is built

Plans leave this directory when they are done. These did, and what replaced them is the description:

Was Now
Descriptor passing, shared memory, sockets in the filesystem, dynamic linking, the event descriptors (foundations.md) kernel.md, networking.md, syscalls.md
init.md init.md
hybrid.md — drivers in processes, /dev/pci, a modeset API, the panic path, why USB stays devices.md
ldls.md — Linux drivers in a process ldls.md
debugger.md debugging.md
alpine.md — an apk-managed root packages.md
xorg.md — the desktop desktop.md
The interactive crash screen (roadmap.md §4) GMMOS, in graphics.md

And one that was decided against: wayland.md. Wayland needs DRM/KMS, libinput, udev and libseat, and DRM/KMS alone is a kernel graphics subsystem. The desktop is X. The reasoning moved to desktop.md. SchWM, SchDE and the compositor Schcom are gone from the tree: SchOS uses other people's window manager and desktop — Window Maker now; XLibre, Xorg or a Wayland compositor later — and puts its work into what they need underneath (udev, DRM).


The order

Set by 1.0.md, which is the authority. 1.0 is reached (a live system; persistence is not part of it). What is left before anything new starts:

  1. Empty the register: decide the unused in-kernel LDLS window (delete it, or use it), and build socket activation or remove the key.
  2. The owner's list (roadmap.md): the Wayland groundwork (udev first, §5), making LDLS good enough that the GPU driver can run (gpu.md), a boot manager worth looking at (§5b), then the installer, then Finch inside SchOS (finch.md).

What this plan does not address

Stated here so it is not mistaken for covered:

  • No IOMMU, so a driver in a process is isolated against its own bugs and not against a hostile driver.
  • No page cache, so a general writable MAP_SHARED of a file is refused; memfd is the narrow answer.
  • No installer, so nothing a live system writes survives a reboot — by decision, for 1.0.