Historical UI Systems: 40 Years of Invariants
What goldberry learns from windowing systems 1973-1995

Table of Contents

Purpose

Goldberry's foundation.org traces web history from HTML 2.0 (1995) forward. But UI invariants predate the web by 20+ years. This document catalogs invariants from historical systems that:

  1. Were proven correct but not adopted (NeWS, Oberon)
  2. Codified invariants that the web later violated (X11 ICCCM, NeXTSTEP)
  3. Established patterns we take for granted (Xerox PARC, Motif)
  4. Attempted standardization and failed (CDE, 1990s formal methods)

The thesis: Many goldberry invariants were solved in the 1980s. The web re-introduced bugs that earlier systems had eliminated.

Plan 9 / Rio / Acme (Bell Labs, 1987-2002)

Core Innovation: Namespace Isolation

Plan 9's critical invariant: each process has its own namespace view.

Process A sees: /dev/draw -> rio window 1
Process B sees: /dev/draw -> rio window 2
Global /dev/draw does not exist

This eliminates an entire defect class:

  • No global DOM pollution
  • No "which window has focus" race conditions
  • No iframe/shadow-DOM boundary confusion

9P Protocol as Single Interface

Everything is a file: drawing, input, network, UI. One protocol enforces:

  • Composability invariant: pipe any output to any input
  • Auditability invariant: all operations are file operations (logged)
  • Security invariant: authentication at protocol boundary, not per-app

Rio Window Manager Invariants

Invariant Enforcement Web Equivalent Status
Focus change precedes event dispatch Button 2/3 clicks change focus BEFORE event None VIOLATED
Namespace isolation per window Mount point per process iframe (partial) WEAK
Z-order is painter's algorithm Back-to-front, no exceptions CSS z-index + stacking context VIOLATED
Device abstraction is perfect /dev/mouse works local or remote Touch vs mouse vs pointer COMPLEX

Acme Editor: Text-First UI

Acme proves accessibility can be intrinsic:

  • Commands are always text-selectable
  • Mouse chords are combinations, not sequences (eliminates timing bugs)
  • Undo is compositionally independent (each action reversible without coupling)

What Goldberry Learns

New invariant candidates:

  • Namespace isolation: Each interactive context must have its own namespace
  • Protocol purity: Single protocol for all resource access
  • Focus-before-event: Focus state and event delivery must be atomic

X11 ICCCM/EWMH (MIT, 1987-present)

The Closest Thing to Codified UI Invariants

ICCCM (Inter-Client Communication Conventions Manual) is one of the few systematic UI invariant specifications in computing history.

Selection Protocol Invariants

Invariant Description Violation Consequence
Ownership uniqueness Selection owned by exactly one client Data corruption
Timestamp validity Future/past timestamps fail silently Silent ownership loss
Request ordering Identical requests serviced in order Race conditions
Property cleanup Requestors must delete after retrieval Memory leak

Window State Machine

        ┌─────────────┐
        │  Withdrawn  │ ← Client controls entry/exit
        └──────┬──────┘
               │
    ┌──────────┴──────────┐
    │                     │
    ▼                     ▼
┌────────┐          ┌─────────┐
│ Normal │ ◄──────► │  Iconic │
└────────┘          └─────────┘
    WM controls transitions

Focus Management (WMTAKEFOCUS)

Critical invariant from ICCCM 2.0:

WM must NOT directly SetInputFocus if WMTAKEFOCUS advertised. Must send ClientMessage and wait for client to request focus.

Modern frameworks violate this constantly (focus stealing).

EWMH Extensions (Desktop Era)

Addition Invariant Modern Web Status
_NETWMDESKTOP Window occupies specific desktops No equivalent
_NETWMSTATE State atoms present=set, absent=unset Partial (ARIA states)
Modal dialog Blocks input to transient-for windows focus trap (manual)

Mapping to Goldberry Clusters

ICCCM Violation Goldberry Cluster Bug Volume
Focus stealing focusstate VERY HIGH
Event ordering eventgraph HIGH
Timestamp races temporality VERY HIGH
Window state transitions lifecycle HIGH
Selection/clipboard devicecontract VERY HIGH
Transient stacking layoutcontract MEDIUM

NeXTSTEP / Display PostScript (NeXT, 1988-1997)

Display PostScript: Formal Graphics Model

DPS enforced invariants that CSS cannot:

Contract DPS CSS Gap
Device independence PostScript as IR Browser-specific computed values MAJOR
Deterministic rendering Same code -> same output Varies by UA/device/extension MAJOR
Typography Font metrics as formal properties Web fonts variable, fallbacks fail MEDIUM
Composition Transform operations well-defined CSS Transform underspecified MINOR

Responder Chain as Event Graph

NeXTSTEP's event model was NOT like DOM:

