Deadlines, not best-effort
Inference latency is a deadline. A best-effort ioctl and a userspace poll loop are the wrong primitive when a wave must complete against a partition quota.
freeze-v1 · M0–M6 complete · next year is YEAR_AHEAD
Fabric kernel for AI silicon.
An operating system for packages that are a mesh of CPU, NPU, GPU, and custom ASIC tiles — not a host CPU with bolt-on devices. Accelerators are activities on a capability fabric, not ioctl endpoints.
Research IreeHalCmd v1 is frozen. Isolation is the product. The next twelve months: sell the demos we can run — YEAR_AHEAD.
01 — Problem
Traditional kernels treat GPUs and NPUs as PCIe endpoints: a userspace runtime, an ioctl, and a hope the driver flushed the right caches. That model is already strained on a discrete GPU. It fails on a mesh of chiplets.
Inference latency is a deadline. A best-effort ioctl and a userspace poll loop are the wrong primitive when a wave must complete against a partition quota.
Tile SRAM, HBM, and a CXL region are different places. “Shared memory” across dies is often not cache-coherent. A pointer both sides “have” is a bug.
Multi-tenant packages hold other people’s models. Isolation has to be spatial — slices, banks, blast radius — not a file permission and a hope.
Chiplets extend the NoC. UCIe, EMIB, and UALink move bytes. They are not a programming model, and they do not name tenants, cuts, or fences.
02 — Solution
Aether is a capability machine whose primitive is a typed message, not a POSIX process. The interfaces and invariants are what we would pitch to an AI-chip OS team — not a claim of production silicon.
A CPU tile and a virt accel share one Activity / EndpointId. There is no /dev ioctl surface. The fabric is the only IPC.
HOST, DEVICE_HBM, TILE_SRAM, CXL_REGION, SCRATCH, STREAMING. Unified memory is an explicit capability bit, never the default. Remote access is an Exchange.
Compilers schedule FLOPs. No in-kernel graph IR. The host ABI is shaped like PJRT / IREE HAL — Device, MemorySpace, Buffer, Executable, Event.
Route tags (die / chiplet / tile / hop) are architectural. Silicon steers on the header without parsing tensors.
Slices, columns, bank color, SpectralCut, blast radius. QoS is an invariant, not a hint. Temporal sharing comes second.
Event ring observes fabric, scheduler, and HAL. Cross-tenant mint is rejected. Tenant B cannot hold A’s Memory, SpectralCut, or Activity.
03 — How it works
Four surfaces a silicon OS actually has to get right. Implemented as types and refusal rules in aether-core — not slideware.
Every compute unit is an Activity behind a uniform endpoint. Drivers may still talk MMIO; the ABI does not. Send, recv, map, and accel require a CPtr. Bulk tensors ride in a Memory cap, not the 64-byte control payload.
A buffer binds to a space. (place, local) addresses refuse a silent remote load — the HAL will not pretend HBM is in the CPU coherence domain. UNIFIED is never implied by MEM_FULL.
submit → fence / timeline → complete or timeout. Credit-limited per partition — not CUDA streams. Host Event create / record / wait is a research noun over those existing SoftChipletSync fences — not a new packet, not a PJRT plugin, not a CUDA stream. Named phases (Compute, Exchange, Barrier) are tags. The kernel does not fuse them.
AccelJobDesc against a partition + cut
Timeline + credits; doorbell, not a stream
Used-ring IRQ · reply to completion_ep
A cut is a capability: a bipartition of the package affinity graph. Cross-cut tile/bank placement is refused. Every fabric header carries a FlowClass. Gradient may tree-offload; curl and harmonic must not — folding a cycle onto a tree deadlocks. SoftNoI admit now reads a software fabric-class tag at submit (tree / ring / persistent). Curl still needs reserved ring capacity even when IS is 1.0. Not a DMA header, not topology synth.
Trees, broadcast, allreduce.
Cycles that must stay cycles.
Persistent homology. Do not fold.
04 — Market need
No invented TAM. The argument is structural: custom silicon is proliferating, the interconnect era is chiplet-shaped, and the OS layer under heterogeneous packages is still a Linux device driver plus a vendor runtime.
CUDA’s moat is real — and it has left the package operating system underserved. Vendor compilers already schedule FLOPs. What they do not have is a kernel that can name tiles, banks, tenants, and cuts as first-class objects.
Linux still sees an NPU as a device. Runtimes still see the OS as a driver host. Hyperscalers already isolate tenants in time. Weights and KV caches on a multi-die package need isolation in space — a capability, a bank color, a blast radius — not another ioctl.
Illustrative, not a forecast. As more inference moves onto heterogeneous packages, the scarce layer is the one that can refuse a CrossCut and a silent remote load. That is an OS problem. It is not a bigger CUDA library.
Training and inference houses, hyperscalers, and startups are tape-outing domain silicon. Each package still inherits a host-centric OS story.
Dies are mixed after the fact. The programming model cannot be “whatever the interposer happens to make coherent.” Transport is not ABI.
Weights and KV are the crown jewels. Spatial isolation generalized beyond a single-GPU MIG slice is the OS work the stack still treats as driver folklore.
05 — Why partner
What a silicon OS team can evaluate today: a frozen packet, a PJRT-shaped host shim, Soft SMMU SIDs, and a two-tenant refuse. Proof is host-test behavior already in the tree — mechanisms, not invented FLOPs. Research HAL; PartnerNpuStub stays a leftover no-op. One-page leave-behind: SELL_PACK. Diligence: DILIGENCE. Next-year calendar: YEAR_AHEAD. Sell goals live in #sell.
IreeHalCmd96-byte little-endian IREE HAL nouns. Magic 0xAE7E1EE1, backend = 4, Soft-SMMU ssid = 2. Offsets locked in ACCEL.md. Aether stays out of the ISA; the partner CP fills opcode, shape, typed places, fence.
host/aether-pjrt packs that frozen packet onto IreeShapedCp. Device, MemorySpace, Buffer, Executable, Event — compiler nouns on purpose. Event create / record / wait lowers onto existing SoftChipletSync chiplet or package fences. Not a new packet. Not GetPjRtApi, not an IREE HAL driver, not a plugin.
STE→CD→Stage-1/2 software walk. SET_SID at Soft-CP submit; StreamId inherits / sticks on the XQueue. Bind-at-map is not enough. Path-A BAR DMA host-proves the same walk (wrong SID aborts). Software tables — partner silicon still required for a hardware SMMU.
Two tenants. Cross-tenant mint is a type error. SpectralCut CrossCut is refused. Wrong-SID walk aborts. Spatial slice + QoS + blast radius as capabilities — not a MIG product feature we ship.
A’s arena pins on SID-A. Walk of that IOVA on unbound SID-B is StreamAbort. After B binds SID-B for B’s arena, walking A’s IOVA on SID-B is WrongStream.
run_blast_demo() · serial [blast] Soft SMMU wrong SID abort
Kernel-owned arena first; opcodes / relocs / SID / addr caps on the copy. A client that mutates during validate is ignored. Without the firewall the sneak lands. Command-stream integrity — not confidential GPU.
run_firewall_demo() · serial [firewall] copy-then-validate race sealed
Last-writer chiplet per buffer label. Same-chiplet consume elides; cross-chiplet cannot. Incorrect elision (ignore writer chiplet) fails. Fence counts only — not a latency claim.
run_softcct_demo() · two-chiplet clip: 1 package fence vs 10-fence broadcast
Fake shared NoI. Projected IS = max T_solo / T_con. Budget 1.5. Light 400+400 admits (IS = 1.0). Heavy 800+800 refuses the second tenant (IS = 1.6). A software fabric-class tag (tree → Gradient, ring → Curl, persistent → Harmonic) feeds the same admit: second light Curl refuses RingExhausted even at IS = 1.0. Integer throughput units — not FLOPs, not topology synth, not a DMA header.
run_softnoi_demo() · serial [softnoi] class tag curl ring-reserve refuse
create_event(Chiplet | Package) / record / wait lower onto SoftChipletSync. Job Events from execute stay on the partition CP-shaped timeline. Wait-before-record is NotReady. Not a new packet, not GetPjRtApi, not a CUDA stream.
host/aether-pjrt · IreeHalCmd offsets unchanged · not a plugin
atomic_addSID-proved toy fetch-add on the Soft-CP bytecode. In-range accept; cross-tenant Oob. Tensor stays Unmodeled. Heap/alloc is a named refuse ([softsfi] heap=refused), not a bump allocator. Sequential software RMW — not a hardware atomic, not NVVM, not “safe kernels.”
run_softsfi_demo() · serial [softsfi] heap=refused
Bind process mm ↔ Soft-SMMU SSID. Soft-CP DMA uses that process VA. Host unmap → SSID TLB invalidate. Skip the invalidate and the ATC still hits the old PA — that stale translate is the negative test, not a unified VA. After InvCmd::CfgCd the walk is NotMapped.
run_sva_demo() · serial [sva] unmap invalidates SSID TLB; stale translate faults · not ARM SVA / CUDA UVA / hardware SMMU
The frozen job wire carries non-identity IOVAs. DMA walks path-A stream_id (ssid 4). Wrong SID aborts. Host contract on PathABar — not a guest PCI bind, not a QEMU IOMMU, not hardware SMMU. Path B / make qemu stays canonical. Default CI does not rebuild QEMU.
make accel-test · drivers/src/path_a.rs · optional make qemu-accel
Next year · YEAR_AHEAD · TWO_YEAR_PLAN
Not tape-out. Not a foundry calendar. Research IreeHalCmd v1 stays until a real partner CP brings an opcode list. Next-twelve-month calendar is YEAR_AHEAD (Sep 2026 → Sep 2027). Closed Sep → Mar record: SIX_MONTH_FORWARD. Partner demos: SELL_GOALS. 2028 handoff or freeze lives on TWO_YEAR_PLAN — not this year’s climax. Same strip on #roadmap.
Sell pack · freeze-v1
CapTable only if alias
Real opcode list, or stay v1
Signed list or ABI freeze
$ git clone https://github.com/amineux/aether.git && cd aether $ make diligence-demo [event] SoftChipletSync create/record/wait [event] fence counts chiplet-local vs package [softcct] package fences= [greenctx] interference partitioned 70/30 vs unpartitioned [diligence] host Path B sealed $ make red-team [redteam] fabric-class admit/refuse [redteam] ATOMIC_ADD accept/reject [softsfi] heap=refused [redteam] sealed $ make partner-hello [partner-hello] ok $ make qemu [blast] Soft SMMU wrong SID abort ok [firewall] copy-then-validate race sealed
make diligence-demo is the host Path B partner clip (no QEMU). make red-team is the named-attack refuse clip. Week 1 walk: isolation → packet (make partner-hello / doorbell) → wait → admit class → sandbox hole. Path B make qemu is the bootable slice. Optional path-A IOVA: make accel-test (no QEMU rebuild). Eight-minute call script: #pitch.
Your compiler keeps the ISA and fusion. Aether admits the job against a partition, a cut, a bank color, and a fence. No booked silicon bring-up. No vendor announcement.
06 — Sell / Design-win
One-page leave-behind: docs/SELL_PACK.md. Printable cut: partner-one-pager. Next-year calendar: YEAR_AHEAD (this page #roadmap). Week 1 20-minute pack: WEEK1_CALL. This-quarter demos: SELL_GOALS. Isolation is the product. Soft SMMU is software. Path B is canonical. freeze-v1: research IreeHalCmd v1 stays. No NVIDIA partnership. No FLOPs. No tape-out.
Every first meeting: make diligence-demo then make red-team. No QEMU required. Captured logs live in docs/pitch/ if cargo is cold.
Fill DESIGN_WIN.md against frozen IreeHalCmd — or a written no. The IREE HAL stand-in is a research mapping, not a partner.
Isolation → packet → wait → admit class → ATOMIC_ADD + heap refuse. Same tree. Commands below exist in make help. Thin third consumer: make mp-shim (inspiration name only).
make partner-hello is clone-and-run. Doorbell is a second consumer of the same 96-byte image. make mp-shim is a MicroPerceptron-shaped third consumer (PR #83) — inspiration name only, not a port.
Optional host proof: make accel-test. Wrong SID aborts. Stock make qemu stays path B. Do not rebuild QEMU on the call.
Signed opcode list from a real partner CP, or freeze the research ABI. Horizon, not this year’s climax. Hardware SMMU stays partner silicon. Not a foundry date. Spine: YEAR_AHEAD.
Two-tenant refuse, frozen IreeHalCmd submit + wait. Event create/record/wait. Grep [event] fence counts, [softcct] package fences=, [greenctx] interference partitioned 70/30 vs unpartitioned.
[redteam] attack=… result=refused. Fabric-class admit/refuse. ATOMIC_ADD accept/reject. [softsfi] heap=refused (PR #80). Closer: not confidential GPU, not HW MIG, Soft SMMU is software.
IreeHalCmdMagic 0xAE7E1EE1, backend = 4. Bad executable refused. No QEMU rebuild. Not a signed vendor.
Admits the filled public-noun worksheet. Not a partner. Packet offsets stay (magic 0xAE7E1EE1). Blank they fill: make design-win-check.
Host PathABar. Job wire carries non-identity IOVAs. Wrong SID aborts. Kernel PCI bind still optional. CI does not rebuild QEMU.
Thin third caller of frozen IreeHalCmd (PR #83). Inspiration name only. Secondary to PJRT. Not a MicroPerceptron port. No QEMU rebuild.
Stock QEMU, in-kernel SoftNPU BAR. Use if they want the bootable slice. Skip if the laptop has no QEMU. PJRT Add / Relu (PR #84) stay research opcodes on the frozen packet — not FLOPs.
The ask
Fill DESIGN_WIN.md — opcode names, SID budget, memory spaces, queue count, event/fence scope — against frozen IreeHalCmd. If the HAL contract matches the chip, that is the conversation. If it does not, a written no with reasons is a good outcome. Not a logo. Not an NDA draft in this meeting. Not NVIDIA. Calendar: YEAR_AHEAD · printable one-pager.
$ make diligence-demo [event] SoftChipletSync create/record/wait [event] fence counts chiplet-local vs package [softcct] package fences= [greenctx] interference partitioned 70/30 vs unpartitioned [diligence] host Path B sealed $ make red-team [redteam] fabric-class admit/refuse [redteam] ATOMIC_ADD accept/reject [softsfi] heap=refused [redteam] sealed $ make partner-hello && make mp-shim [partner-hello] ok [mp-shim] ok $ make design-win-standin freeze-v1 · IREE HAL stand-in (not a partner)
07 — Two-year roadmap
Next twelve months: YEAR_AHEAD (Sep 2026 → Sep 2027). SIX_MONTH_FORWARD is the closed Sep → Mar record — M0–M6 landed, do not re-schedule. Horizon: TWO_YEAR_PLAN. Path B is canonical. Soft SMMU is software. We do not tape out chips. The landed Year-1 / Months 1–5 / H2 2026 cards stay below.
Next 12 months · YEAR_AHEAD
Sell the demos we can run. Do not invent silicon. Opcode v2 only when a real partner brings a table (dual ACCEL.md + ireecp + host pack/unpack). One port only if path B doorbell fails a partner ask. Full MicroPerceptron port stays optional / later. YEAR_AHEAD.md · this page #sell.
Sell pack · freeze-v1 · M0–M6
CapTable / REVOKE if alias
Real opcode list, or stay v1
Signed list or ABI freeze
/init over syscall / sysretqemu/; make accel-test)CpCmd + Soft SMMU SID + IRQ/fence (software model, not a silicon driver)-smp 2, INIT-SIPI, per-CPU gs; APs kernel-onlySYS_CLONE=10 shares the caller aspace (not Linux clone / fork)mmap — additive SYS_MMAP=11 anonymous 4 KiB USER pages (not POSIX mmap; no file / no MAP_SHARED)opens /init (and x86 /probe); seeded from x86 virtio-blk (AETHFS01) or embedded blobs; not POSIXrevoke_in; not a seL4 CNode; no user syscall/init over ecall / sret (Sv39 isolate; in-kernel SoftNPU; PLIC software doorbell, not virtio-mmio; not product-class)/init over svc / eret (TTBR0 isolate; in-kernel SoftNPU; not GICv3 / virtio-mmio; not product-class)ffffffff80000000+PA; trampoline still copies to physical 0x400000.rela.dyn applied at boot; unused link-time alias unmappedmov cr3 when CPUID advertises it; stock qemu64 often full-flushes/init and /probe share a RO template until write fault (not fork)IreeShapedCp (PR #38) — IREE HAL-shaped AccelDevice, backend = 4; frozen IreeHalCmd from public IREE HAL nouns; M1 spine; not a signed vendor; SoftNPU path B and Soft-CP stayIreeHalCmd freeze (PR #45) — ACCEL.md wording locked so PJRT hosts pack that packet onlyhost/aether-pjrt packs frozen IreeHalCmd onto IreeShapedCp; not a plugin, not a vendor runtime; SoftNPU stays the path-B qemu demoSIX_MONTH_PLAN (PR #44) — Falsifier spine is opcodes → PJRT; OS-completeness M3–M4 clock stays killed; Year-1 + hardening are not re-scheduledChipletTaskScope stub (PR #40); D CDT property tests (PR #39; not a proof); E TypedWindow pin stub (PR #42; CXL.mem stays killed)IreeShapedCp stays a single mailbox. Path B SoftNPU / make qemu unchangedmake smmu-bringup / CI scripts. Software tables only; not a Soft-SMMU redo; not hardware SMMU; not a half-year pillarsubmit_scoped run a producer/consumer across two fake chiplets. Host tests measure fence counts. Not a Vulkan timeline, not UCIe, not ChipletFleet placement, not a multi-chiplet latency claim. SID-at-submit, XQueue, and path-B SoftNPU staymake qemu unchanged. IreeShapedCp stays a single mailboxload / store / add / dma / SID-proved atomic_add); bounds verifier against the SID-mapped Soft-SMMU window; two tenants SFI+SID. GPU-AToLL-shaped. Not a verified multi-tenant GPU, not NVRTC, not confidential GPU. Tensor stays Unmodeled. Heap/alloc is a named refuse. atomic_add is a sequential toy RMW, not a hardware atomic. No new syscallsubmit_xqueue_noi refuses when projected IS > 1.5. Light 400+400 admits (IS = 1.0); heavy 800+800 refuses the second tenant (IS = 1.6). PARL / NoI inspiration. Admit control, not topology synthesis, not UniCNet. Integer throughput units, not FLOPs. Default submit_xqueue stays ungated. Path B SoftNPU / make qemu unchanged. Fabric-class tags (PR #75) deepen this same admit — see the 2027 H1 slices cardmemcpy / saxpy; scale hot-adds without restart (epoch / launches unchanged). SID-at-submit + SoftCmdFirewall copy-then-validate still gate the packed image. Own IR only. GPUOS / Mirage MPK inspiration — not NVRTC / CUDA, not a full LLM compiler. Distinct from landed OperatorKernelHandlemake accel-test / PathABar). Kernel VirtioAccelMmio BAR0 bind still optional. -device aether-accel model landed. Stock QEMU stays path B. CI does not rebuild QEMU. Soft SMMU stays softwarehost/aether-pjrt Event create / record / wait on existing SoftChipletSync chiplet-local or package-scope fences. Job Events from execute stay on the partition CP-shaped Timeline. Wait-before-record / wait-before-complete is NotReady. Wrong-SID still refuses. TRANSFER-only images still Fault. IreeHalCmd offsets unchanged. Not a new packet, not a PJRT plugin, not GetPjRtApi / XLA / iree_hal_driver_t, not a CUDA stream, not a silicon fence. Path B / make qemu unchangedAccelJobDesc.flow from collective type (tree → Gradient, ring → Curl, persistent → Harmonic). SoftNoI admit_class: Curl needs reserved ring capacity (400). Same light demand admits as Gradient/Harmonic and refuses the second Curl (RingExhausted) even when projected IS is still 1.0. Not a CpCmd / vendor header, not FlowHodgeQuota DMA-header theater, not topology synth, not UniCNet. Default submit_xqueue stays ungated. Integer counters only, not FLOPsatomic_add (PR #73) — one honest side-effect: SID-proved toy word fetch-add (rd = mem[rs+imm]; mem[rs+imm] += rt, wrapping u32). In-range accept; cross-tenant Oob. Tensor stays Unmodeled. Heap/alloc is a named Unmodeled refuse ([softsfi] heap=refused), not a bump allocator. Sequential software RMW — not a coherent hardware atomic, not NVVM, not “safe kernels.” Path B SoftNPU / make qemu unchangedmake red-team) → packet (make partner-hello / doorbell) → wait (Event) → admit class (fabric-class) → sandbox hole (ATOMIC_ADD). Commands that exist. Not a new kernel milestonePathABar + make accel-test; wrong SID aborts. Path B / make qemu stays canonical. Not a QEMU rebuild in default CI. Kernel PCI bind still optional. Soft SMMU stays softwareSell pack · freeze-v1
CapTable only if alias
Real opcode list, or stay v1
Signed list or ABI freeze
atomic_add (tensor Unmodeled), SoftSFI heap named refuse (PR #80; not a bump allocator), thin MicroPerceptron-shaped IreeHalCmd consumer (PR #83; host/aether-mp-shim; inspiration name only; secondary to PJRT; not a port), PJRT shim Add / Relu on the frozen packet (PR #84; offsets unchanged), SoftGreenCtx interference leave-behind (M3; [greenctx] interference partitioned 70/30 vs unpartitioned; not HW MIG), SoftCCT/Event fence-count polish (M4; [softcct] package fences= + [event] fence counts; not latency), M5–M6 freeze-v1 (research IreeHalCmd v1 stays; no real partner table; make design-win-standin is the freeze proof). Week 1 call pack walks those slices. Gated leftover: per-task CapTable / SYS_REVOKE only if two shim tenants alias slots (gate still closed — PJRT / MP shims do not mint World CPtrs). Port skipped (path B doorbell has not failed a partner ask). Opcode v2 only if a real partner table forces a dual update of ACCEL.md + ireecp + host pack/unpack. 2028 is still a signed opcode list or a research ABI freeze — not tape-out, not this year’s climaxPartnerNpuStub stays a labeled no-op until a signed list retires itmake accel-test). Kernel VirtioAccelMmio PCI BAR0 bind is still optional. Stock QEMU stays path B. Default CI does not rebuild QEMUAccelDevice / AccelJobDesc ABI stays frozen. The partner-shaped packet landed as IreeShapedCp — not a signed vendorPartnerNpuStub stays a labeled sketch — no second-stub enrichment theaterfork / POSIX mmap — growable anonymous SYS_MMAP=11 landed; no file-backed / MAP_SHARED / new aspaceCapTable; no SYS_REVOKE/init + /probe; kernel is static-PIE; user ELFs stay non-PIE; no user open/readTypedWindow is an exploration digest pin stub (PR #42; SID refuse), not siliconAccelDeviceACCEL.md / DILIGENCE.md / YEAR_AHEAD.md / SIX_MONTH_PLAN.md / MONTH5_PLAN.md / TWO_YEAR_PLAN.md / bringup/BRINGUP.md stay the leave-behind08 — Status / proof
A working QEMU vertical slice — not a product kernel, not tape-out. Year-1, the x86 hardening stack, the Month 1–2 opcode / PJRT spine, Month 3–4 SID / XQueue, SoftChipletSync scoped timelines, the Month 5 exploration digests, the H2 2026 explorations (PASID/SVA, OperatorInject, SoftNoI-IS), three 2027 H1 deepen slices (Event wait, fabric-class SoftNoI, SoftSFI atomic_add), and M5–M6 freeze-v1 (research IreeHalCmd v1 stays; diligence refresh; port skipped) have landed. Next twelve months: YEAR_AHEAD. Week 1 call pack walks those slices. Path-A Soft-SMMU IOVA host proof landed (wrong SID aborts); kernel PCI bind still optional. Path B / make qemu stays canonical. Host tests execute the same run_boot_demo() the guest prints. Gated leftovers: CapTable / SYS_REVOKE only if two shim tenants alias slots; guest PCI BAR0 bind; hardware SMMU on partner silicon. M5–M6 is done — not still open. Site refresh is not a milestone.
$ make qemu [init] ring-3 /init (static ELF64 non-PIE @ 0x2000000) [sched] kthread-B tick=… FABRIC IPC + TENSOR ARENA + ACCEL JOB COMPLETE CUT BIND + HODGE FLOW CLASS ENFORCED TYPED SPACE + ACTIVITY ENDPOINT + FENCE-ORDERED JOB RING-3 /init VIA SYSCALL/SYSRET Also: make test · make qemu-riscv · make qemu-aarch64 · make accel-test CI: cargo test + accel-test + qemu-ci + qemu-smp-ci + qemu-riscv-ci + qemu-aarch64-ci
Caps, fabric, arenas, SoftNPU (I32 + software F16/F32), in-kernel virtqueue BAR (path B + golden MMIO trace), optional path-A QEMU device model (Soft-SMMU IOVA / wrong-SID host proof; not a guest PCI bind), Soft-CP (packed CpCmd + SET_SID-at-submit + two software XQueues, queue-boundary only + SoftGreenCtx SM/WQ 70/30 partitions + SoftCmdFirewall copy-then-validate + SoftSFI toy bytecode sandbox + OperatorInject resident worker + SoftNoI-IS admit + PASID/SVA mm↔SSID), IreeShapedCp (IREE HAL packet, backend 4; not a vendor), host PJRT/IREE-shaped shim (aether-pjrt packs frozen IreeHalCmd → IreeShapedCp; Event create/record/wait on existing SoftChipletSync fences; SoftNPU is the qemu demo; not a plugin), Soft SMMU (STE→CD→S1/S2 + ATS invalidate + dump/replay kit), SpectralCut, Laplacian n≤32, Hodge, OperatorKernelHandle, SparsifiedCollective, fence/timeline, SoftChipletSync (scoped wave / CU / chiplet / package timelines; not UCIe), SoftCCT (last-writer chiplet elision; not a coherence protocol), SoftGreenCtx (fake SM/WQ partitions; memcpy interference vs unpartitioned; migrate-to-yield without SID change; not MIG), SoftCmdFirewall (copy-then-validate; not confidential GPU), SoftSFI (toy ISA bounds + SID-proved atomic_add; tensor/heap Unmodeled; not a verified multi-tenant GPU), OperatorInject (resident worker + hot-add scale; not NVRTC), SoftNoI-IS (fake NoI IS admit; fabric-class tree/ring/persistent tag; refuse IS > 1.5 or Curl ring-exhaust; not topology synth), PASID/SVA (mm↔SSID bind; Soft-CP DMA via process VA; unmap→SSID TLB; not ARM SVA / CUDA UVA / hardware SMMU), Week 1 call pack (isolation → packet → wait → admit class → sandbox hole), Multiboot mmap, x86 ring-3, RISC-V U-mode /init + PLIC SoftNPU doorbell, aarch64 EL0 /init + TTBR0 isolate, in-kernel ramfs for /init (virtio-blk or embedded), SYS_CLONE, SYS_MMAP, SMP smoke, per-task PML4, small cap CDT, higher-half + KASLR + PIE + KPTI + PCID + one-page COW + identity teardown.
cargo test --workspace, Soft SMMU dump/replay (scripts/smmu_{dump,replay}.py --check), make accel-test (path-A Soft-SMMU IOVA / wrong-SID; no QEMU rebuild), make qemu-ci, make qemu-blk-ci, make qemu-pcid-ci, make qemu-nopcid-ci, make qemu-smp-ci, make qemu-riscv-ci, make qemu-aarch64-ci.
No hardware SMMU (Soft SMMU is a deepened software STE→CD→S1/S2 walk + ATS invalidate + dump/replay kit, not silicon; partner silicon still required). Soft-CP is a software model, not a silicon driver: XQueue is two software queues with queue-boundary suspend/resume, not a silicon queuing unit and not an XSched LD_PRELOAD shim; SET_SID-at-submit is Host1x-shaped, not a Tegra driver; SoftGreenCtx is a fake SM/WQ partition, not HW MIG, not a BAR firewall, not a CUDA driver, and not a DetShare port; SoftCmdFirewall is copy-then-validate, not confidential GPU and not SEC2; SoftSFI is a toy bytecode sandbox, not a verified multi-tenant GPU and not NVRTC — atomic_add is a sequential SID-proved toy RMW, not a hardware atomic and not “safe kernels.” OperatorInject is a resident worker + versioned op table, not NVRTC, not CUDA, not a full LLM compiler, and not NVIDIA. SoftNoI-IS is runtime admit on a fake shared NoI (PARL/NoI Interference Score) plus a software fabric-class tag, not topology synthesis and not UniCNet. PASID/SVA is software bind + SSID TLB invalidate, not ARM SVA, not PCIe PASID/PRI, not CUDA UVA, and not hardware SMMU. IreeShapedCp is an IREE HAL-shaped software packet, not an IREE runtime and not a signed vendor. aether-pjrt is a host contract that packs frozen IreeHalCmd onto IreeShapedCp; Event create/record/wait is a research noun over existing SoftChipletSync fences, not a PJRT plugin / IREE HAL driver / vendor runtime / CUDA stream. SoftChipletSync is chiplet-local fence domains on the existing seq / wait / complete model, not UCIe sync, not a Vulkan timeline, not ChipletFleet, and not a multi-chiplet latency claim. SoftCCT is last-writer-chiplet elision on that object (CPElide inspiration), not a full coherence protocol and not a Vulkan / ROCm product. The four Month 5 digests are not one product isolation spine. PASID/SVA, OperatorInject, and SoftNoI-IS landed as H2 2026 explorations — not Month 5, not hardware. Event wait, fabric-class SoftNoI, and SoftSFI atomic_add landed as 2027 H1 deepen slices — not a new calendar, not tape-out. Week 1 call pack walks those slices; it is not a new isolator. SMP is a QEMU -smp 2 smoke, not a product scheduler. Per-task PML4 is a documented x86 subset. Higher-half is ffffffff80000000+PA plus a boot-time KASLR slide (dual-map; PIE .rela.dyn applied; unused alias unmapped). KPTI user CR3 drops HH and the identity DMA window (4 KiB trampoline; not Meltdown-complete). PCID tags those CR3 switches when CPUID advertises it; stock qemu64 often full-flushes. Kernel CR3 keeps SIPI / mailbox / trampoline / virtio-blk / APIC islands; SoftNPU is Soft SMMU + HH. Cap CDT is a small revoke_in tree, not a seL4 CNode; no user syscall. VirtIO-Accel path B is the in-kernel BAR (canonical stock-QEMU demo + golden MMIO trace). Path A is an optional in-tree QEMU device model, not an upstream virtio tree. Soft-SMMU IOVA on path-A BAR DMA is a host proof (wrong SID aborts); the guest does not yet bind PCI BAR0. Default CI does not rebuild QEMU. RISC-V U-mode /init is a documented subset (PLIC software doorbell; no virtio-mmio). aarch64 EL0 /init is a documented subset (TTBR0 isolate; no GICv3 / virtio-mmio). Neither port is product-class. No CXL.mem window. No FLOP benchmarks. No vendor deal. No silicon bring-up booked.
Research leave-behind. One-page sell pack is SELL_PACK (this page #sell). Partner demos this quarter: SELL_GOALS. Non-claims live in DILIGENCE. The 8-minute call script is PITCH (this page #pitch). Week 1 20-minute pack is WEEK1_CALL — wired to Event wait, fabric-class admit, SoftSFI ATOMIC_ADD, partner-hello, and doorbell. M1–M4 (opcodes, PJRT, XQueue, SID-at-submit) and SoftChipletSync are in SIX_MONTH_PLAN. The four Month 5 digests (SoftGreenCtx, SoftCmdFirewall, SoftCCT, SoftSFI) are in MONTH5_PLAN. H2 2026 explorations (PASID/SVA, OperatorInject, SoftNoI-IS) landed; Event wait, fabric-class SoftNoI, and SoftSFI atomic_add landed as 2027 H1 deepen slices. M5–M6 freeze-v1 named (research IreeHalCmd v1 stays; port skipped). Next-twelve-month calendar is YEAR_AHEAD (Sep 2026 → Sep 2027; this page #roadmap). Closed Sep → Mar record is SIX_MONTH_FORWARD. Horizon is TWO_YEAR_PLAN (Sep 2026 → Sep 2028; 2028 is a partner handoff or a research ABI freeze, not tape-out). Path-A Soft-SMMU IOVA host proof landed; kernel PCI bind still optional. Deep-dive agenda is a script, not a meeting that happened.
09 — 8-minute pitch
Read this on a live call. One-page leave-behind: SELL_PACK.md (this page #sell). Next-year calendar: YEAR_AHEAD.md (this page #roadmap). Full presenter notes in docs/PITCH.md. Week 1 20-minute pack: WEEK1_CALL.md. Proof commands that exist: make diligence-demo, make red-team, make partner-hello, make mp-shim, make design-win-standin, make accel-test. What to show next: isolation → packet → wait → admit class → sandbox hole. Call worksheet: DESIGN_WIN.md.
Multi-tenant accelerator packages need a fabric kernel, not a bigger Linux driver. ioctl + a userspace runtime is already strained on a discrete GPU; it fails on a mesh of CPU, NPU, GPU, and ASIC tiles. Weights and KV are secrets. Isolation — blast radius, who can name a tile or a stream — is the product. FLOPs stay in the compiler.
Three frozen surfaces: IreeHalCmd (96-byte LE, magic 0xAE7E1EE1, backend = 4), PJRT-shaped host nouns in aether-pjrt (Event create/record/wait on existing SoftChipletSync fences; not GetPjRtApi, not a plugin), Soft SMMU SID-at-submit (Host1x-shaped SET_SID at the job head). Research opcodes, public IREE HAL nouns — not a signed vendor. Soft SMMU is software. PartnerNpuStub is a leftover no-op.
On a call, run make diligence-demo (host Path B; greps examples/diligence-demo/expected.txt) then make red-team ([redteam] attack=… result=refused). Optional: make qemu, make design-win-check, make accel-test (path-A Soft-SMMU IOVA / wrong-SID; no QEMU rebuild). Doorbell second consumer is cargo run -p aether-accel-client — not a Makefile target. What to show next: isolation (make red-team) → packet (make partner-hello / doorbell) → wait (Event) → admit class (fabric-class) → sandbox hole (ATOMIC_ADD).
No NVIDIA partnership. No FLOPs. No tape-out. No hardware SMMU. No MIG-class isolation (SoftGreenCtx is a fake 70/30 SM/WQ partition). No confidential GPU (SoftCmdFirewall is copy-then-validate). If they push, stop. Non-claims live in DILIGENCE.
YEAR_AHEAD is the next twelve months (sell the demos; wait for a real table). TWO_YEAR_PLAN: 2028 is a signed opcode list from a real partner CP, or a research ABI freeze — horizon, not this year’s climax. Not a foundry date. Ask: bring your opcode table. Fill DESIGN_WIN.md — or a written no. Not a logo.
$ make diligence-demo # host Path B; greps expected.txt $ make red-team # named attacks refused $ make partner-hello # frozen IreeHalCmd; no QEMU $ make mp-shim # MP-shaped thin consumer (not a port) $ make design-win-standin # freeze-v1 · IREE HAL stand-in $ make qemu # path-B guest serial (optional on a call) $ make accel-test # path-A IOVA / wrong-SID (optional; no QEMU rebuild) [event] SoftChipletSync create/record/wait [event] fence counts chiplet-local vs package [softcct] package fences= [greenctx] interference partitioned 70/30 vs unpartitioned [redteam] fabric-class admit/refuse [redteam] ATOMIC_ADD accept/reject [softsfi] heap=refused [redteam] attack=wrong-sid-crosscut result=refused [diligence] host Path B sealed [redteam] sealed