Skip to content

Repository files navigation

Kernel Hive

Virtual computer museum streamed into your browser. 90+ operating systems ready for your interaction instantly, spanning from 1970 to modern times — with highly optimized round-trip latency.

Twenty desktops from the collection, side by side

licence: MIT streamhost: GPL-2.0-or-later

Major features

  • Instant machines. Every guest launches from a full machine-state checkpoint — RAM, devices and disk together — and waits paused; the first visitor resumes it. A 1999 Alpha workstation is on screen in seconds. (docs/GUEST-TIERS.md)
  • A latency-first pipeline, end to end. Input rides WebTransport over QUIC/UDP: pointer moves as unreliable datagrams, keys and clicks on their own reliable streams, so no class ever blocks another. The whole host-side critical path is Rust — one daemon per machine pulls a frame only when the emulator reports damage, encodes it in-process with libx264 tuned for zero latency, and ships one access unit per QUIC stream straight into WebCodecs in the browser. Measured LAN click-to-photon: ~20–25 ms, down from ~200 ms on the WebRTC stack it replaced. (docs/INPUT-LATENCY.md, docs/ARCHITECTURE.md)
  • Headless, low-overhead emulators. On the host-native path there is no X server and no virtual display: QEMU, MAME, VICE, FS-UAE and es40 publish their framebuffer straight into shared memory and take input over a control socket. An idle desktop costs nothing to stream, and an unwatched machine is paused outright. (streamhost/docs/DESIGN.md, streamhost/docs/IDLE-PAUSE.md)
  • Absolute cursor positioning, on every kind of guest. Machines that only understand relative mouse motion still put the cursor exactly under yours: closed-loop readback from the graphics chip's registers (AIX, HP-UX), the coordinate written into the place the OS keeps its own pointer (classic Mac OS, BeOS, Rhapsody, DOS GUIs), or the guest's own X server warped from outside (Amiga UNIX, the Linux and BSD fleet). (docs/lab/INPUT-DEBUGGING.md)
  • Patched emulators. MAME, QEMU, VICE, FS-UAE and es40 are all forked for shared-memory scanout, control-socket input, savestates and the device models these machines needed — see Emulator forks.
  • A private 1990s internet. Period browsers reach an archived 1998 web; ICQ, AIM and IRC connect the machines to each other and to a chatbot. No route to today. (docs/lab/RETRONET-BRIEF.md)
  • Walk in before signing up. A stranger gets five minutes at the controls with no account at all. Register with a passkey to get a private clone of Windows 3.11, OS/2 Warp or Rhapsody, reaped after the visit. (docs/lab/WALKIN-BRIEF.md)

Visit the museum

kernelhive.madekivi.fi

No invitation or account is required to start: the front door puts a running machine in front of you and gives you five minutes at the controls. Register with a passkey for a private Windows 3.11, OS/2 Warp or Rhapsody clone. An invited account opens the whole floor: every live machine, its write-up, photographs of the real hardware, and the private 1990s internet. Sign-in uses passkeys; there is no password. The public path — edge, gates, media plane — is docs/PUBLIC-GALLERY.md.

The lineup

Every machine on the floor, by the decade it came from. Each one is a link straight into the running system.

1970s

DEC PDP-11 — RT-11, RSX-11M, RSTS/E
DEC PDP-11 — RT-11, RSX-11M, RSTS/E · 1970
Xerox Alto II
Xerox Alto II · 1973
DEC GT40
DEC GT40 · 1973
DEC PDP-11/70 — 2.11BSD
DEC PDP-11/70 — 2.11BSD · 1975
Commodore PET 2001
Commodore PET 2001 · 1977

1980s

