Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

IRIX 7 — Risk Register and Decision Backlog

Status: living document Review cadence: monthly, and at every milestone boundary. Scoring: likelihood 1–5 × impact 1–5. High ≥ 15, medium 8–14, low ≤ 7.

1. Top risks

  1. Scope and bus factor. The native plan is 76–118 person-weeks and the architecture adds 60–95, before the compatibility library surface is fully counted. A single maintainer is the largest existential risk.
  2. No Rust no_std runtime has full live-stack migration. wasmi has no serialisable call stack; wasm3 is C. v1 is deliberately L0 only.
  3. The compatibility container is bigger than it looks. libc, Motif, GL, dmedia, the IRIX desktop and the Xlib ABI are not yet estimated. This is the project’s identity and its longest pole.
  4. fork in a single address space. A plain copy is not viable for large cells on a 32–256 MiB Indy. The native process model needs a decision before the native process phase.
  5. A driver bug is a kernel bug. De-privileged cells with raw DMA and no full IOMMU mean a bad SCSI, Seeq or Vino driver can corrupt the kernel. v1 may panic on a driver fault.
  6. MCP is full root, no audit, HTTP and a bearer token. A prompt injection or a LAN attacker can reset or overwrite the machine. Acceptable for a development harness, not for a product control plane.

1.1 Architecture risks

IDRiskLIScoreMitigation
R21128-node membership/failure detection produces gossip storms or false failures5525SWIM-style O(log n), immutable epochs, bounded summaries, simulator/fault injection
R22A single hot home overloads; home movement loses data4416Rendezvous homes, route caches, leases/epochs, forwarding; split objects in v2
R23Threshold authority colludes or loses quorum3515Independent operators, 3-of-5/5-of-7, audit, root rotation; document the trust anchor
R24Global namespace path sees mixed versions4416Per-directory linearisability, epoch caches, EXDEV for cross-home rename
R25Stale route or moved object commits twice4520TTL/hop bound, home epoch, lease fencing, one MOVED retry
R26Wasmi cannot build or perform on R46004520Phase 4 build gate; native data plane; fallback to wasm3/Rust port/native core
R27128-node test fidelity is weak54208–16 QEMU + simulator, fault injection, real 2–8 nodes
R28Capability root custody without a TPM4520Ephemeral/provisioned keys, short expiry, threshold root, physical security
R29L2 migration is assumed but unsolved4520L0 v1; fund a separate runtime project; state the limitation
R30Native POSIX/IRIX regression during extraction4416Native fast paths, compatibility suite at every phase, rollback image

The architecture also inherits the native risks below.

2. Register

