Weekly open source: an emulator goes from a 6502 to booting Linux, and a coding agent on the stack
A heavy week, and most of it went into one repository. rsemu, the emulator started last Sunday, spent its first full week climbing from a single 6502 to boards that boot unmodified Linux kernels on three architectures. Around it, the stack's lower layers kept tightening: purecrypto took a security-audit sweep, and a new encoding crate, charcode, let fstool — which rsemu uses for its disks — drop most of its third-party dependencies. And atelier began: a small AI coding agent assembled out of the stack's own pieces.
rsemu: from a 6502 to Linux
rsemu is the pure-Rust
emulator that builds its framework first and describes machines in
.machine files. This week (over 600 commits) the framework got
put to work, and its README at week's end lists ten CPU cores
with a measured conformance result for each where a public corpus
exists: the 6502 at 2,560,000 / 2,560,000 SingleStepTests vectors
including bus traces, the Z80 at 1,604,000 / 1,604,000 plus
zexall 67/67, RV64GC at 409/409 riscv-tests and 181/181
riscv-arch-test against the Sail model, the 8086/8088, a MIPS
R3000A at 55,000 / 55,000, the 68000 passing all 124 instruction
files, the Game Boy's SM83, ARMv5TE, ARMv7E-M and AArch64 — the
last against a suite rsemu builds itself, because none exists to
download.
On those cores, 34 machine files:
- Consoles — the NES (NTSC, PAL and Dendy) passes AccuracyCoin 141/141, the whole-machine accuracy test, with an empty known-failures ledger, after a long run of PPU, APU and DMA timing fixes. The Game Boy reaches blargg 12/12 and mooneye 59/66; a Sega Master System came in as the second proof that the core is generic.
- Small computers — an Apple 1 you can type at, and Ben Eater's 6502 breadboard computer running the 1976 Woz Monitor.
- Boards that boot other people's software —
riscv-virtruns OpenSBI on a device tree generated from the realized machine and boots Linux 6.12 to a shell, plus EDK2 to a UEFI shell;riscv-virt-smpbrings up two harts.arm64-virtboots a Debian arm64 kernel to busybox and mounts an ext4 root from a virtio disk. On x86,q35-linuxboots a stock Gentoo 6.6 kernel that finds generated ACPI tables and reads off an NVMe namespace,q35-uefibrings OVMF to itsShell>prompt, andpc-atboots FreeDOS 1.3 on a legacy BIOS rsemu writes itself.
Underneath, the execution engines grew too: a translation IR with
superblocks, a software TLB and an x86-64 host JIT (on the x86
core, 99.3% of a Linux boot now runs inside translated blocks), a
KVM backend that boots Linux to userspace on host silicon, a
user-mode runner that executes static and glibc Linux binaries —
SQLite, Lua and coreutils — and a GDB remote stub and a VNC server.
The browser demo was rebuilt in Vue 3 and now runs the PC/AT. Disk
images go through fstool, and the dependency list under
--all-features fell from 33 crates to 10 as fstool shed its own.
The roadmap also settled a question: nixvm will depend on
rsemu rather than merge into it.
purecrypto: an audit sweep, and AVX-512
purecrypto, the
no_std crypto toolkit under the whole stack, spent most of its
96 commits on hardening that reads like an audit report worked
through line by line: fresh RSA blinders per operation, rejection of
small-order Ed25519/Ed448 keys, zeroized ECDSA nonces and DRBG
state, the Lucky13 equaliser rid of its secret-sized allocation,
TLS_FALLBACK_SCSV honoured, a wildcard-SAN bypass of name
constraints closed, bounded CRL and PKCS#12 work, Falcon signature
malleability pinned, and a CLI that issues certificates with random
serials and no longer copies CSR SANs by default. QUIC gained
connection migration, 0-RTT resumption, server preferred address
and graceful close — then a round of DoS bounds. On the speed side,
AVX-512 kernels for ChaCha20 (1.9× over AVX2), BLAKE3, 16-lane
SHA-256 and 8-way Keccak, wired into the post-quantum schemes.
Released as v0.8.0 and v0.8.1, which rsurl and puressh picked up
straight away.
atelier: a coding agent from the stack's parts
atelier is "a
minimal-TUI AI coding harness written in Rust": an agent loop that
talks to OpenAI-compatible model APIs, runs tools inside a project
directory, speaks MCP, and feeds itself fresh context each turn —
git status, diff, layout, cargo check diagnostics. The interface
is deliberately small: one input line and a status strip, with
everything else appended to the terminal scrollback. It reuses the
stack — rsurl for HTTP and tomlproc for its config — and
its node tool runs JavaScript on kataan: scripts are confined
to the project directory, network access is gated, and runaway
scripts are stopped through the cooperative host interrupt that
kataan added in its v0.0.9 release this same week. Permissions
follow confinement — file tools confined to the project run without
prompting; bash, MCP tools and networked scripts ask. By week's
end it had sessions that persist and compact themselves into a
rolling summary, token-budgeted context, image input, a multiedit
tool, MCP over stdio and Streamable HTTP, and a --print headless
mode.
charcode: encodings, and a lighter fstool
charcode is
character-encoding conversion for Rust: the WHATWG Encoding
Standard — the encodings, labels and error behaviours browsers
actually use — with no dependencies, no unsafe, and no_std
support, plus an iconv-style CLI. It then went further than the
standard: because the standard deliberately maps labels like
shift_jis or big5 to supersets, charcode added the charsets
those labels actually name — Shift_JIS and EUC-JP themselves,
ISO-2022-JP, -JP-2, -KR and -CN, GB 2312, Big5, true ISO-8859-9 and
TIS-620, UTF-7, SCSU — each behind its own feature, and keeps the
browser's substitutions behind a separate lookup.
It was put to use immediately. fstool
replaced encoding_rs with charcode, dropped thiserror,
crc32fast and crc32c, moved APFS case-folding onto intl, and
switched to tomlproc: its codecs build is now seven crates, three
of them first-party (compcol, charcode, intl), with uuid the only
third-party name left.
Also this week
- teamclaude — the multi-account proxy got per-request cost accounting, copy/paste OAuth for headless machines, one bounded failover hop on rate limits or 5xx, expiry-pressure account selection, and Codex interception in MITM mode.
- kataan — v0.0.9 with
the host interrupt, plus a hundred-odd test262 fixes across
arrays, regex, builtins and the parser, and two O(n²) paths
removed (
Array.prototype.sort,for-of). - pktkit-rs — WireGuard and OpenVPN moved all their crypto onto purecrypto, dropping rustls; VLAN access/trunk ports on the L2 hub.
- nixvm — fair
virtual-runtime scheduling, real job control, setuid privilege
drops,
SCM_RIGHTSfd passing, the fullclone3flag set. - catcard — the Coldcard firmware got a boot splash with a hand-drawn cat, a font-agnostic text layer, and the PIN login sequence.
- selecard — new: reverse engineering of the discontinued Bunka Shutter SeleCard II and III garage-shutter remotes, recovered purely over the air, with Python tools for HackRF and YARD Stick One to decode and reproduce OPEN / STOP / CLOSE.
- rsurl — downloads to
anonymous temp storage, CI on the libc-free
fullrusttarget. - z3rs — a
model-constructing
nlsatsearch over QF_NRA as a CAD fallback,get-consequences, androot-objterms. - oxideav — oxideav-midi went native on MIDI 2.0 (UMP, Clip Files, MIDI-CI, per-note controllers) with SoundFont LFOs and modulators; oxideav-tiff grew its own JPEG encoder for JPEG-in-TIFF; oxideav-ac3 refined its encoder and fixed E-AC-3 broadcast decoding.
Next week
rsemu has a long list of documented stopping points — each board records where it stops, not just where it gets to — and those are the work queue, along with more of the JIT. atelier keeps working through its milestone roadmap. purecrypto and the crates that depend on it settle onto the hardened release.