NSApplication
  └─ NSWindow (first responder context)
      └─ NSView tree
          └─ [First Responder] -> Super Chain -> App Delegate

Key difference: "Super" meant responder chain ancestor, not DOM parent. You could skip ancestors in the chain.

Immutable Focus During Dispatch

THE critical invariant NeXTSTEP enforced:

First responder state is immutable while any event is in dispatch.

Web violates this:

button.addEventListener('click', () => {
  input.focus();  // Changes focus mid-dispatch!
});
// Later listeners see different focus context

Interface Builder: Design-Time Validation

IB enforced at compile time:

  • Outlet/action typing (IBOutlet creates compile-time reference)
  • Connection validation (signal must have receiver)
  • Lifecycle contracts (outlets initialized before awakeFromNib)

Modern web has no equivalent - event listeners can target nonexistent elements.

What Goldberry Learns

New invariant candidates:

  • Focus immutability during dispatch: Focus must not change mid-event
  • Rendering determinism: CSS lacks portable IR; frameworks compensate
  • Design-time connection validation: All handler connections must resolve at mount

Xerox PARC (1973-1981)

The Original GUI Invariants

Xerox Alto (1973) and Star (1981) established what we now take for granted:

Invariant Origin Status Today
WIMP (Windows, Icons, Menus, Pointer) Alto 1973 Universal
Desktop metaphor Star 1981 Universal
Direct manipulation Tesler/Star Universal (but see below)
Cut/Copy/Paste universal Tesler Universal
Modeless interfaces Tesler VIOLATED
Universal undo Star LOST
Property sheets Star LOST

Larry Tesler's "Modeless" Invariant

"Don't mode me in" - avoid modal state that hides available options.

Modern web has modal dialogs everywhere. Is "modeless" still enforceable?

What the Industry Lost

Star had features that didn't survive:

  • Property sheets: Bounded invariant spaces (vs modern unbounded dialogs)
  • Universal undo: Every action reversible (modern: app-specific, inconsistent)
  • Document-centric: Files are first-class, not windows (modern: app-centric)

What Goldberry Learns

These are the ORIGINAL invariants. Many goldberry clusters trace back to PARC:

  • focusstate: First responder concept
  • devicecontract: Mouse/keyboard integration
  • temporality: Universal undo as temporal invariant
  • totality: Direct manipulation requires complete state visibility

Motif / CDE / OPEN LOOK (1988-1996)

The Standardization Attempt

OSF/Motif Style Guide (1993) was the first attempt to formally specify a complete GUI standard. It codified:

  • Keyboard navigation model (fallback bindings required)
  • Widget behavior specifications
  • Dialog and window conventions
  • Focus semantics (foundational to WCAG 2.1)

CDE (1993-1996) added:

  • Session management (reproducible sessions)
  • Drag-and-drop protocol (type-safe transfers)
  • ToolTalk messaging (inter-app communication)

Why CDE Failed

Factor Impact
Licensing barrier Linux couldn't ship it; two-tier ecosystem
Technology speed Web emerged while CDE standardized
Vendor incentive mismatch Each vendor shipped proprietary extensions
Governance collapse Three reorgs in three years

OPEN LOOK vs Motif: Competing Invariants

OPEN LOOK: "Menus are ephemeral by default; user can override with pushpin" Motif: "Menus follow keyboard & mouse conventions from other systems"

Neither was wrong. They encoded incompatible invariant claims. Sun abandoned OPEN LOOK because HP+IBM had more deployment reach.

Lessons

  1. Invariants are contestable: Two implementations can both claim correctness
  2. Ergonomics beats formalism: English + examples won over Z notation
  3. Licensing matters: CDE failed at licensing, not at specification
  4. Standards ossify: Living documents (WCAG updates) survive; frozen specs die

Oberon / NeWS / Andrew (Roads Not Taken)

Oberon System (Wirth, 1988)

Oberon forbade overlapping windows by construction:

  • Tiled layout only
  • No z-index, no stacking context, no depth sorting bugs
  • Focus model simpler (no modal stacking pathology)

The invariant: "No two windows may overlap" eliminates an entire defect class.

NeWS (Sun, 1986)

PostScript-based window system (like DPS). Key difference from X11:

  • Drawing commands sandboxed before transmission (security invariant)
  • Richer protocol (not "dumb" like X11)
  • Lost to X11 because X11 was simpler, not because invariants were wrong

Andrew Project (CMU, 1983+)

Document embedding precursor to OLE/COM/iframes:

  • Compound documents with embedded interactive objects
  • "Which component owns focus?" becomes hard question
  • Modern web faces same problem: iframe/shadow-DOM boundaries

What Goldberry Learns

