release

BXM 0.1.0 Launches With Canon and Memo, Two Open Source Tools for Repeatable Results

BXM 0.1.0 is out. It’s two small command-line tools in one repository, open source under the Apache License 2.0, with builds for Linux, macOS and Windows.

They share one idea. Same input, same bytes, same result. Canon applies it to data and Memo applies it to work.

BXM Canon is a binary encoding with exactly one valid form for every value. Two programs that encode the same data get the same bytes, whatever order they wrote the keys in and however they spelled the numbers. A hash or a signature taken on one machine holds on every other. The decoder refuses any byte string that isn’t the one encoding of its value, so a second spelling can’t sneak in through the back door.

BXM Canon and BXM Memo side by side: two JSON files with the same data hash the same, and a build step that missed once restores 200 files in 61 ms the next time

BXM Memo skips a command when its inputs haven’t changed. Put bxm-memo run in front of a build step, list what it reads and writes, and the second time round it puts the outputs back instead of doing the work. When it has to run, it tells you which input changed.

What’s in 0.1.0

Canon comes as a Rust library, a bxm-canon command and a C API, so any language with a C interface can call the one implementation instead of writing its own. The format spec is two pages, and it ships with 60 conformance vectors: values with their exact bytes, and byte strings that every decoder must reject.

Memo is a single Go binary with nothing to install around it. It takes files, directories and ** patterns as inputs, explains its misses, and keeps its cache safe to share between many processes at once.

Both tools were tested against their main promise before release. The Canon decoder took 2,000,000 random and damaged byte strings and never accepted a second form of any value. Memo was run by 16 processes against one cache, killed mid-run, fed a damaged cache and given inputs that changed under it, and it never left a wrong or half-restored output. The details.

Where to Start

What’s Next

Canon packages for JavaScript, built as WebAssembly from the same Rust core, and for Python. For Memo, CI runners can already share results by keeping the cache folder between runs, or several machines can point at one shared folder.

The code is on GitHub. BXM is a SoftDevStudio.com project.