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

Destination

IRIX 7, a GPL-3.0 Rust-native operating system for the SGI Indy (IP24): a monolithic Rust kernel (n32/MIPS III) reimplementing everything on the IRIX discs clean-room, running existing IRIX 6.5 binaries unchanged through a legacy ABI layer, and offering new Rust programs a native capability/object interface. It carries IRIX’s identity — sproc, XFS, real-time scheduling, graphics and digital media, hardware inventory, topology awareness — as first-class services. Backward-only, no-regressions; forward compatibility is out.

The advanced architecture (2026-10-20) frames IRIX 7 as the successor SGI might have built if it had not gone boring: a framekernel with hybrid SAS/MMU isolation, de-privileged cells, userspace drivers, a network-first boot (R2/EROFS root planned), an in-OS MCP control plane, and a new IRIX-inspired desktop. The native ABI is new; IRIX lives in the compatibility container. The normative architecture is docs/spec/architecture.md; the evidence base is docs/research/.

Notes

  • This is the final phase of the project. Its work starts only after the earlier phases clear, in order:
    1. Collate a complete IRIX source repo: the leaked sources plus decompilation of the 6.5.7m binaries to fill gaps (Ghidra; map #1’s recovery work).
    2. Stock rebuild (map #1): 6.5.7m rebuilt with the modernised GCC (rust-lang/gcc 17 trunk + IRIX series, ADR-0019) and binutils 2.47, cross-compiled to mips-sgi-irix6.5 and booted/run on the guest.
    3. Upgrade the source repo to 6.5.22: decompile the 6.5.22 overlay contents and apply the findings to the 6.5.7m base source manually (optionally port back 6.5.30 updates).
    4. SOURCE to AST to RUST: this map.
  • Governing decisions: ADR-0001 (publish toolchain work only), ADR-0008 (compatibility mandate, backward-only), ADR-0009 (clean-room publication), ADR-0010 (Rust monolith, n32/MIPS III), ADR-0011 (native capability substrate + compat container), ADR-0012 (GPL-3.0), ADR-0013 (full reimplementation, factory PROM), ADR-0014 (harness-enforced clean-room, hybrid transcription), ADR-0015 (layered spec, similarity-screen verification), ADR-0016 (replacement ROM at the PROM window into the n32 kernel), ADR-0017 (modern equivalents as references), ADR-0018 (GCC codegen backend primary, LLVM parallel), ADR-0019 (IRIX fork on rust-lang/gcc), ADR-0020 (rebuild ladder). ADRs live at github.com/irix7/project/docs/adr/.
  • The legacy layer order is syscall ABI -> loader -> libc; the tracer bullet is a freestanding Rust kernel reached through an assembly replacement ROM (the factory-PROM/o32 ECOFF path is not implemented).
  • Transcription is orchestrated by irix7/harness; only clean-room Rust reaches the public irix7/os repo.
  • Skills: grilling + domain-modelling for decision tickets; research for fact-finding tickets.

Decisions so far

  • IRIX 7: Rust target for MIPS III big-endian ELF32 — resolved/completed. Stock rustc + custom target + -Z build-std is feasible, no fork required; n32/MIPS III and o32/MIPS II build, “MIPS III + o32” does not (o32 implies MIPS II). Custom n32/MIPS III target spec + build-std is the plan (ADR-0010).
  • IRIX 7: kernel architecture — resolved/completed. Monolithic Rust kernel, n32/MIPS III, deep crates with language-level isolation, decoding both o32 and n32 syscall conventions (ADR-0010 / ADR-0011).
  • IRIX 7: tracer bullet — resolved/completed. A freestanding no_std Rust kernel that boots via the PROM and prints a marker, proven on the emulated Indy (ADR-0016).
  • IRIX 7: SOURCE to AST to RUST pipeline and the clean-room spec — resolved/completed. Hybrid transcription, clean-room enforced by the harness (structural split + verification) (ADR-0014).

Advanced architecture decisions (2026-10-20)

The grilling of 2026-10-20 settled the advanced architecture. The normative register is docs/spec/architecture.md §2.2 (D1–D31); this is the project-map summary.

AreaDecision
IdentityIRIX 7 is the successor SGI might have built; the native ABI is new, IRIX lives in the compatibility container.
IsolationFramekernel: privileged unsafe framework + de-privileged safe-Rust cells; SAS/SPL for native, MMU address spaces for legacy binaries.
Native ABICapability/object model with rights, revocation and delegation; Unix-shaped libc; process = one cell.
CompatibilityIn-kernel IRIX o32/n32 container; full fork/exec/sproc; library-level libc/X11/Motif/GL/dmedia; clean-room Rust X11 server phased lease → nested → rootless.
SchedulingEDF for media, fair for the rest; soft real-time; benchmarks tracked, never gated.
MemoryAggressive huge pages + cache colouring; DMA-first with cached buffers + explicit sync; raw DMA accepted; MC VDMA DMA TLB used where possible; no full IOMMU.
DriversAll de-privileged cells; the kernel brokers MMIO/DMA/IRQ. The kernel carries the Seeq/smoltcp driver during bring-up because the ROM has no network stack.
BootMinimal MIPS III assembly ROM → n32 kernel → HTTPS boot config/modules → SCSI target-2 image. Future: boot bundle and EROFS root from R2 over HTTP Range, with an optional local disk cache.
Root imageStandard little-endian EROFS + byte-order codec; no big-endian fork.
StorageXFS compatibility server read-only first; native FS (I7FS preferred) later; user data via periodic Git commits + R2.
DisplayPlan 9 8½/BeOS app_server-lineage native display server; new IRIX-inspired desktop; userspace graphics/audio servers.
NetworkingSeeq 8003 + smoltcp; /net; optional 9P2000 remote mounts; HTTP Range for bulk.
Control planeIn-OS MCP server, full root, bearer token, no audit, DS1386 watchdog; built early as the development harness.
HardwareEverything except ISDN; first target the iris default (R4400, Newport XL, 256 MiB, HAL2, Seeq, WD33C93); video output deferred.
Plan 9Selective only: ctl/data/status, /net, optional 9P; no per-process namespaces by default.

Research reports are preserved in docs/research/:

  • indy-hardware.md — Indy hardware reference (CPU, HPC3, SCSI, Seeq, HAL2, Newport, Vino, DS1386, GIO, PROM).
  • rust-x11-research.md — Rust X11 survey and the clean-room server plan.
  • native-window-system-research.md — native window-system comparison.
  • rust-fs-research.md — Rust filesystems, XFS and I7FS.
  • plan9-rust-research.md — Plan 9 ideas, 9P, MCP and content-addressed images.
  • erofs-big-endian-research.md — EROFS byte-order analysis.
  • rust-os-design-research.md — broader Rust OS design survey.

The new decisions D1–D31 should be recorded as ADR-0021 onward (or as a single “advanced architecture” ADR set) in irix7/project/docs/adr/.

Crate dependencies

External Rust crates the kernel and compat container may depend on are recorded here, subject to the licence gate in ADR-0012 (GPL-3.0). A crate may be incorporated only when its licence is compatible with GPL-3.0 and its provenance is clean-room (ADR-0009 / ADR-0014).

abi_stable

Source: https://crates.io/crates/abi_stable

The abi_stable crate provides a stable ABI surface for Rust types across crate and compiler-version boundaries, which is what the native ABI / legacy ABI layer boundary wants: Rust code exporting types and functions in a layout that does not depend on the particular rustc version that built them. It is a candidate dependency for the FFI seam between the kernel’s native capability/object model and the compat container’s translation layer, and for any Rust ABI exported to legacy IRIX 6.5 binaries.

Licence (as published on crates.io): dual-licensed under the MIT Licence or the Apache Licence, Version 2.0, at the licensee’s option (MIT OR Apache-2.0).

Compatibility check (ADR-0012 — GPL-3.0): compatible.

Both MIT and Apache-2.0 are permissive licences and are compatible with GPL-3.0. Incorporating abi_stable into this GPL-3.0 work is permitted: the combined program is conveyed under GPL-3.0 (as a whole, per GPLv3 section 5), while the abi_stable source retains its original copyright and licence notices. No further restriction is imposed on downstream recipients beyond those of GPL-3.0 itself.

Status: candidate — cleared for incorporation subject to this licence check.

Candidate crates (advanced architecture)

CratePurposeLicenceStatus
abi_stableStable Rust FFI across compiler versionsMIT OR Apache-2.0cleared (candidate)
smoltcpTCP/IP stack for the network cell and ROM0BSDcandidate
rustlsTLS 1.3Apache-2.0 OR MIT OR ISCcandidate
gixGit object store and smart HTTPMIT OR Apache-2.0candidate
rmcpMCP server (if used)Apache-2.0candidate
erofs-rsEROFS reference reader/builderMIT OR Apache-2.0reference, not a port
xfs-coreXFS read-only referenceApache-2.0reference
lamxfsXFS read-only reference (v4/v5)Apache-2.0reference
backhandSquashFS fallbackMIT OR Apache-2.0fallback
crc32cCRC32C for I7FSApache-2.0 OR MITcandidate

The exact licence of every crate is checked at incorporation time (ADR-0012); this table is a planning aid, not a legal opinion.

Not yet specified

  • I7FS vs RedoxFS for writable native disks (D23).
  • Native graphics API and UI toolkit; the native desktop prototype.
  • Video output and Indy Video emulation (deferred until the real Indys are probed).
  • The real Indys’ graphics boards and the board that Linux may not drive.
  • A/B update slots, a Merkle tree over EROFS blocks, and signed manifests.
  • Native libc ABI surface and versioning; capability invocation encoding.
  • Compat container v1 scope (sproc, arenas, procntl, syssgi, STREAMS, /hw).
  • IRIX libc ABI surfaces (o32 + n32) and their layout.
  • X11 parity target and the GLX bridge.
  • Original Indigo Magic desktop under X11: supported, best-effort, or out of scope.
  • MCP tool schemas, GDB stub, audit/approval flow.
  • -Z build-std host-toolchain glue and the GCC-backend disk-space blocker.
  • Overlay persistence and local cache format.
  • irix7-9p scope and the optional 9P remote mounts.
  • Benchmark suite contents (tracked, never gated).
  • The “IRIX 7” name and trademark review.

Out of scope

  • Forward compatibility: native IRIX 7 binaries running on IRIX 6.5 or 5.3 (ADR-0008).
  • Publishing any SGI-derived expression to irix7/os (ADR-0009, ADR-0014).
  • Reproducing the stock IRIX 6.5.7m build — that is map #1.
  • The 6.5.22 decompilation and upgrade — a precursor effort, not this map.
  • STREAMS as a first-class native interface (legacy-compat only).