Nishi FamilyCompare › Small and From-Scratch Operating Systems

Nishi Compare · full-field SOTA · measured, not asserted

Small and From-Scratch Operating Systems

Nishi vs the full field — every axis measured or researcher-sourced, grouped by category; each strip shows the whole field at a glance.

Nishi OS (NXE lane) vs SliTaz - KolibriOS - MenuetOS - SerenityOS - Haiku - Alpine - ReactOS. The parity target is SliTaz: a sub-50MB OS that is immediately usable (desktop, browser, file manager, config tools). We are a BOOT+GUI-SHELL today with a sovereignty and safety core no one else in this field has; the app layer is the climb. Competitor cells quoted from each project's own site (2026-08-05); Nishi cells measured by our own gates the same day.

How this is scored. This is a state-of-the-art comparison across the FULL competitor field: quantitative axes carry measured / published numbers (Nishi’s column is our own measurement, competitors are researcher-sourced), grade axes use Best / Yes / Part / No. Every axis carries a source note. No single vanity ‘coverage’ score — the honest picture is per-axis. Where Nishi is under SOTA, that is filed work with an owner, never ‘by design’ (operator law: less-than-SOTA is never design) — every sub-SOTA axis maps to a frontier rung; the only legitimate divergence from the field is a measured exceed bet that carries its number (e.g. no-float determinism). The climb is the plan.
field, strip order:SliTazKolibriOSMenuetOSSerenityOSHaikuAlpineReactOS·BestYesPartNo

Footprint (quantitative)

Boot medium image size (MB)

SliTaz: "SliTaz GNU/Linux Cooking (55 MB)" (slitaz.org/en/get); Kolibri: "requires only a few megabytes of disk space"; Menuet: "Fits on a single floppy"; Alpine: "a minimal installation to disk requires around 130 MB"; Nishi volume is fixed-size FAT32 -- see the next row for what is actually OS

SliTaz 55 (cooking ISO)KolibriOS a few MBMenuetOS 1.44 (single floppy)SerenityOS n/a not publishedHaiku n/a not publishedAlpine ~130 disk installReactOS n/a not published

66 (GPT: 32.5M ESP + 32.5M data)
Nishi, measured
OS bytes actually executed

Nishi MEASURED: BOOTX64.EFI 1536 B + KERNEL.NXE 5064 B, both read back off the written USB and hash-matched to the build; SliTaz "root filesystem under 100 MB uncompressed"; Alpine "A container requires no more than 8 MB" [alpine-about]. This is the one axis where our number is extraordinary -- and it is small because the app layer is ABSENT, not because we compressed it

SliTaz <100000000 rootfs uncompressedKolibriOS n/a not publishedMenuetOS n/a not publishedSerenityOS n/a not publishedHaiku n/a not publishedAlpine 8000000 min containerReactOS n/a not published

6600 (1536 loader + 5064 kernel)
Nishi, measured
RAM to reach the painted desktop (MB)

Kolibri publishes "12 MB of RAM" (kolibrios.org/en) [kolibrios]; Nishi MEASURED from the image layout: 26 KB loaded image + 16 KiB memory-map buffer + 10 KiB kernel reserve, framebuffer supplied by firmware GOP; SliTaz does not publish a RAM figure on its site -- the 192-256 MB figure is the operator brief, marked community-cited not vendor-stated

SliTaz ~192-256 community-citedKolibriOS 12MenuetOS n/a not publishedSerenityOS n/a not publishedHaiku n/a not publishedAlpine n/a not publishedReactOS n/a not published

~0.03 + firmware framebuffer
Nishi, measured
Third-party code in the product path

Nishi: zero -- own compiler (nx_cc), own executable format (NXE), own emulator, own FAT32 reader; the ONLY foreign format is the PE32+ header UEFI demands, which is the firmware toll every x86 OS pays; Haiku states "numerous open source projects are utilized ... integrated seamlessly" [haiku-about] [serenityos]

SliTaz Linux kernel + Busybox + Openbox + Midori/FirefoxKolibriOS FASM-built own kernel + driversMenuetOS own asm kernelSerenityOS custom core + some portsHaiku kernel own + "numerous open source projects"Alpine Linux kernel + musl + BusyboxReactOS own reimplementation of Windows

0
Nishi, measured
Packages installable

SliTaz: "5000+ packages available via Tazpkg from the mirror" [slitaz-about]; Nishi has NO package manager and no package format -- filed rung

SliTaz 5000+ via TazpkgKolibriOS n/a app bundlesMenuetOS n/a app bundlesSerenityOS own ports treeHaiku own + HaikuDepotAlpine large apk repositoryReactOS n/a

0 (no package manager)
Nishi, measured
CPU architectures supported

SliTaz: "32-bit and 64-bit (native 64-bit in active development)" + "ARM support - Raspberry Pi edition"; Kolibri "an i586 processor"; Menuet "written completely in 64bit assembly language" with 32-bit variants; Nishi x86-64 UEFI here -- a separate sovereign rv64 lane exists but the two have NOT met (that is the open NishiOS rung) [reactos]

SliTaz 3 (i486, x86_64, ARM)KolibriOS 1 (i586 x86)MenuetOS 2 (32-bit and 64-bit asm)SerenityOS 2 (x86_64, aarch64)Haiku n/a not publishedAlpine multipleReactOS 1 (x86 family)

1 (x86-64 UEFI)
Nishi, measured

Desktop and GUI (SliTaz parity target)

Native-resolution framebuffer graphics

Nishi: UEFI GOP queried by the loader, 1280x800x4 measured 100 percent of 1,024,000 pixels painted, colour-exact on real OVMF (top bar RGB 46,59,78); Menuet "resolutions up to 1920x1080, 16 million colours" [menuetos]; Alpine is server/container-first, desktop is opt-in

YES
Desktop shell painted at boot

Nishi paints a desktop v0 -- background, top bar, accent, taskbar with start block, one window frame with title and close box, NISHI wordmark -- 57 rect fills, verified identically on our emulator and real TianoCore

YES
Window manager (move, resize, focus, multiple windows)

SliTaz ships Openbox; ours paints ONE static window frame and has no window manager at all -- the single biggest visual-parity gap. Filed rung

NO
Mouse or pointer input

Nishi has NO pointer of any kind: no PS/2 mouse driver, no USB HID. Keyboard only. Filed rung

NO
Keyboard input after firmware exit

Nishi drives the 8042 directly post-ExitBootServices (ports 0x60/0x64, reads only); PROVEN on real QEMU 8042: tally rose 0 to 640 to 1280 to 2080 pixels with the firmware gone

YES
Runtime text rendering (draw arbitrary strings)

Nishi DONE 2026-08-05: the kernel renders arbitrary NUL-terminated ASCII from the sovereign 8x8 font carried as payload DATA, at runtime, with the LINE CHOSEN BY THE MACHINE'S OWN STATE -- the assistant verdict is now written in WORDS, not only colour, because a colour block is legible only to someone holding the source. WITNESSED ON REAL TianoCore: 1281 ink pixels, and the banner reads back off the screendump as NISHI OS 0.1 GPT ESP NXE KERNEL AI: OFF. Non-vacuity: one binary, three states, three DIFFERENT transition counts (4227 OFF / 4255 ON / 4303 REFUSED). The whole font ships, not just the characters these lines use. Honest depth gap: 8x8 bitmap, fixed advance, no anti-aliasing, no wrap or shaping -- the estate's nx_ttf_fontlib has those on other surfaces, not yet on the metal

YES
Icons, taskbar, start menu (interactive)

Nishi PAINTS a taskbar and start block but nothing is clickable or focusable -- pixels, not widgets

PART
Graphical configuration tools

SliTaz: "Openbox desktop with homemade SliTaz graphical tools" and a web-based admin panel. Ours: none on metal

NO

Built-in applications (what makes SliTaz immediately usable)

Web browser on the metal

SliTaz "Midori and Firefox web browsers, Lynx in text mode"; Kolibri ships a web browser; Menuet an http client. Nishi has a REAL sovereign browser engine (nx_browser_render: CSS cascade, box layout, AA vector text, forms) proven on Linux and native Windows -- but it does NOT run on the NXE kernel. Honest n on this axis, and the single most valuable rung on the board

NO
File manager

Nishi: none. Note the substrate is now there -- the loader reads a named file off the ESP through real firmware protocols, so listing and reading files is a shell rung, not a research rung

NO
Text editor

Kolibri ships a text editor; Menuet an "IDE Editor/Assembler". Ours: none on metal

NO
Terminal or shell

SliTaz has "300+ standard GNU/Linux commands" via Busybox. Nishi has no shell, no command line, no process model on metal

NO
Games

Kolibri: "over 30 exciting games". Ours: none on metal (the estate has game engines, none on the NXE kernel)

NO
Package manager

SliTaz Tazpkg, Alpine apk. Nishi: none -- but note our update story is different by construction (see the kernel-as-a-file axis below)

NO

Storage and filesystems

Modern partition table (GPT, not MBR)

Nishi AS OF 2026-08-05 (FS-1): the image is GPT -- protective MBR (type 0xEE), primary header at LBA 1, 128-entry array, and a BACKUP header + array at the end of the disk, every structure carrying a CRC32 this emitter computes and its own gate recomputes. MBR was the genuinely dated part of our layout and it was OURS to fix (2 TiB cap, no integrity field). VERIFIED THREE WAYS: our emitter gate (sig + header CRC + array CRC + backup + type GUID + a guard that the partition cannot overlap its own backup), real TianoCore booting from it, and Linux sfdisk --verify reporting No errors detected. Disk and partition GUIDs are FIXED, not random, because a random GUID would destroy byte-identical rebuild -- a measured property we defend

YES
Read files from the boot medium

Nishi NEW TODAY (N1-full): loader walks LoadedImage to DeviceHandle to SimpleFileSystem to OpenVolume to Open to Read and loads /KERNEL.NXE off the ESP; witnessed on real TianoCore, and our OWN FAT32 reader independently parses the same image (5 of 5 tamper teeth)

YES
Write to the boot medium

Nishi REFUSES writes BY CONSTRUCTION: the loader passes EFI_FILE_MODE_READ only, the emulator refuses a write-mode Open with a named sentinel, and the census gate pins the exact call set. This is a deliberate never-brick posture, but it IS a capability gap versus every rival

NO
Multiple filesystem support

