Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

System requirements

Most Linux systems from 2018 onward need nothing beyond the install steps. This page lists the details.

Platform

RequirementWhy
Linux x86-64, glibc 2.28 or later (RHEL 8, Debian 10, Ubuntu 20.04 and newer)Supported platform for the prebuilt binaries
Linux x86-64 with glibc (x86_64-unknown-linux-gnu)Building from source; musl and other targets are refused at compile time
/proc mountedNeeded for the system sort route below; without it, those jobs sort in process, and output is written in 8 KiB blocks, even to a terminal
A writable TMPDIR (default /tmp)Temporary data for large sorted jobs

The published 0.1.0 artifacts remain Linux-only. Native development builds also admit Apple Silicon macOS 15 or later (aarch64-apple-darwin), with native checks on macOS 15 and 26. Intel macOS, older macOS versions and native Windows are outside the scope. See the development archive instructions.

macOS uses its system libraries and Fastmash’s built-in sorting with Spill. It needs no /proc, GNU coreutils or Sort supervisor. A writable temporary directory is still required for large sorted jobs. The same built-in locale rules and Numerical profile apply; native GNU results do not redefine Portable results. Missing Linux memory information does not impose a record limit.

Under an address-space limit (ulimit -v, as some batch schedulers set), Fastmash reduces the address space that its memory allocator reserves; see Address-space limits.

A few sorted (-s) jobs in the C locales, listed in Grouping and sorting, use the system sort when all of these hold: /proc is mounted and fastmash-sort-supervisor is beside fastmash; /usr/bin/sort is an executable from GNU coreutils or uutils coreutils (not BusyBox or Toybox); the field separator is ASCII; TMPDIR is writable; Linux is 5.11 or later, with pidfds and close_range allowed; and the HUP, INT and TERM signals are neither blocked nor ignored. Otherwise (for example without the supervisor or /usr/bin/sort, under nohup, for command & in a script, on an older kernel or in a restrictive container), those jobs sort inside Fastmash instead, with the same output but more slowly on large input. The system sort chooses its own buffer size and threads, as it does for GNU datamash (Fastmash’s memory policy and FASTMASH_SORT_MEMORY_BYTES apply only to its own sorting).

Locales

Fastmash has the glibc 2.43 locale rules built in, so you don’t need to install locale data. See Numbers, output and locales.

Verifying a release archive

Every release archive has a .sha256 checksum file, checked by the install steps, and a GitHub build provenance attestation:

gh attestation verify fastmash-v0.1.0-x86_64-unknown-linux-gnu.tar.gz --repo pederbe/fastmash

The published benchmarks measure these exact binaries.

Building from source

git clone https://github.com/pederbe/fastmash
cd fastmash
cargo build --release --locked
# the programs are target/release/fastmash and target/release/fastmash-sort-supervisor

To build the current development source on Apple Silicon macOS 15 or later:

MACOSX_DEPLOYMENT_TARGET=15.0 cargo build --release --locked --bin fastmash --target aarch64-apple-darwin
# the program is target/aarch64-apple-darwin/release/fastmash

The macOS build needs Rust 1.88 or later and Apple’s Command Line Tools. Installing the archive needs neither. The Linux supervisor is not a macOS runtime component.

cargo install and source builds use your own compiler and settings. They omit the prebuilt binaries’ branch-alignment tuning for some Intel processors, so their speed can differ slightly. Keep --locked: it builds with the tested dependency versions.