IDRiskCategoryLIScoreMitigationTriggerOwnerStatus
R1Scope exceeds available time; the project stalls like Harvey/AkarosSchedule5525Walking skeleton; v1 scope cuts; milestone demos; bus-factor planTwo milestones slip by > 50%maintaineropen
R2Compat container (libc/Motif/GL/dmedia/Xlib) underestimatedTechnical5525Separate compat spec; estimate before the compatibility phase; phase X11 lease first; defer GL/dmediaCompatibility phase slips or libc grows past its estimatecompatopen
R3fork in a SAS kernel is too expensive or unsafeTechnical4416Native fork limited to small cells; posix_spawn/exec preferred; ADR before the native process phaseA cell > 8 MiB cannot forkkernelopen
R4Driver bug corrupts the kernel (raw DMA, no full IOMMU)Security4520Documented unsafe; DMA TLB confinement where possible; watchdog; driver restart laterA driver fault panics the kerneldriversaccepted
R5MCP prompt injection or LAN attacker controls the machineSecurity5420Bearer token; trusted LAN/SSH tunnel; watchdog; production-mode capability scoping laterAn unexpected MCP reset or file writesecurityaccepted
R6-Z build-std glue or GCC backend never unblocksToolchain4520The toolchain gate is first; fallback to LLVM path; dedicated toolchain ownerToolchain gate slips > 4 weekstoolchainopen
R7R2/GitHub outage or quota exhaustion blocks boot/updateOperations3515Local cache; retries; mirror; digest verification; quota monitoringBoot fails twice from R2infraopen
R8Real Indy hardware fails (PSU, SCSI, RTC, RAM)Hardware4416Two machines; spares; recapping; BlueSCSI/ZuluSCSI; backups; lab checklistA machine stops bootinghardwareopen
R9Clean-room contamination reaches irix7/osLegal3515Harness, similarity screen, DCO, access control, review gateSimilarity screen flags a PRclean-roomopen
R10“IRIX 7” name or SGI marks create a legal problemLegal2510Trademark review; disclaimer; no SGI endorsement; rename optionA takedown or objectionlegalopen
R11Native desktop does not feel like IRIXProduct339UX brief; Indigo Magic study; prototype early; user testingUsers say it feels genericdisplayopen
R12Too little RAM for the full stack on 32–64 MiB IndysPerformance3412Pick a 64 MiB floor; lite mode; lazy loading; no swap v1OOM at boot on a real Indykernelopen
R13XFS/EROFS/I7FS bug causes data lossData3515Read-only first; fsck oracles; golden images; no write until trustedA corrupt image or wrong filestorageopen
R14Supply-chain or licence violation in a dependencyLegal3412cargo-deny, SBOM, licence gate, pinned versions, reviewCI licence failureinfraopen
R15iris diverges from real hardwareTechnical4312Hardware-in-the-loop tests; differential tests; real-Indy milestonesA demo works on iris but not on Indyhardwareopen
R16GitHub/R2 free-tier limits change or are exceededOperations248Cache; mirrors; quota alerts; self-hosted where possibleA quota warning or blockinfraopen
R17Nightly rustc drift breaks the buildToolchain4312Pin the nightly; upgrade deliberately; CI matrixA nightly upgrade breaks the cross-buildtoolchainopen
R18Documentation drifts from the codeDocs326Docs in the same PR; mdBook build; link checkA spec contradicts the codedocsopen
R19Real-Indy lab access is unavailableHardware248Emulator-first; remote serial/power; sparesCannot run a hardware milestonehardwareopen
R20No second maintainer or reviewerCommunity5420Good-first issues; docs; ADRs; onboarding; pair reviewsPRs sit unreviewed for > 1 weekmaintaineropen

3. Risk process

  • Monthly review: update L/I, close resolved risks, add new ones.
  • Milestone review: check the top five and the triggers.
  • Escalation: a high risk with a triggered condition becomes a P0 issue and is discussed in the next weekly review.
  • Acceptance: a risk may be accepted explicitly (for example R4 and R5). Accepted risks are recorded in the relevant ADR and are not silently ignored.
  • Ownership: every risk has an owner (a person or a team). An unowned risk is a gap.

4. Decision backlog

The architecture decisions D1–D31 in ../spec/architecture.md §2.2 become ADR-0021 onward in irix7/project/docs/adr/.

Suggested grouping:

ADR rangeTopic
0021–0023Identity, native ABI, process model
0024–0027Framekernel, hybrid isolation, capabilities, IPC
0028–0030Memory, DMA, scheduler
0031–0033Drivers, boot, storage
0034–0036Display, X11, audio/video
0037–0038MCP, Plan 9 selectivity
0039–0040Hardware target, compatibility scope

The open questions in §17 of the spec become ADRs when settled; until then they are type/adr + status/needs-adr issues on the Project.

5. ADR template

# ADR-00xx — Title

**Status:** proposed | accepted | rejected | superseded
**Date:** YYYY-MM-DD
**Deciders:** ...
**Related:** ...

## Context
What problem are we solving? What constraints apply?

## Decision
What we will do.

## Consequences
What becomes easier, harder, more expensive or impossible.

## Alternatives considered
What else was on the table, and why it lost.

## Evidence
Links to research, prototypes, benchmarks or hardware tests.

6. Bus-factor plan

  • Every subsystem has a written spec and a “start here” issue.
  • Every non-obvious decision is an ADR.
  • Every build is reproducible from a clean checkout.
  • The MCP harness lets a new contributor inspect a running system without private context.
  • The hardware lab has a checklist so a second person can reproduce a result.
  • The private irix6 repo is not on the critical path for day-to-day work.