Commodore CBM 8032
Commodore CBM 8032 · 1980
Commodore VIC-20
Commodore VIC-20 · 1980
Acorn BBC Micro Model B
Acorn BBC Micro Model B · 1981
Xerox Star 8010
Xerox Star 8010 · 1981
Sinclair ZX81
Sinclair ZX81 · 1981
Commodore 64
Commodore 64 · 1982
Commodore CBM 610
Commodore CBM 610 · 1982
Dragon 32
Dragon 32 · 1982
Multitech Microprofessor II
Multitech Microprofessor II · 1982
Sinclair ZX Spectrum 48K
Sinclair ZX Spectrum 48K · 1982
Atari 800XL
Atari 800XL · 1983
Lisa Office System 3.1
Lisa Office System 3.1 · 1984
Oric Atmos
Oric Atmos · 1984
Commodore Plus/4
Commodore Plus/4 · 1984
Sinclair QL
Sinclair QL · 1984
Amiga 1000
Amiga 1000 · 1985
Amstrad CPC 6128
Amstrad CPC 6128 · 1985
Apple //e
Apple //e · 1985
Atari ST (EmuTOS GEM)
Atari ST (EmuTOS GEM) · 1985
Commodore 128
Commodore 128 · 1985
Xerox 6085
Xerox 6085 · 1985
Acorn ARM Evaluation System
Acorn ARM Evaluation System · 1986
Amiga 500
Amiga 500 · 1987
Interlisp Medley
Interlisp Medley · 1987
Apple II
Apple II · 1988
KC 85/4
KC 85/4 · 1988
SAM Coupé
SAM Coupé · 1989

1990s

Amiga 3000
Amiga 3000 · 1990
NEWS-OS 4.1R
NEWS-OS 4.1R · 1991
Amiga UNIX (AMIX)
Amiga UNIX (AMIX) · 1992
A/UX 3.0.1
A/UX 3.0.1 · 1993
SGI Indy R4400
SGI Indy R4400 · 1993
SGI Indy
SGI Indy · 1993
PC/GEOS Ensemble
PC/GEOS Ensemble · 1993
Windows 3.11
Windows 3.11 · 1993
FreeDOS
FreeDOS · 1994
MS-DOS 6.22 + Windows 1.0
MS-DOS 6.22 + Windows 1.0 · 1994
Solaris CDE
Solaris CDE · 1994
SunOS 4.1.4 / OpenWindows
SunOS 4.1.4 / OpenWindows · 1994
NeXTSTEP 3.3
NeXTSTEP 3.3 · 1995
Windows NT 3.51
Windows NT 3.51 · 1995
Windows 95
Windows 95 · 1995
HP-UX 10.20 / HP VUE
HP-UX 10.20 / HP VUE · 1996
Mac OS 7.5.3
Mac OS 7.5.3 · 1996
Windows NT 4.0
Windows NT 4.0 · 1996
OS/2 Warp 4
OS/2 Warp 4 · 1996
Slackware 3.4
Slackware 3.4 · 1997
Rhapsody DR2
Rhapsody DR2 · 1998
IBM RS/6000 — AIX 4.3.3
IBM RS/6000 — AIX 4.3.3 · 1999
NetBSD 1.4.1
NetBSD 1.4.1 · 1999
Windows 2000 for Alpha
Windows 2000 for Alpha · 1999
Windows 98 SE
Windows 98 SE · 1999

2000s

BeOS R5
BeOS R5 · 2000
Debian GNU/Linux 2.2
Debian GNU/Linux 2.2 · 2000
Red Hat Linux 6.2
Red Hat Linux 6.2 · 2000
SuSE Linux 6.4
SuSE Linux 6.4 · 2000
Windows 2000
Windows 2000 · 2000
Mac OS 9.2.2
Mac OS 9.2.2 · 2001
Windows XP
Windows XP · 2001
Chokanji (超漢字)
Chokanji (超漢字) · 2002
Tru64 UNIX
Tru64 UNIX · 2003
KolibriOS
KolibriOS · 2004
Ubuntu 4.10 Warty Warthog
Ubuntu 4.10 Warty Warthog · 2004
Alpine Linux
Alpine Linux · 2005
FreeBSD 4.11
FreeBSD 4.11 · 2005
HelenOS
HelenOS · 2006
PC-BSD 1.5.1
PC-BSD 1.5.1 · 2008
Red Star OS 2.0
Red Star OS 2.0 · 2009
Tiny Core Linux
Tiny Core Linux · 2009

