Weekly open source: nixvm fills in POSIX, kataan down to 12 failures, catcard grows a wallet
The quietest week in a while, at about 300 commits, and a
detail-oriented one. The syscall-emulating sandbox spent it making
Linux behave the way programs expect, down to which poll bits a
closed pipe reports. The JavaScript engine went after the last
handful of test262 failures and the performance cliffs behind them.
The week-old Coldcard firmware went from scaffold to a Bitcoin
library with a screen, a keypad and a settings store.
nixvm: the corners of Linux
nixvm runs a real Alpine userland without a guest kernel. Guest syscalls trap out to a "kernel" written in Rust, in the gVisor style. This week's 31 commits were almost all about faithfulness, the kind of behaviour that tools only notice when it's wrong:
- Signals.
SIGPIPEon writes to a pipe or socket with no reader,rt_sigtimedwait(sosigwait/sigtimedwaitwork),sigqueuedelivery, a workingsignalfd(it had been a stub that never became readable), the signal mask inppoll/pselect6/epoll_pwait, and signal deaths reported asWIFSIGNALEDinstead ofWIFEXITED. - Time. A real
nanosleep, per-task CPU accounting that agrees acrossclock_gettime,getrusageandtimes, andalarm/setitimerdeliveringSIGALRM. - Processes. POSIX process-group targeting for
kill, the pid filter and child rusage inwait4/waitid, and/proc/self/{exe,cwd,root,comm,cmdline,stat,status,fd}reporting the live task. The CPU count now reports nixvm's own cores instead of leaking the host's through sysfs. - Files and IPC.
O_APPEND,chmodandutimensat(these had been no-ops),FD_CLOEXEC,SEEK_DATA/SEEK_HOLE,EPOLLONESHOT, non-blocking pipe reads returningEAGAIN, andAF_UNIXdatagram sockets for syslog's/dev/log.
kataan: 12 known failures
kataan (30 commits)
went from 99.93% to 99.98% of test262: 51,878 of 51,890, 12
known failures. A roadmap entry also records why each of the last
three failures "is not ours". The fixes went deep: program text is
now carried as WTF-8 so lone surrogates survive parsing (+9), and
@@replace concatenates WTF-8 canonically. Source-phase imports
also landed. Intl picked up per-calendar eras and month names,
formatRange routed through intl's range support, and intl
0.6.1's minimumGroupingDigits (+6).
The other half of the week was performance. Many string and array
operations had a hidden O(n) per call. slice, substring,
indexOf, at, push and delete all had one, built-in
iterators copied their buffer on every step, and every property
access on a string materialized it. The fixes are rope-joined
concat and template literals, O(1) indexed reads with an ASCII
fast path, and in-place rope flattening. Each one is logged in the
roadmap as it closed.
catcard: from scaffold to a Bitcoin stack
catcard, the clean-room Rust firmware for Coldcard hardware started last Sunday, spent its first full week (17 commits) on the parts a wallet can't do without, each as a separate host-testable crate:
- Keys and encodings: BIP-39 mnemonics and seed derivation, BIP-32 HD derivation over secp256k1, Base58Check, and Bech32 and Bech32m.
- Addresses: P2PKH, P2SH-P2WPKH, P2WPKH and P2TR.
- Signing: deterministic ECDSA and BIP-340 Schnorr, transaction parsing, and the BIP-143 sighash.
- Hardware: an SPI master, an SSD1306 display driver with an 8×8 font, debounced keypad scanning with a self-test that echoes keys, an SPI-NOR flash driver, and an authenticated, power-fail-safe settings store on top of it.
One small commit says a lot about the approach: a panic handler "that does not leave secrets in RAM". A hardware validation plan was also written up, ahead of running any of this on a device.
decryptd: a v5 kernel ABI
decryptd, the GPU
worker for a distributed-compute project, shipped nine releases
(0.1.31 → 0.1.39). It picked up support for the v4 kernel ABI,
then replaced it with v5 and dropped every older one. The worker
now asks the compiled cubin what it is instead of reading a
manifest, takes its work space from the platform instead of the
job blob, and sizes launches to fit the output buffer. A run of
fixes followed the platform's axis-order convention, and one notes
that a brute-force box can exceed 2^128, so its size is no longer
computed.
graphitesql: SQLite's function library
graphitesql, the
pure-Rust SQLite (14 commits), filled in the extension functions
real databases use: median / percentile / percentile_cont /
percentile_disc, base64(), the decimal arbitrary-precision
functions, regexp() to back X REGEXP Y, sha1() and sha3(),
and the ieee754 set. sin/cos/tan got Payne–Hanek range
reduction for large arguments. Multi-constraint ON CONFLICT now
resolves in sqlite's own check order, and the C API gained 64-bit
bind/result variants and zeroblob helpers.
OxideAV: encoders close out
- oxideav-mpeg4video built its MPEG-4 Part 2 encoder in one sweep: a bit writer, forward DCT and quantisers, VLC emitters, an I-VOP encoder, then P-VOPs with motion estimation. A reference decoder reproduces its I+P streams bit-exact in a black-box cross-check. The DCT kernels were also made byte-deterministic across platforms.
- oxideav-opus landed the CELT pitch pre-filter (the inverse of the decoder's post-filter), which the README calls the end of the encoder arc. SILK-layer rate control, VBR arms and stereo Hybrid encoding came before it.
- oxideav-pixfmt reached matrix closure: all 3,660 ordered conversion pairs across its 61-format universe now resolve.
- oxideav-mkv applies Matroska TrackOperation, joining blocks into virtual tracks and combining stereo-3D planes (RFC 9559 §18.8), with seeking on the virtual track.
Also this week
- z3rs closed more of its corpus: trig argument reduction by periodicity, π recognition, FP constant folding under any rounding mode, and a fix for a latent wrong-unsat on nonlinear closed-universal negations.
- fullrust ported its libc-free toolchain overlay through every Rust release from 1.90 to 1.95 in one week, and now self-tests its GitHub Action.
- oxideav-bitstream gained a complete H.266 VPS walk with a byte-exact writer, plus a VP9 keyframe header writer.
- oxideav-embroidery
widened to PHB, VIP, the plain-text
.colcompanion and the Singer XXX header.
Next week
nixvm keeps closing semantic gaps as real workloads find them, and kataan's remaining failures are now a short list. catcard's validation plan points at real hardware next. OxideAV keeps moving codec by codec toward byte-exact encode and conformance.