"Overlapping windows" is a CHOICE, not an invariant. Alternative models:

  • Tiled (Oberon): simpler focus, guaranteed layout
  • Document-embedded (Andrew): focus ownership complexity
  • Network-transparent (NeWS, X11): security at protocol boundary

Cross-System Invariant Comparison

System Focus Model Event Model Layout Model Security Model
Plan 9/Rio Namespace-isolated File-based Painter's algorithm 9P auth
X11 Per-window (ICCCM) Client-server Reparenting WM None (punted)
NeXTSTEP Immutable during dispatch Responder chain DPS (formal) Sandboxed PostScript
Xerox Star First responder Direct manipulation Desktop metaphor Single-user
Motif/CDE Click-to-focus X11 + extensions Motif widgets Session-based
Oberon Tiled (simplified) Integrated Tiled (no overlap) Single-user
Modern Web Variable (a11y issues) DOM capture/bubble CSS cascade Origin-based

Implications for Goldberry's 10 Clusters

Cluster Gaps Identified

Cluster Historical Invariant Missing Source System
temporality Compositional undo independence Acme
totality Lifecycle transitions are terminal Plan 9 (file open/close)
boundaries Namespace isolation per context Plan 9
a11ycontract Text-first UI (intrinsic a11y) Acme
devicecontract Perfect device abstraction Plan 9
layoutcontract Monotonic z-order (no cycles) Plan 9/Rio
eventgraph Focus-before-event atomicity Plan 9, NeXTSTEP
lifecycle Design-time connection validation Interface Builder
focusstate Immutable focus during dispatch NeXTSTEP
securitycontract Protocol-boundary authentication Plan 9, NeWS

Candidate New Invariants

# From Plan 9
namespace-isolation:
  cluster: boundaries
  statement: >
    Each interactive context must have its own namespace.
    Global state visible to all contexts is a defect.
  falsifiable_by: >
    A web standard that provides per-tab/per-iframe namespace isolation.

# From NeXTSTEP
focus-immutability:
  cluster: focus_state
  statement: >
    Focus state must not change while an event is in capture/bubble phase.
  falsifiable_by: >
    A browser that prevents focus changes during event dispatch.

# From Plan 9
monotonic-z-order:
  cluster: layout_contract
  statement: >
    Z-order must never form cycles. Painter's algorithm should be default.
  falsifiable_by: >
    CSS stacking context without z-index resets.

# From Interface Builder
mount-time-validation:
  cluster: lifecycle
  statement: >
    All event handler connections must be validated before first interaction.
  falsifiable_by: >
    Framework that errors on dangling event listener references.

Era Expansion Proposal

Current goldberry eras:

  • E0: 1993-2008 (hand-coded HTML/CSS/JS)
  • E1: 2008-now (framework-generated)
  • E2: emerging (NL/design-tool generated)
  • E3: hypothetical (formal spec generated)

Proposed expansion:

  • E-1: 1973-1993 (graphical operating systems)
    • Reference implementations: Alto, Star, Lisa, Macintosh, X11, NeXTSTEP
    • Invariants established before web existed
    • Many goldberry clusters trace back here

Sources

Plan 9

  • Pike et al., "Plan 9 from Bell Labs" (1995)
  • Pike, "8½, the Plan 9 Window System"
  • Pike, "Acme: A User Interface for Programmers" (1994)
  • 9P Protocol Documentation

X11

  • Inter-Client Communication Conventions Manual (ICCCM)
  • Extended Window Manager Hints (EWMH)
  • X Window System Protocol Specification

NeXTSTEP

  • NeXTSTEP AppKit Reference Manual (Apple, 1989)
  • Display PostScript documentation
  • Interface Builder User Manual

Xerox PARC

  • "Designing the Star" (IEEE Computer, 1982)
  • Tesler, "The Graphical User Interface" (1981)
  • Kay & Goldberg, "A Personal Computer for Children of All Ages" (1972)

Motif/CDE

  • OSF/Motif Style Guide Revision 1.2 (1993)
  • CDE Infrastructure documentation
  • IEEE P1295 (Motif standard)

Alternative Systems

  • Wirth, "The Oberon System" (1988)
  • Sun NeWS documentation
  • Andrew Project papers (CMU)

Verification Status

This document synthesizes research from 6 independent agents examining:

  1. Plan 9 / Rio / Acme
  2. X11 ICCCM / EWMH
  3. NeXTSTEP / Display PostScript
  4. Xerox PARC / Alto / Star
  5. Motif / CDE / OPEN LOOK
  6. Oberon / NeWS / Andrew

All claims should be verified against primary sources before Phase 2 corpus entries.

Author: goldberry research

jwalsh@nexus

Last Updated: 2026-05-17 23:10:42

build: 2026-05-20 03:36 | sha: 12ce5fe