2010s–2020s

QNX Neutrino 6.5
QNX Neutrino 6.5 · 2010
9front (Plan 9)
9front (Plan 9) · 2011
ToaruOS
ToaruOS · 2011
Red Star OS 3.0 Desktop
Red Star OS 3.0 Desktop · 2013
TempleOS
TempleOS · 2013
SerenityOS
SerenityOS · 2018
bootOS
bootOS · 2019
Windows 11
Windows 11 · 2021
AROS
AROS · 2024
Haiku R1/beta5
Haiku R1/beta5 · 2024
OpenVMS x86-64 9.2
OpenVMS x86-64 9.2 · 2024
ReactOS 0.4.14
ReactOS 0.4.14 · 2024
ravynOS
ravynOS · 2025
Genode Sculpt OS
Genode Sculpt OS · 2025
OpenBSD 7.9
OpenBSD 7.9 · 2026

Inside the museum

Rhapsody DR2 in the museum: OmniWeb on the archived 1998 apple.com beside a Terminal

Rhapsody DR2. OmniWeb on the retronet's archived apple.com, May 1998.

The gallery grid, 1990s section: live thumbnails of Amiga 3000, NEWS-OS, Amiga UNIX, A/UX, PC/GEOS, SGI Indy, Windows 3.11, FreeDOS and MS-DOS with Windows 1.0

The collection, grouped by decade. Every thumbnail is the machine's live framebuffer.

Exhibit notes for the SGI Indy: year, lineage, architecture, iconic software, and the Indigo Magic Desktop with FSN

Exhibit notes. Each machine carries its lineage, hardware, period software and a caption for what is on screen.

The 3D museum: a rendered office floor of period workstations, each screen streaming its live machine, with a KC 85/4 placard in front

The 3D museum (early access). A walkable floor where every monitor is a live machine.

How it works

Browser, streaming daemon and emulator, with the retronet plane beside them

One Rust daemon per machine: damage-gated capture from shared memory, QMP or an in-guest agent; in-process x264 + Opus; WebTransport to the browser; input injected back by whichever channel the guest supports. Behind it, a patched emulator restored from a checkpoint. docs/ARCHITECTURE.md is the map into the rest.

Emulator forks

Every emulator behind the museum is forked and patched for headless, low-overhead streaming: a shared-memory framebuffer instead of a window, a control socket for paced input with an absolute mouse, savestates that actually restore, and the device models the guests needed. One commit per patch, on the pinned branch.

Fork Machines What we patched ≈ our diff
Wnt/mame (irix, mpf2) SGI Indy, Microprofessor II R4600 DRC cache, GIO64/Newport shared-memory framebuffer, a control-socket OSD module for headless input, PS/2 mouse and DMA/RTC fixes 3.5k lines, 16 commits
Wnt/qemu (kernel-hive, aix432-s3) Rhapsody, Mac OS 7.5.3, AIX, and the x86 fleet's patch set dbus console fast-poll, a low-latency gallery-hid input device, Cirrus VGA vmstate and ROP fixes, PPC timebase migration, absolute pointer by writing guest RAM, closed-loop 1:1 pointer over the hardware cursor; AIX carries forward-ported S3 Trio and Matrox MGA models 3.4k lines, 14 commits
Wnt/vice (kernel-hive/integrated) C64, C128, CBM-II, PET, Plus/4, VIC-20 headless control-socket input with keymap, shared-memory framebuffer, CRTC restore fixes, raw-PCM audio FIFO, in-process save/load state via a CPU trap 4.4k lines, 14 commits
Wnt/es40 (main) Windows 2000 Alpha, Tru64 UNIX JIT chain-exit and compile fixes, working savestate and instant resume, paced absolute pointer with per-guest gain, live checkpoint verb, host-freeze absorption 1.6k lines, 19 commits
Wnt/fs-uae (kernel-hive/integrated) Amiga 1000, Amiga 3000, AmigaOS 3.5, Amiga UNIX headless native entry (no window, GL or X), shared-memory framebuffer, control socket with mousehack re-arm after restore, 48 kHz PCM FIFO, clean SIGTERM 1.5k lines, 11 commits
Wnt/previous (kernel-hive) NeXTSTEP shared-memory framebuffer, control-socket input paced to the keyboard floor, framebuffer republish and network down/up around checkpoints, raw-PCM audio FIFO 1.7k lines, 12 commits

