# Project status Champollion is a learning project, developed in the open at [dorian-zhao/champollion](https://github.com/dorian-zhao/champollion). This page is a snapshot; the repository's [design brief](https://github.com/dorian-zhao/champollion/blob/main/docs/design.md) is the source of truth, including the baseline every performance change is reported against. ## What works - **M5, done.** Multithreaded C and Go programs run under Direct mode. Alpine's busybox (pipelines, job control, subshells) and CPython 3.14 (subprocess, asyncio, multiprocessing) run unmodified against an Alpine riscv64 sysroot and match native output in the test suite. - **M6 — VM mode (route A), done criterion met, not yet declared.** riscv64 container images run on the Mac through `rvcontainer`, and Alpine and Debian roots run `busybox`, `bash`, `coreutils`, `dpkg`, `apt`, `perl`, and CPython; `apt-get update` and package installation work as well. ## Performance (October 2026) Measured on Apple silicon against native arm64, as the factor of the native runtime (lower is better): | Program | Factor of native | | --- | --- | | C | 1.5× | | n-body | 1.37× | | Lua | ~2.0× | | SQLite | 1.87× | Against `qemu-riscv64` in the same OrbStack VM: Lua 4.8× and SQLite 4.2× faster. ## Known gaps Direct mode (route B), in the order a program is likely to notice: dynamically linked programs get no persistent code cache; realtime signals do not queue; of the interval timers, only `ITIMER_REAL` works; startup costs about 0.5 ms more than a static `hello` did before the host signal thread (3.4 ms against native 1.9 ms). VM mode (route A): every `run` unpacks the image again; the Kata kernel is 6.12 while Containerization tests from 6.14.9; Linux builds linked by GNU `ld` run SQLite about 12% slower than zig-linked ones, cause unknown. ## License MIT or Apache-2.0, at your option.