7.0 KiB
M0 validation report
Development reference and historical context. For current operating instructions, use the user manual. Acceptance applies only to the source and artifacts identified in each record.
Documentation index · First build · Roadmap
This is the initial acceptance record, not a setup tutorial. Later documentation improvements do not change the build results or skips recorded here. Linked logs and artifacts are generated local files and are not included in a fresh checkout.
Validated on 2026-09-20 in /home/felis/source/fds on an x86_64 Arch Linux
Framework host, running Linux 7.2.6-arch2-1.
M0 is complete: the host bootstrapped an upstream Void build container, cross-built an aarch64 glibc XBPS package, and built a static-musl AArch64 Rust executable. M1 remains a proposal.
All project-owned documentation, source comments, diagnostics, and ongoing development context use English. The complete master plan retains its 67 numbered sections. The pinned upstream submodule has no tracked modifications.
Changes
- Added the repository skeleton, milestone instructions, master plan, architecture contracts, and build documentation.
- Pinned
vendor/void-packagesto02a3cbc132c3c4a3a9d59e9b98f517af5dd11cd1using a Git submodule andVOID_PACKAGES_COMMIT. - Added versioned, checksum-verified static XBPS host tools and a bubblewrap bootstrap workflow for ordinary Arch users.
- Added FDS overlay preparation with upstream collision and stale-copy checks.
- Added the Rust workspace, Rust 1.98.0 pin, static musl linking configuration,
dependency-free
fds-smoketest, and release settings from the plan. - Added
make bootstrap,make smoke-test,make check, package export, ELF inspection, failure-path checks, and build input manifests. - Reserved future component directories without implementing later milestones.
The initial M0 file inventory appears at the end of this report; guides added after acceptance are not included in that historical inventory.
Exact build commands
These public entry points all completed with exit status 0:
cd /home/felis/source/fds
make bootstrap
make smoke-test
make check
The underlying cross-build commands are:
cargo build --locked --offline --release \
--target aarch64-unknown-linux-musl -p fds-smoketest
export PATH="$PWD/.host/xbps/usr/bin:$PATH"
export XBPS_ARCH=x86_64
cd vendor/void-packages
./xbps-src -A x86_64 binary-bootstrap
./xbps-src -a aarch64 pkg hello
The first bootstrap created the build environment on this host. The final public command runs reused verified downloads and that environment. Large archives were prefetched from official servers with SHA-256 verification; XBPS also verified package signatures. This was not a test of a pristine clone on a second machine.
Smoke-test output
Actual excerpts from out/logs/smoke-test.log:
Void commit: 02a3cbc132c3c4a3a9d59e9b98f517af5dd11cd1
rustc 1.98.0 (88d9e12ae 2026-08-18)
cargo 1.98.0 (797e8a9bc 2026-08-05)
PASS: x86_64 static ELF
PASS: aarch64 static ELF
ldd (host diagnostic, exit 1): not a dynamic executable
PASS: aarch64 package exported to out/packages/
PASS: aarch64 glibc ELF
PASS: XBPS package hello-2.12.3_1 architecture=aarch64 (glibc)
SKIP: ARM execution (optional qemu-aarch64 not installed); ELF verification passed
PASS: M0 smoke test complete
Rust file output identifies an ELF 64-bit LSB executable, ARM aarch64,
statically linked, stripped. readelf confirms no interpreter, shared library
dependency, or glibc symbol version requirement. The extracted GNU hello ELF
uses /lib/ld-linux-aarch64.so.1 and requires libc.so.6.
make check passed its ABI rejection, invalid-input, Void pin, dirty-upstream,
overlay collision, stale-overlay, configuration protection, and formatting
checks. An initial package-index architecture error was corrected by explicitly
setting XBPS_ARCH=aarch64 when indexing the exported package; the full
smoke-test then passed.
Actual logs and inventories:
- Bootstrap log
- Smoke-test log
- Package build log
- Guardrail and formatting checks
- Build package inventory
- Cached package input digests
- Artifact digests
Generated output is ignored by Git. These links refer to this validated checkout; rerun the commands to recreate the output in another checkout.
Artifacts
| Artifact | Verified ABI | SHA-256 |
|---|---|---|
out/fds-smoketest |
AArch64, static musl | 3c719a386cfef5b67f90488d9c67075c835c1a42d4db0efac0b475267dfc25ee |
out/packages/hello-2.12.3_1.aarch64.xbps |
aarch64 package, glibc executable | 2703e81cff78d3d11b1a36f323c0af25691b258effcd60fe7f6d074ca8cdf1d8 |
Known limitations
- QEMU execution was skipped because qemu-aarch64 is not installed. No ARM hardware, Pi boot, bay topology, E-Ink, or boot/shutdown timing was tested.
- Void source, Rust, and host XBPS are pinned. Rolling binary dependencies are audited through cached digests and version inventories, but a complete binary repository snapshot and reproducible release are still future work.
- This is a cross-build foundation; there is no bootable FDS image yet.
- Initial upstream bubblewrap cleanup reported a busy
/tmpmount point while returning success. Subsequent container execution and cross-build checks passed. See the build guide.
Next milestone proposal
M1 should implement fds-base and fds-base-files, assemble an aarch64 glibc
rootfs with GNU userspace and XBPS, and generate out/rootfs-aarch64.tar.
Acceptance should audit package contents, confirm glibc/coreutils/binutils,
require no musl runtime package, and exclude BusyBox, systemd, and runit.
Begin M1 only after an explicit request.
Initial M0 changed-file inventory
.cargo/config.toml
.gitignore
.gitmodules
AGENTS.md
Cargo.lock
Cargo.toml
Makefile
README.md
VOID_PACKAGES_COMMIT
config/host-tools.conf
config/xbps-src.conf
docs/architecture.md
docs/boot.md
docs/build-host.md
docs/cartridges.md
docs/m0-validation.md
docs/master-plan.md
docs/packages.md
docs/performance.md
docs/recovery.md
docs/services.md
image/.gitkeep
out/.gitkeep
packages/fds-base-files/.gitkeep
packages/fds-base/.gitkeep
packages/fds-cartridged/.gitkeep
packages/fds-cli/.gitkeep
packages/fds-eink/.gitkeep
packages/fds-kernel/.gitkeep
profiles/.gitkeep
rust-toolchain.toml
rust/fds-boottrace/.gitkeep
rust/fds-burn/.gitkeep
rust/fds-cartridged/.gitkeep
rust/fds-cli/.gitkeep
rust/fds-common/.gitkeep
rust/fds-smoketest/Cargo.toml
rust/fds-smoketest/src/main.rs
rust/fds-stage0/.gitkeep
s6/source/.gitkeep
tests/hardware/.gitkeep
tests/integration/m0-checks
tests/unit/.gitkeep
tools/bootstrap-host
tools/build-package
tools/lib.sh
tools/prepare-void
tools/smoke-test
tools/verify-elf
vendor/void-packages