Line counts are additions plus deletions in our own commits, measured against each fork's merge base on 2026-09-09; upstream history the branches carry is not counted. Design notes: docs/lab/ES40-FORK-BRIEF.md, docs/lab/FSUAE-NATIVE-BRIEF.md, the irix branch README, streamhost/qemu-patches/.

This week at the museum

The museum keeps a written account of every week. The latest one:

Weeks 7–8 · A phone and twenty more · 2026-09-13 09:00 – 2026-09-27 09:00

Screenshots

Nokia 9300 Communicator
Nokia 9300 Communicator
Multics
Multics
MIT ITS
MIT ITS
4.3BSD
4.3BSD
IBM MVS 3.8j
IBM MVS 3.8j
Visi On 1.0
Visi On 1.0
Macintosh System 1.0
Macintosh System 1.0
PERQ POS G.7
PERQ POS G.7

The museum has its first phone: a Nokia 9300 Communicator from 2005, running its own firmware, opens on the page as a drawing of the open clamshell whose every key you can press. Type a letter in Documents, fill in a Sheet, or open Web and let its Opera browse the museum's archived web. Twenty more machines arrived in the same two weeks. The timesharing giants: Multics, ITS, Berkeley's 4.3BSD on a VAX-11/780, and IBM's MVS 3.8j on a 3270 terminal already logged into ISPF. Desktops from Pittsburgh to Tokyo: Visi On, the 1984 Macintosh System 1.0, the PERQ, the Apple IIGS, OS/2 1.3, Fujitsu's FM TOWNS, RISC OS 3.11, Native Oberon and General Magic's Magic Cap. Unix comes to the PC three ways, in Linux 0.12, Minix 2.0.4 and SCO Xenix; CP/M 2.2 and the MSX2 bring home computing, and a PalmPilot and Mac OS X 10.3 Panther carry the story into the 2000s.

Read weeks 7–8 in full, and every earlier week, in the full archive.

Every machine named here is live at kernelhive.madekivi.fi.

A reading tour

Five documents worth reading even if you never run any of this.

  1. docs/ARCHITECTURE.md — the whole system in one sitting, including the awkward truth that for a large part of the collection the thing being captured is not the machine you came to see, but a bare Linux screen with a period emulator filling it edge to edge.
  2. docs/INPUT-LATENCY.md — where every millisecond between a key press and the pixel changing actually goes, stage by stage, measured rather than assumed, with what is left to win.
  3. docs/lab/nt4-cirrus-vmstate-trace-fix.md — a detective story: Windows NT 4 cold-boots to a clean desktop but always restores a blue-lavender one, and the culprit is a struct being read at the wrong offset. The before-and-after screenshots are in docs/lab/nt4-cirrus-vmstate-proofs/.
  4. docs/lab/RETRONET-BRIEF.md — the design for an internet that only goes backwards: what a 1997 browser needs, why every service is offline by construction, and what it costs to put a real machine on it without breaking it.
  5. docs/guests/irix.md — one machine, at length. An SGI Indy with no window, no virtual machine and no display at all, publishing frames into shared memory, and the long list of performance angles that were measured and closed — including the one closed in error and reopened.

If a word in any of these is unfamiliar, docs/GLOSSARY.md is the whole vocabulary on one page.


Status — a home lab, not a product