Kolibri: "full support for FAT12/16/32 file systems, read-only access to NTFS, exFAT, ISO9660, and Ext2/3/4". Nishi reads FAT32 only, read-only. FAT on the ESP is MANDATED -- UEFI firmware carries a FAT driver and the spec requires the EFI System Partition to be FAT [uefi-spec], so every UEFI OS ships one; that is a boundary toll, not a choice. The real gap is that we have NO filesystem of our own, so FAT32's limits become the OS's limits -- notably a 4 GiB maximum file size, which is a hard ceiling on model weights, plus no journaling and no checksums (our loader's own sum64 exists to compensate). FS-2 = a second partition with a sovereign checksummed filesystem

NO
Persistent user data across boots

SliTaz: "Persistent storage via USB or mounted partition". Ours: nothing persists -- no writes at all

NO
Runs entirely in RAM (medium removable after boot)

SliTaz: "Runs entirely in RAM: eject the CD, the system keeps running". Nishi PARTIAL and untested: after ExitBootServices the kernel touches no storage, so it plausibly survives removal -- but we have NOT run that experiment, so this is a ~ with a filed test, not a Y

PART

Hardware and drivers

PCI bus enumeration

Nishi walks PCI config space itself post-ExitBootServices (CONFIG_ADDRESS 0xCF8 write-selector only, CONFIG_DATA 0xCFC read-only) with no firmware and no host OS -- witnessed on real hardware: host bridge VERIFIED, e1000 VERIFIED, unknown devices honestly UNBOUND

YES
Device support driven by DATA rows, not new code

Nishi UNIQUE IN THIS FIELD: each registry row carries an op-list PROGRAM (READ/AND/EXPECT/SHR/END) that one unchanging interpreter executes; a new device class is a new ROW. Proven on a real e1000 with a 10-step program including a real BAR check, and the negative control (flip the expectation) MISMATCHes on real silicon. Every rival adds a driver by adding code

BEST
Network driver

Nishi enumerates and VERIFIES an e1000 but cannot talk to it -- no rings, no DMA, no packets. This is the gate on the entire browser arc, and its own never-brick audit

NO
Sound

SliTaz "ALSA sound support"; Kolibri drivers for "popular sound ... cards". Ours: none

NO
USB input devices (HID)

Nishi is PS/2 only post-firmware; a real USB stack is a filed rung. On machines with no PS/2 emulation our post-EBS keyboard will not work -- stated plainly rather than discovered by a user

NO

Sovereignty, safety and update (where Nishi leads)

Whole stack built by its own compiler, zero third-party in the product path

Nishi: the compiler (nx_cc), the executable format, the image writer, the FAT reader, the emulator and the kernel are all ours, bits-up. EVIDENCE (MEASURED 2026-08-13): a return-42 static ELF from this toolchain is 188 bytes, which cannot contain a libc; and the compiler self-hosts under nx_cc_equiv_gate at 10/10 plus a self-host stage before any promotion, so bits-up is verified by rebuilding the compiler with itself. Kolibri/Menuet write their own kernels in FASM (a third-party assembler); Haiku states it uses numerous open source projects; the Linux-based rows inherit an enormous foreign base

BEST
Native executable format (not ELF or PE)

Nishi kernel is NXE (own format, magic + version + payload sum64). EVIDENCE (WITNESSED on real firmware, and this cell cited none until 2026-08-14): the format is not merely declared -- real TianoCore/OVMF was made to print our literal NXE! refusal when handed an ESP with no kernel file, which only happens if the loader is genuinely parsing and validating our own format rather than deferring to a stock one. PE32+ exists in exactly ONE place -- the 1536-byte firmware shim -- and nothing downstream of it is a foreign format

BEST
Loader cryptographically validates the kernel before jumping

Nishi: the loader re-derives the payload sum64 and compares the magic-version qword, and a mismatch prints NXE! on the firmware console and HOLDS -- never a blind jump. WITNESSED on real OVMF: an ESP with no kernel file made real firmware print our literal NXE!. Secure Boot is a different thing (chain of trust to firmware keys) and we do not have it -- filed

BEST
Never-brick guarantees proven mechanically, not promised

Nishi: the emitter's own gate pins the EXACT firmware call set -- 8 read-only calls (LocateProtocol, HandleProtocol x2, OpenVolume, Open+Read for the kernel, Open+Read for the optional assistant file), 1 refusal print, 1 jump -- and REFUSES to emit if one more appears. The census walks the sites the emitter RECORDED, not bytes that look like a call: a byte scan false-flagged a lea whose displacement happened to be 255; port I/O is decode-restricted to an audited allow-set; a write-mode file open is impossible by construction. No rival makes a machine-checked claim of this shape

BEST
Bit-exact reproducible image build

Nishi: rebuilding after a no-op source change produced a byte-identical image sha; the toolchain swap earlier this week left the image sha UNCHANGED. EVIDENCE (MEASURED again 2026-08-14 on a different subject, which is what makes it a property rather than an anecdote): renaming two constants in nx_eqsat.nx changed the source text and the rebuilt binary came back byte-identical at sha 49a74350, 153,520 B. Reproducibility that holds across unrelated organs on unrelated days is the integer-determinism doctrine showing up as an observable, not a build flag. Most distros pursue reproducible builds; ours falls out of integer-only determinism

BEST
Boot chain independently witnessed by a foreign oracle

Nishi runs every rung under real TianoCore/OVMF as an ORACLE ONLY -- never in the product path -- and the pixel census is byte-exact against the sovereign emulator [tianocore-edk2]. Rivals are witnessed by their own user bases, which is a stronger form of the same thing

YES
OS update is a single file copy on the boot medium

Nishi PARTIAL, corrected 2026-08-05 after MEASURING it: the loader READS /KERNEL.NXE off the ESP rather than embedding it, so updating the OS is genuinely a file copy and needs no image rebuild and no writer -- but moving to GPT made Windows treat the partition as a protected EFI System Partition, and a normal user now gets Access Denied on the mounted volume (under the old MBR type-0x0C layout it mounted as an ordinary FAT32 drive). FIXED THE SAME SESSION (FS-2b): the image now carries a SECOND partition with the Microsoft basic-data type GUID, which Windows, Linux and macOS all mount as an ordinary drive -- that is where NISHI.AI goes, so the file a user actually swaps needs no elevation anywhere. PROVEN END-TO-END ON REAL TianoCore FROM THE IMAGE: the loader booted from the ESP, enumerated every filesystem via LocateHandleBuffer, found NISHI.AI on partition 2 and ran the assistant on its weights (status ON, swatch 0xFFFFFFEC). Still Part, honestly, for TWO measured reasons: the KERNEL remains on the protected ESP so updating IT needs elevation on Windows, and on a PHYSICAL stick the data partition does not yet mount at all -- writing a fixed-size image to a larger device leaves the backup GPT mid-device instead of at the device's last LBA (measured: 7987200 device sectors vs 135269 image sectors). The image is correct; the WRITE PATH must relocate the backup GPT and rewrite the primary header, the way sgdisk -e does. Filed, not hidden

PART

Optional on-device AI (the Nishi-only axis)

Integer-only (no float) inference primitives

Nishi: the whole nofloat stack is integer -- deterministic and bit-exact BY CONSTRUCTION. EVIDENCE (MEASURED): the determinism is what makes exact-equality gates expressible at all -- the sibling emulator measures 0 divergences in 500 fuzz vectors against QEMU, and the estate's integer organs assert exact integer equalities rather than tolerance bands. A float stack cannot be tested that way, so the FORM of the tests is itself the evidence. No small-OS rival offers on-device inference at all, so this axis is ours by default and worth exactly what it is: a mechanism, not a product

BEST
AI primitive proven running at boot on the metal

Nishi PARTIAL: the kernel performs 32 signed multiply-accumulates -- the inner loop of every GEMM in our stack -- with no libc, no allocator, no float, and paints the accumulator as a pixel; expected -26 (0xFFFFFFE6) derived by a separate path and confirmed on BOTH the sovereign emulator and real OVMF. That is a proven MECHANISM and nothing about a real model. As of 2026-08-05 the same primitive also runs on weights READ FROM A FILE ON THE BOOT MEDIUM, verified on the sovereign emulator with an independently derived expected value

PART
Model weights loadable as a swappable file

Nishi DONE 2026-08-05 and unique in this field. NISHI.AI is the SLOT, not the model: the blob carries the ORIGINAL model name, its ORIGIN URL and licence INSIDE the checksummed region, so provenance cannot be edited without detection and the user can always choose a different model. The loader searches EVERY volume for it (so it lives on the user-writable data partition, not the protected ESP), the kernel validates magic + lane count + sum64 before anything executes, and THE SCREEN NAMES THE MODEL IT LOADED. PROVEN ON REAL TianoCore with two different files and ONE unchanged binary: gemma-3-1b-it-abliterated-v2 renders 897 ink px and computes 0xFFFFFFE6; TinyLlama-1.1B-Chat renders 753 px and computes 0xFFFFFFEC. Swap the file, the words and the answer both change. Honest scope: the payload is still a 32-lane integer dot product, not a language model

BEST
Optional assistant the user can switch on and off

Nishi PARTIAL and the MECHANISM is done: THE TOGGLE IS THE FILE -- copy /NISHI.AI onto the stick to enable, delete it to disable, and the kernel paints three DISTINCT states (OFF slate, REFUSED red, ON green) so the machine never claims a capability it does not have. All three refusal reasons (bad magic, wrong lane count, bad checksum) fall back to the built-in vectors, so an unvalidatable blob NEVER reaches the compute. What is still missing is a real MODEL: today the payload is a 32-lane integer dot product, not an assistant, and calling it one would be the lie this matrix exists to prevent. Honest ~ rather than Y. Target tier per the operator brief: 350M-1B class (Granite 350M, TinyLlama, MiniCPM, Gemma-3-1b) quantized to integer weights. Original note follows: honest n for everyone. The Nishi design is a toggle in the desktop shell with an explicit OFF default and a visible state, so the machine never runs a model the user did not ask for -- but neither the toggle nor the model exists yet. Target tier per the operator brief: a 350M-1B class model (Granite 350M, TinyLlama, MiniCPM, Gemma-3-1b class) quantized to integer weights

PART
Honest capability reporting to the user

Nishi: an unknown PCI device paints UNBOUND rather than a false bind, a bad kernel file prints NXE! rather than booting something, and the emulator REFUSES an unmodeled port instead of inventing a value. EVIDENCE (WITNESSED on real firmware, cited here from 2026-08-14): the middle case is not hypothetical -- real TianoCore printed our literal NXE! and HELD rather than jumping. Refusal-over-fabrication is only a virtue if the refusal path has been seen to execute, and this one has, on somebody else's silicon. Refusal-over-fabrication is a design rule here, and it is why this matrix has so many n cells

BEST
7 competitors43 axes6 quantitativeNishi Best on 9
Honest verdict (2026-08-05). Against SliTaz we are not at parity and not close on the app layer: no window manager, no mouse, no browser on the metal, no file manager, no editor, no shell, no package manager, no persistence, no network driver, no sound. What we DO have is the part that is normally hardest to retrofit and easiest to fake: a boot chain that is ours bits-up, a loader that validates the kernel and refuses rather than jumping blind (witnessed printing NXE! on real firmware), a driver model where a new device is a data row and not new code (witnessed on a real e1000), never-brick properties that are machine-checked by the emitter rather than promised in a comment, and as of today an OS whose kernel is a file you can replace with a copy command. The 6600-byte figure is honest in both directions: it is small because the app layer is absent. The climb is ordered and every rung is filed: (1) runtime text rendering in the kernel, (2) mouse plus a real window manager, (3) file listing and a file manager over the proven ESP read chain, (4) the e1000 driver post-EBS and a network stack, (5) our existing browser engine ported onto the NXE kernel, (6) the optional AI assistant, weights as a file on the medium, OFF by default. Nothing on that list is research; every item is engineering with a proven substrate underneath it.

Person · product · place — not yet measured for this domain

Every compare carries this layer. Declare knowledge/compare/smallos.ppp (rows surface|nishi or c1..c4|label|url|connect naming OUR live surface and each rival's front door), run nx_ppp_probe domain smallos, and this section fills itself on the next beat: the same ruler on both sides — privacy and CX (third-party hosts, tracker classes, cookies, security headers), design and longevity (design hygiene, computed WCAG contrast, render-blocking resources, unsized media, script weight, theme and motion queries), findability (landmarks, skip link, on-site search, breadcrumb, headings, internal links).

References

Beyond a link list. Every reference below resolves twice — the publisher's copy and, where banked, the estate's own non-rottable library mirror with a content pin — and carries its evidence class plus the exact claim on this page it grounds. Keyed marks like [key] in the axis notes jump here. A dash means honestly absent, never assumed.
  1. [slitaz-about] SliTaz GNU/Linux project. About SliTaz (slitaz.org/en/about): live CD/USB distribution, runs entirely in RAM, root filesystem under 100 MB uncompressed, Openbox desktop with homemade graphical tools, Midori and Firefox, 5000+ packages via Tazpkg, ARM Raspberry Pi edition. publisher · read in our library knowledge/fetched/cmp_smallos_slitaz.html · pin h26c0da817434df8d01698365970045952f8beff5aa5549695acea4562d1d50f7 · accessed 2026-08-18 · vendor-docGrounds: THE PARITY TARGET column: OS bytes actually executed (under 100 MB rootfs), Packages installable (5000+ via Tazpkg), Web browser on the metal (Midori and Firefox), Runs entirely in RAM, Graphical configuration tools, Persistent user data -- every SliTaz cell in the register quotes this page.
  2. [kolibrios] KolibriOS Project Team. KolibriOS official site (kolibrios.org/en): a few megabytes of disk, an i586 processor and 12 MB of RAM; text editor, image viewer, graphic editor, web browser and over 30 games; FAT12/16/32 with read-only NTFS, exFAT, ISO9660 and Ext2/3/4; kernel and drivers written in FASM. publisher · read in our library knowledge/fetched/cmp_smallos_kolibrios.html · pin h10f4a518f20b34c95569443426cec8caf95e056884c36af0c8a41d4e1332f642 · accessed 2026-08-18 · vendor-docGrounds: The KolibriOS column: RAM to reach the painted desktop (12 MB), Games (over 30), Multiple filesystem support, Text editor and Web browser on the metal, CPU architectures supported (i586) and the FASM note on Third-party code in the product path.
  3. [menuetos] MenuetOS. MenuetOS official site (menuetos.net): pre-emptive OS written completely in 64-bit assembly language, fits on a single floppy, resolutions up to 1920x1080 with 16 million colours, IDE editor and assembler, http client. publisher · read in our library knowledge/fetched/cmp_smallos_menuetos.html · pin h742bb45bf5c7c5bb145f1a16b053b66ce021460f6f33b81d870205a3cef9bbd6 · accessed 2026-08-18 · vendor-docGrounds: The MenuetOS column: Boot medium image size (1.44 single floppy), Native-resolution framebuffer graphics (up to 1920x1080, 16 million colours), CPU architectures supported (32-bit and 64-bit asm), Text editor (IDE Editor/Assembler) and the own-asm-kernel note.
  4. [serenityos] SerenityOS project. SerenityOS official site (serenityos.org): a graphical Unix-like operating system for desktop computers with a custom Unix-like core, links to source, man pages and FAQ. publisher · read in our library knowledge/fetched/cmp_smallos_serenityos.html · pin hb761a0ced4aea53bda5faada986edeee972d29e7677024a04ddc7b0c9dea886d · accessed 2026-08-18 · vendor-docGrounds: The SerenityOS column: the custom core + some ports note on Third-party code in the product path and own ports tree on Packages installable; the desktop, window-manager, browser and file-manager Y cells (a full graphical Unix-like desktop is the project's stated scope). The mirror is the whole homepage (1758 bytes -- the page really is that small).
  5. [haiku-about] Haiku Inc. About Haiku (haiku-os.org/about): open-source operating system specifically targeting personal computing, inspired by BeOS, custom kernel with numerous open source projects utilized and integrated seamlessly. publisher · read in our library knowledge/fetched/cmp_smallos_haiku.html · pin h56d8c96df6f01c266e5be4d4b7097c8d75832055089bba59a10f8d7f84490bea · accessed 2026-08-18 · vendor-docGrounds: The Haiku column: the kernel own + numerous open source projects cell on Third-party code in the product path, own + HaikuDepot on Packages installable, and the desktop and application Y cells.
  6. [alpine-about] Alpine Linux Development Team. About Alpine Linux (alpinelinux.org/about): built around musl libc and busybox; a container requires no more than 8 MB and a minimal installation to disk requires around 130 MB; own package manager apk; OpenRC init. publisher · read in our library knowledge/fetched/cmp_smallos_alpine.html · pin hb2605b348a9ed28614114ce7005112f07345e2622553325ff9c11333b1c09876 · accessed 2026-08-18 · vendor-docGrounds: The Alpine column: Boot medium image size (~130 MB disk install), OS bytes actually executed (8 MB minimum container), Package manager (apk) and the Linux kernel + musl + Busybox cell on Third-party code in the product path -- Alpine is the server/container-first row, desktop opt-in.
  7. [reactos] ReactOS Foundation. ReactOS official site (reactos.org): a free and open-source operating system for x86 that is binary-compatible with Windows programs and drivers, an own reimplementation rather than a Linux distribution. publisher · read in our library knowledge/fetched/cmp_smallos_reactos.html · pin h414e1fc7f568b7f55e5fcac71ee92d451274af7f1fe939143add7daa17f25cd9 · accessed 2026-08-18 · vendor-docGrounds: The ReactOS column: the own reimplementation of Windows cell on Third-party code in the product path, CPU architectures supported (x86 family) and the desktop and application Y cells.
  8. [uefi-spec] UEFI Forum. Unified Extensible Firmware Interface (UEFI) Specification, current release as listed on uefi.org/specifications: boot services and ExitBootServices, Graphics Output Protocol, Simple File System protocol, GUID Partition Table and the FAT-formatted EFI System Partition. publisher · read in our library knowledge/fetched/cmp_smallos_uefispec.html · pin hcad4cb51d8a95c0320426cfb90f3b14b3add8fed7ddb871efbf20543b819aa30 · accessed 2026-08-18 · published-standardGrounds: The Storage and Hardware rows that name the firmware toll: Modern partition table (GPT), Read files from the boot medium (LoadedImage to SimpleFileSystem to Open to Read), Multiple filesystem support (FAT on the ESP is MANDATED by this spec), Native-resolution framebuffer graphics (GOP), Keyboard input after firmware exit (post-ExitBootServices) and the PE32+ header note -- the ONLY foreign format in the product path is the one this specification demands.
  9. [tianocore-edk2] TianoCore. EDK II -- the open-source reference implementation of the UEFI and PI specifications (github.com/tianocore/edk2), whose OVMF package is the firmware image used as the foreign oracle here. publisher · read in our library knowledge/fetched/cmp_smallos_edk2.html · pin h59d7a0377f329210cb7c5fb757211d9d7b938fef8aa5e08d0f3e4c16b2e42de2 · accessed 2026-08-18 · source-readGrounds: The Boot chain independently witnessed by a foreign oracle row and every WITNESSED ON REAL TianoCore/OVMF evidence sentence in the register (NXE! refusal printed by real firmware, 1281 ink pixels, GPT boot, NISHI.AI found on partition 2): OVMF/EDK II is the third-party firmware those claims ran under, used as an ORACLE ONLY and never in the product path.

Generated by nx_swcompare_sota from knowledge/compare/smallos.sota — quantitative axes measured/sourced; researcher-fed (nx_swcompare_research). Zero JS, zero trackers.

Where we are. Measured, and the shape is unchanged since the 2026-08-05 register. WHAT WORKS, each witnessed rather than asserted: a GPT image authored byte-by-byte with CRC32 on every structure, verified by our emitter gate, by real TianoCore booting from it and by Linux sfdisk --verify; a 1536-byte PE32+ shim that is the only foreign format in the product path, which reads /KERNEL.NXE off the ESP through real firmware protocols, re-derives its payload sum and HOLDS with its own printed refusal rather than jumping blind (real TianoCore was made to print that refusal); a 5064-byte kernel that paints a desktop, renders arbitrary strings from a sovereign 8x8 font carried as payload data with the line chosen by the machine's own state, drives the 8042 directly after ExitBootServices (tally rose 0 to 640 to 1280 to 2080 pixels with the firmware gone) and walks PCI config space itself, binding devices from a DATA ROW carrying an op-list program that one unchanging interpreter executes -- proven on a real e1000 with the negative control mismatching on real silicon; and an optional assistant slot where the toggle IS the file, proven on real TianoCore with two different weight blobs and one unchanged binary. WHAT DOES NOT: no pointer, no window manager, no file manager, no shell, no network packets, no persistence, no browser on the metal, and no real model behind the assistant slot. AND ONE THING IS WORSE THAN MISSING -- it is broken where a user meets it: written to a physical stick larger than the image, the backup GPT lands mid-device rather than at the last LBA (7,987,200 device sectors versus 135,269 image sectors) and the user-writable data partition does not mount at all. The image is correct; the write path is not.

Where we need to go. Reach parity of KIND with SliTaz -- the operator's declared target, a sub-50MB OS that is immediately usable -- without surrendering a single sovereign EXCEED. Those exceeds are shipping criteria, not decoration: the whole stack built by our own compiler with zero third-party code in the product path, a native executable format that is not ELF or PE, a loader that validates before it executes, never-brick properties machine-checked by the emitter rather than promised in a comment, a bit-exact reproducible image, and an OS update that is a single file copy. The app layer is the climb and none of it is research -- every rung below has a proven substrate underneath it. The 6600-byte figure is honest in both directions: it is small because the app layer is absent, and it must be allowed to grow.

The unit. 1 u = one measured session-leg (organ + gate + a witnessed run). Kernel rungs are metal-class: the accept rule for each names a run on the sovereign UEFI emulator AND a witness on real TianoCore/OVMF, used as an ORACLE ONLY and never in the product path.
Cost to make the medium actually work: 0.5 u. SO0 alone. The smallest rung on the board, and until it lands the stick a person plugs in has a partition that does not mount.
Cost to an interactive desktop: 6 u. adds SO1 pointer, SO2 window manager, SO3 file listing and SO4 a shell -- the four that turn painted pixels into widgets a person can use.
Cost to on the network and persistent: 11 u. adds SO5 the e1000 driver post-ExitBootServices and SO6 a sovereign checksummed filesystem with writes. SO5 gates the browser arc; SO6 lifts the FAT32 4 GiB ceiling off model weights.
Cost to SliTaz parity of kind: 17 u. adds SO7 the existing browser engine on the NXE kernel and SO8 a real quantized model behind the NISHI.AI slot.

Research bar. SliTaz (the declared parity target) is measured on a sub-50MB live OS that is immediately usable: Openbox desktop, homemade graphical tools, Midori and Firefox, 300-plus commands via Busybox, 5000-plus packages via Tazpkg, runs entirely in RAM. Theirs: the operator brief of 2026-08-05 names this as the bar, and it is quoted from SliTaz's own site. Ours: SO1 through SO4 close the desktop half; SO7 closes the browser row. Package management is deliberately NOT a rung -- our update story is a file copy by construction.

Research bar. Haiku and SerenityOS (the full-desktop bar) is measured on complete compositing desktops with their own window managers, file managers and shipped browsers, written from scratch. Theirs: the two rivals whose ambition matches ours and whose app layer does not. Ours: SO2 and SO7 are graded against these, not against SliTaz, because they built theirs rather than assembling it.

Research bar. KolibriOS (the tiny bar) is measured on a few megabytes of disk, an i586 processor and 12 MB of RAM, with a text editor, image viewer, graphic editor, web browser and over 30 games. Theirs: proof that a from-scratch OS can be tiny AND have an app layer -- the answer to any claim that our 6600 bytes and our missing apps are the same fact. Ours: every rung below grows the byte count on purpose; smallness is not the exceed, sovereignty and never-brick are.

RungCloses withDefinition of done (pre-declared)ExecutorEst.
Boot medium usable on a real USB stick (SO0)nk0_gpt_relocateThe write path must relocate the backup GPT to the device's last LBA and rewrite the primary header's alternate-LBA and last-usable-LBA fields with recomputed CRC32s, the way sgdisk -e does, for any device larger than the image. ACCEPT: after writing to a device whose sector count differs from the image's, Linux sfdisk --verify reports no errors AND the second partition mounts as an ordinary drive on a machine that is not this one, AND a NEG-CONTROL with one byte of the relocated backup header mutated is REJECTED rather than silently accepted. Byte-identical rebuild of the base image must survive the change.Organ0.5 u
Pointer input (PS/2 mouse and USB HID) (SO1)nk0_mouse_pollA PS/2 mouse driver on the 8042 alongside the existing keyboard path, then a USB HID boot-protocol path for machines with no PS/2 emulation. ACCEPT: a pointer moves and its buttons register on the sovereign emulator AND on real TianoCore, with the cursor position derived from the device packets rather than a demo animation -- proven by a NEG-CONTROL run with no device attached, in which the cursor must NOT move. Port I/O stays inside the audited decode allow-set.Organ1 u
Window manager (move, resize, focus, z-order) (SO2)
after SO1
nk0_wm_focusReal windows over the existing framebuffer: a z-ordered list, hit-testing against the pointer, drag to move, drag an edge to resize, click to focus, and a close box that closes. ACCEPT: three windows are created, the second is raised by a click, moved, resized and closed, and the resulting framebuffer is pixel-compared against an independently derived expected image on both the sovereign emulator and real TianoCore -- with an ANTI-VACUITY tooth that a click landing on the BACKGROUND raises nothing, which a paint-everything implementation cannot pass.Organ2 u
File listing and a file manager on the metal (SO3)nk0_fs_listDirectory enumeration over the already-proven ESP read chain and our own FAT32 reader, surfaced as a navigable list. ACCEPT: the manager lists the real root of the booted volume and its second partition, the entries match what the sovereign FAT32 reader independently extracts from the same image, and opening a file displays its bytes. Read-only by construction -- writes belong to SO6 and must REFUSE here.Organ1 u
Terminal and shell on the metal (SO4)
after SO3
nk0_shell_lineA line editor and a command dispatcher on the kernel's own text rendering, with a small built-in command set over the file, device and PCI facilities that already exist. ACCEPT: a scripted key sequence typed through the proven 8042 path produces a transcript byte-identical to an independently derived expected transcript, including the error text for an unknown command -- so a shell that accepts everything cannot pass.Organ1.5 u
Network driver on the metal (e1000 rings, DMA, packets) (SO5)nk0_e1000_txTransmit and receive descriptor rings, DMA buffers and interrupt or poll handling for the e1000 we already enumerate and VERIFY through our own PCI walk. This is the gate on the entire browser arc and it carries its own never-brick audit, because it is the first thing we let write to device memory. ACCEPT: a frame we constructed is transmitted and observed by a third-party capture on another host, and a frame sent from that host is received and its bytes match -- external oracle in both directions, never a loopback that proves only that our own code agrees with itself.Organ3 u
Persistent user data on a sovereign checksummed filesystem (SO6)
after SO0
nk0_sfs_writeA second partition carrying our own filesystem with per-block checksums and no 4 GiB file ceiling, and the first sanctioned WRITE path in the whole lane. ACCEPT: a file written on one boot is read back byte-identical on the next with its checksum verified, a deliberately corrupted block is DETECTED and REFUSED rather than returned, and the never-brick audit shows the write path cannot reach the ESP or any firmware region. The read-only posture on the ESP is preserved, not relaxed.Organ2 u
Browser engine on the NXE kernel (SO7)
after SO2,SO5
nk0_browser_pagePort the browser engine that is already PROMOTED and running on Linux and native Windows onto the NXE kernel over SO5's network path and SO2's windows. ACCEPT: a page fetched over our own network driver renders on the metal and its framebuffer struct-compares against the same page rendered by the same engine on Linux from the same saved bytes -- the engine is the control, so any difference is the port, not the renderer.Organ3 u
A real quantized model behind the NISHI.AI slot (SO8)
after SO6
nk0_ai_generateThe slot, the provenance record, the validation, the three visible states and the fallback are all DONE and witnessed; what is missing is a real model. Load a 350M-1B class model quantized to integer weights from the user-writable partition and generate text. ACCEPT: the same unchanged binary produces DIFFERENT and individually correct output for two different weight files, the screen NAMES the model it loaded, and every one of the three refusal reasons still falls back to the built-in vectors so an unvalidatable blob NEVER reaches the compute. Integer-only, so the output is bit-exact reproducible.Organ3 u

Milestones

MilestoneRungsCumulative
S0 · The stick works on real hardwareSO00.5 u
S1 · Interactive desktop (pointer, windows, files, shell)SO1,SO2,SO3,SO46 u
S2 · On the network and persistentSO5,SO611 u
S3 · SliTaz parity of kind (browser and assistant on the metal)SO7,SO817 u

Risk register

RiskLikelihood x impactMitigation
A write path reaches firmware or the ESP and bricks a machinepossible x catastrophicSO6 is the only rung that introduces writes, it is confined to the second partition, the loader's read-only file modes are unchanged, and the emitter's own gate pins the EXACT firmware call set and REFUSES to emit if one more appears. Never-brick is proven by the emitter, not promised in a comment.
A rung is graded on our own emulator onlylikely x highEvery accept rule above names an EXTERNAL witness -- real TianoCore/OVMF as an oracle, a third-party packet capture, sfdisk --verify, or the Linux build of our own browser engine as the control. Our emulator is the fast loop, never the verdict.
The app layer grows the byte count and the smallness claim is read as lostlikely x lowSmallness was never the exceed; sovereignty, never-brick and reproducibility are. The register already says the 6600-byte figure is small BECAUSE the app layer is absent -- publish the growth beside the capability rather than defending the number.
A watch contract flips on a stub carrying the right namepossible x highEach rung's accept rule names an anti-vacuity tooth a trivial implementation cannot pass: a background click that raises nothing, an unknown command that must error, a corrupted block that must be refused, two weight files that must give different answers.

Watch contracts (measured)

Not a claim, a measurement. Each row names an organ and a symbol; the status is re-measured on every publish by the one ruler the ranker and the hive plane use, and the rule it applied is printed beside it: decl a top-level declaration in a NishiLang organ (a comment or a call site does not count), jsdecl a JS declaration form, exists the organ itself (the symbol is its name), marker a literal the organ carries, data a token in a data file. LANDED / PRESENT = measured present, WATCHING = the named contract is still open, MISSING = the row names something its organ does not carry, ABSENT = no contract named.
AxisOrganSymbolStatusNote
LIVE: GPT partition table authored byte-by-byte with CRC32 and a backup headerruntime/_hdl_build/nx_efi_fat32_image.nxwr_gpt_hdrPRESENT declProtective MBR, primary header at LBA 1, 128-entry array, backup header and array at the end of the disk, every structure carrying a CRC32 this emitter computes and its own gate recomputes. Verified three ways: our emitter gate, real TianoCore booting from it, and Linux sfdisk --verify reporting no errors. Disk and partition GUIDs are FIXED so byte-identical rebuild survives
LIVE: Sovereign FAT32 reader (no host OS, no firmware, no third-party driver)runtime/_hdl_build/nx_esp_boot.nxesp_extractPRESENT declWalks the BPB, the FAT chain and the root directory to extract a named file from our own ESP image, with tamper teeth. FAT on the ESP is MANDATED by the UEFI specification, so every rival ships a reader too -- ours is the only one that is also ours
LIVE: Loader validates the kernel before jumping (never-brick by construction)runtime/nx_nxe_lib.nxnxe_neverbrick_okPRESENT declEXCEED and alone in this field: the loader re-derives the payload sum and checks the capability and never-brick bits BEFORE mapping anything executable, and a mismatch prints its refusal on the firmware console and HOLDS. Real TianoCore was made to print our literal refusal when handed an ESP with no kernel file, so the refusal path has been seen to execute on somebody else's silicon
GAP: Boot medium usable on a real USB stick (backup GPT relocation)runtime/_hdl_build/nx_efi_fat32_image.nxnk0_gpt_relocateWATCHING declMEASURED AND FILED ON THE SOTA PAGE, NEVER DRAINED: writing a fixed-size image to a larger device leaves the backup GPT mid-device instead of at the last LBA (7,987,200 device sectors versus 135,269 image sectors), so on a physical stick the user-writable data partition does not mount AT ALL. The image is correct; the WRITE PATH must relocate the backup GPT and rewrite the primary header, the way sgdisk -e does. Smallest rung on the board and it gates whether anyone can use the medium
GAP: Pointer input (PS/2 mouse and USB HID)runtime/_hdl_build/nx_nxe_kernel0.nxnk0_mouse_pollWATCHING declNo pointer of any kind: no PS/2 mouse driver, no USB HID. Keyboard only, and PS/2 only, so on machines with no PS/2 emulation even that stops working after ExitBootServices. Nothing painted on the desktop can be clicked, which is why the taskbar and start block are pixels rather than widgets
GAP: Window manager (move, resize, focus, z-order)runtime/_hdl_build/nx_nxe_kernel0.nxnk0_wm_focusWATCHING declThe single biggest visual-parity gap: we paint ONE static window frame and have no window manager at all. SliTaz ships Openbox; SerenityOS and Haiku ship full compositing desktops of their own design and are the bar
GAP: File listing and a file manager on the metalruntime/_hdl_build/nx_nxe_kernel0.nxnk0_fs_listWATCHING declThe substrate is already proven -- the loader reads a named file off the ESP through real firmware protocols and our own FAT32 reader parses the same image independently -- so listing a directory is a shell rung, not a research rung
GAP: Terminal or shell on the metalruntime/_hdl_build/nx_nxe_kernel0.nxnk0_shell_lineWATCHING declNo shell, no command line, no process model on the metal. SliTaz is Best here on its own quoted figure: 300-plus standard commands via Busybox out of the box
GAP: Network driver on the metal (e1000 rings, DMA, packets)runtime/_hdl_build/nx_nxe_kernel0.nxnk0_e1000_txWATCHING declWe ENUMERATE and VERIFY a real e1000 post-ExitBootServices through our own PCI config walk, and honestly report unknown devices as UNBOUND -- but we cannot talk to it: no rings, no DMA, no packets. This is the gate on the entire browser arc and it carries its own never-brick audit
GAP: Persistent user data (a sovereign checksummed filesystem with writes)runtime/_hdl_build/nx_efi_fat32_image.nxnk0_sfs_writeWATCHING declNothing persists: the loader passes read-only file modes by construction and the emulator refuses a write-mode open with a named sentinel. That is a deliberate never-brick posture AND a real capability gap. We also have no filesystem of our own, so FAT32's limits become the OS's limits -- a 4 GiB maximum file size is a hard ceiling on model weights, with no journaling and no checksums
GAP: Web browser on the metalruntime/_hdl_build/nx_nxe_kernel0.nxnk0_browser_pageWATCHING declWe have a REAL sovereign browser engine with CSS cascade, box layout, anti-aliased vector text and forms, promoted and running on Linux and native Windows -- it simply does not run on the NXE kernel. Honest absent on this axis, and the most valuable single rung on the board. Haiku is Best: a full desktop browser shipped in the box
GAP: Optional on-device assistant behind the NISHI.AI slot (a real model)runtime/_hdl_build/nx_nxe_kernel0.nxnk0_ai_generateWATCHING declA lead nobody in this field holds, and the MECHANISM is already done and proven on real firmware with two different weight files and one unchanged binary: the toggle IS the file, the blob carries model name, origin URL and licence inside the checksummed region, all three refusal reasons fall back to built-in vectors, and the screen NAMES the model it loaded. What is missing is a real MODEL -- today the payload is a 32-lane integer dot product, and calling that an assistant would be the lie this register exists to prevent

watch rows=12 landed=0 watching=9 present=3 missing=0 absent=0 (partition sums)