2026-07-19

Weekly open source: Node.js in the sandbox, byte-identical FTS5, and a real AV1 encoder

After last week's 3,000 commits, this week came in at about 850. The work went deeper into the projects that started recently. nixvm, the syscall-level Linux sandbox, got Node.js running. graphitesql made its full-text index write the same bytes SQLite would. z3rs started replacing its batch pipeline with a real DPLL(T) search. In the media stack, the AV1 encoder picked up most of the remaining compound and screen-content tools, and the ProRes codec was declared complete.

nixvm: Node.js runs, and the sandbox gets stricter

nixvm runs a stock Alpine userland with no guest kernel: the guest's syscalls trap into a Rust kernel. Last week ended with a recorded limitation: Node.js loaded but its event loop busy-spun. This week fixed that. File-descriptor tables are now shared across threads, futex requeue and timer wakeups landed, and the commit reads "node runs". Then it ran on the software x86-64 interpreter too. That took the SSE operations V8's JIT emits (PALIGNR, PTEST and others), syscall semantics that match the hardware (RCX ← RIP, R11 ← RFLAGS), and fixes to flags and decoding. The commit for that step says "TurboFan runs": V8's optimizing JIT generating x86-64 code that nixvm then interprets.

The rest of the week tightened the sandbox:

  • W^X. The interpreter now enforces NX on instruction fetch. The KVM backend builds guest page tables from the protection map, so a writable page can't also be executed.
  • Signals. SIGSEGV, SIGILL and SIGBUS are delivered synchronously to guest handlers. KVM gained accurate page-fault handling and AVX state.
  • Scheduling. Real time-based preemption on both backends. KVM_RUN runs lockless for true parallelism, and syscalls are now serviced in place under a big kernel lock instead of being handed off on every call.
  • Floating point. A dependency-free soft-float with true 80-bit x87 and MXCSR directed rounding, plus the x87 transcendentals (FSIN, FYL2X, FPREM, …).

graphitesql: byte-identical FTS5

graphitesql (82 commits, releases v0.1.1 through v0.1.3) focused on a single goal: making FTS5 writes byte-identical to what SQLite produces. The commits show the investigation step by step. A divergence under delete-heavy load was first characterized as data-sensitive, then traced to missing automerge, then pinned to the trigger threshold (FTS5_WORK_UNIT=64). Automerge scheduling was implemented. After that came byte-identical results for delete/update inside transactions, savepoints, prefix-index spanning segments, the "double-cascade" crisis merge, and detail=none/detail=column tombstones. An integrity_check now detects a malformed inverted index.

FTS5 churn also exposed b-tree weaknesses, which were fixed. Page splitting is now robust under large-key churn, siblings are rebalanced on split, the reserved page bytes are respected, and empty leaves are compacted after INSERT OR REPLACE and cascading deletes. Further fixes ported SQLite's WAL checkpoint modes and hot-journal recovery, added whole-file page accounting to the integrity check, and added a process-kill crash-resilience suite that runs on a schedule.

z3rs: toward an online DPLL(T)

z3rs kept running its differential sweep against Z3's regression corpus. Many commits close a specific issue from that corpus, and several fix wrong verdicts, two of them in the CHC engines. The structural change is at the end of the week. The first online DPLL(T) pieces landed: EUF conflict cores, Farkas conflict cores for arithmetic, a verified equality-propagation mechanism, and a theory-propagation hook inside the SAT search loop. This is the architecture Z3 itself uses, where theories interact with the search instead of being checked after it.

Alongside that: ports of Z3's bv_rewriter and array_rewriter rules, complete uninterpreted-function interpretations in get-model, nonlinear refutation by polynomial saturation, and a parser that reports errors the way z3 does, recovers per command, and supports :print-success.

oxideav-av1: B-pyramids and screen content

The oxideav-av1 encoder, which became a real encoder last week, added most of the remaining AV1 coding tools. Every new tool comes with a self-encoded conformance stream:

  • Reference structure: order hints, skip-mode, reference-frame motion vectors, and B-pyramid GOPs with backward references, out-of-order coding and show_existing_frame.
  • Compound prediction: wedge and difference-weighted masked compound, distance-weighted (jnt-comp) compound, and smooth and wedge inter-intra blends.
  • Partitions: the extended T-shapes and four-strip shapes, plus sub-8×8 inter and intra blocks.
  • Screen content: luma and chroma palettes chosen by k-means clustering, and intra-block-copy search on keyframes.
  • Segmentation: per-segment quantizers on P-frames.

The conformance corpus grew from 50 to 64 streams, and v0.1.15 was released.

oxideav-prores: complete

oxideav-prores, the clean-room Apple ProRes codec, closed its remaining gaps in both directions. That meant alpha-channel encoding, typed 4:2:2 and 4:4:4 alpha surfaces, 16-bit and deep (10/12/16-bit) alpha formats, and a tighter rate-control search. Each piece was checked black-box against reference encodes and decodes. The README dropped its status section ("the codec is complete"), and the crate was released as v0.1.0.

Also this week

  • intlrs, the pure-Rust ICU analog, added Umm al-Qura, Persian, Chinese and Korean Dangi calendars, Japanese-era formatting, formatRange, dictionary word segmentation for Thai, Khmer, Burmese and CJK, and pinyin, stroke and zhuyin collation for Chinese (v0.5.1).
  • anydcode added camera detection for Aztec, Micro QR, rMQR and MicroPDF417, 1D decoding at any rotation, and printed App Clip Code detection (v0.1.2).
  • TibaneApp became multilingual (English, French, Japanese, Portuguese), with a reworked Home screen and swap balances shown in USD. libwallet's Rust port reached request approval and object routing, and its web3 provider is now restricted to same-origin frames.

Next week

nixvm moves from "node runs" toward running node's package installs. graphitesql applies the same byte-for-byte approach beyond FTS5. z3rs builds the DPLL(T) core out into full theory propagation. The AV1 encoder keeps going through the spec.