Personal home-lab project. Everything here is built against one specific machine ("the lab box"), a single Proxmox host. The code is published for reading, reuse and reference; reproducing the full gallery is real work, and the docs describe that work rather than hiding it behind an installer.

The public gallery is reachable over the internet, but every session is authenticated — by passkey, on an invited account or a self-registered one.

Building the pieces

SPA (works on any machine with Node.js and npm):

cd spa
npm ci
npm run build     # a placeholder src/data/credentials.ts is created
                  # automatically from credentials.example.ts
npm run dev       # local dev server

streamhost (Linux; links the system libx264):

sudo apt-get install libx264-dev libopus-dev libclang-dev pkg-config cmake
cd streamhost
cargo build --release
cargo test

Everything else — station launchers, seed-image builders, labctl — assumes the Proxmox lab host and its VM inventory. Follow the reproduction quickstart for the required external inputs and the ordered full-box runbook chain.

Hardware and scope

This assumes a single Linux host (Proxmox VE in production) with enough CPU and RAM to run the fleet plus a per-station encoder. The kernelhive.madekivi.fi host is a 6+ years old Supermicro server with no GPU. There is no cloud deployment path and no installer: the reproduction quickstart separates what builds on any machine (the SPA, the streamhost daemon) from what only makes sense against the Proxmox host and its VM inventory (station launchers, seed-image builders, labctl).

Repository layout
Path What lives there
streamhost/ Rust streaming daemon (WebTransport + in-process libx264/Opus), per-station launchers, in-guest agents, crate docs in streamhost/docs/ — GPL-2.0-or-later
spa/ The gallery front-end: Vite + React + TypeScript, WebCodecs decode
tests/e2e-live/ Playwright suite that drives the live lab box — not run in CI
scripts/ Ops tooling: labctl (unified box CLI), build-guests/ (per-OS seed-image builders), serve/ (HTTPS server for the SPA), dev/ (build-and-deploy loop) — indexed in scripts/README.md
registry/ The station registry (source of truth for the roster) and per-station poster prose
docs/ lab/ runbooks and hardware notes, guests/ per-OS notes, catalog/ media and software catalogs, history/ retired status docs — indexed in docs/README.md
.github/workflows/ CI: Rust fmt/clippy/test, SPA lint/build, shell + Python + workflow lint
Addresses and hostnames in these docs are placeholders

Every IP, hostname and domain shown in this repository (192.0.2.10, labhost.lan, example.com, and similar RFC 5737 / .example values) is a stand-in for the operator's real lab box, substituted throughout before this repo was published. The one deliberate exception is the gallery's own public address, kernelhive.madekivi.fi.

Placeholders are not wrong values to fix, and they will not resolve — reproducing the stack means supplying your own via registry/local.env (see registry/local.env.example and registry/README.md) and the other gitignored, operator-local files listed in .gitignore. A deployment left on the placeholders builds but is unreachable. Please don't submit patches that put real addresses, hostnames or credentials back into the repo.

Contributing

See CONTRIBUTING.md: what can be built and verified without lab hardware, the CI quality gate, and PR expectations.

License

The repository is MIT-licensed (see LICENSE), with two exceptions:

  • streamhost/ is GPL-2.0-or-later (see streamhost/LICENSE) because the daemon links the system libx264, which is GPL. The two trees are independent — nothing outside streamhost/ links against it.
  • The historical photographs under spa/public/posters/*/gallery/ are third-party works reused under free licenses (public domain, CC0, CC BY, CC BY-SA) and remain their authors' property. Every image's author, license and source page is listed in docs/IMAGE-CREDITS.md; the licenses are enforced mechanically against the Wikimedia Commons API by scripts/tools/fetch-poster-gallery.py (re-check with make poster-gallery-verify). CC BY-SA images carry share-alike obligations on modified redistribution.

About

A living computer museum: 90+ vintage and exotic operating systems from 1970 to today, running live on one Proxmox host and streamed interactively to your browser.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages