Skip to content

Split the OS out to ecto/fxos; add loon run --unchecked - #94

Merged
ecto merged 1 commit into
mainfrom
claude/fxos-split
Aug 18, 2026
Merged

Split the OS out to ecto/fxos; add loon run --unchecked#94
ecto merged 1 commit into
mainfrom
claude/fxos-split

Conversation

@ecto

@ecto ecto commented Aug 18, 2026

Copy link
Copy Markdown
Owner

Stacked on #93 (merge that first — it lands the framebuffer commit this removes).

The OS moved to its own repo: https://github.com/ecto/fxos — the os/
library, the RISC-V unikernel (crates/loon-kernel, now fxk), and the
design doc, with full history via git filter-repo.

What Loon keeps

The seam: loon image and the boot-image format (eir/image.rs), pinned by
tests/boot_image.rs. That's the ABI fxos consumes. fxos depends on Loon as an
installed tool (cargo install loon-cli), not a crate — its build.rs
shells out to loon image.

What leaves

crates/loon-kernel/, os/, samples/os-handlers.oo, tests/loon_os.rs
(ported 1:1 to fxos as os/tests/*.oo with ; expect: assertions + a
dependency-free os/test.sh — all 15 pass there), tests/unikernel_boot.rs
(now fxos CI). The old design-doc path stays as a pointer.

loon run --unchecked — and why

Skips the static checker and goes straight to the VM (which still fails loudly
at runtime). Added because the split surfaced something the old harness hid:

The OS library does not pass Loon's checker. ~110 errors — heterogeneous
maps used as records ({:pid 1 :value v} vs {:pid 1 :step n} → E0207),
effect ops declared in a used module invisible to the checker (Rand has no operation int → E0402), a few infinite types. It is dynamically correct;
every demo and all 15 tests pass. tests/loon_os.rs called
eval_eir_with_base_dir directly, which only aborts on module errors, so
this was never visible. loon run os/demo-anything.oo has never worked.

The flag is the honest interim so fxos can run its suite. The checker gap is
the real bug and it belongs here — I've left it documented in
docs/plans/2026-07-01-loon-os.md rather than papering over it. Happy to take
it on next; it's not small.

Reviewer notes

  • Workspace tests, fmt, clippy all green after removal.
  • boot_image.rs comments now point at fxos's decoder.
  • CLAUDE.md updated: kernel section removed, fxos pointer added.

🤖 Generated with Claude Code

The OS — the os/ library, the RISC-V unikernel (crates/loon-kernel), and
the design doc — now lives at https://github.com/ecto/fxos, with history.
Loon keeps the seam: `loon image` and the boot-image format
(eir/image.rs), pinned by tests/boot_image.rs. That format is the ABI fxos
consumes; fxos depends on Loon as an installed tool, not a crate.

Removed here: crates/loon-kernel, os/, samples/os-handlers.oo,
tests/loon_os.rs (ported 1:1 to fxos as os/tests/*.oo + os/test.sh) and
tests/unikernel_boot.rs (now fxos CI). The old design-doc path is left as
a pointer.

`loon run --unchecked` skips the static pass and goes straight to the VM,
which still fails loudly at runtime. Added because the split surfaced that
the OS library does not pass the checker (~110 errors: heterogeneous maps
used as records, effect ops declared in a `use`d module invisible to the
checker, a few infinite types) even though it is dynamically correct — the
old Rust harness only aborted on module errors, so nobody noticed. The
flag is the honest interim; the checker gap is the real bug and stays
tracked here (docs/plans/2026-07-01-loon-os.md).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 18, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
loon Building Building Preview Aug 18, 2026 6:04pm

Request Review

@ecto
ecto merged commit 3ab5753 into main Aug 18, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant