Saphira Linux · an AKADATA project

FHS and LSB profile

The standards contract behind Akadata’s non-usrmerged hierarchy, local administration boundary, and proposed immutable recovery topology.

Saphira, the Version 0 mascot
Technical preview

Saphira Linux

Saphira Linux has a home of its own

Saphira Linux is AKADATA’s source-built, musl/OpenRC server distribution for self-hosted infrastructure. Development, downloads, documentation, packages and the Dragon feature sets now live on the dedicated Saphira Linux website.

Visit Saphira Linux saphira.vm2.uk


Standards position

FHS conformance without a compatibility fiction

Target: conformant

Filesystem Hierarchy Standard 3.0

Akadata targets FHS 3.0 conformance. The root hierarchy contains the programs required while /usr, /var, and /opt are unavailable, together with their shared-library closure under /lib.

Profile: compatible

Linux Standard Base 5.0

Akadata provides an LSB 5.0 compatibility profile for applicable source, command, shell, filesystem, and behavioural interfaces. It is not presently LSB 5.0 AMD64 binary-ABI conformant.

The AMD64 LSB ABI specifies glibc-family loader and library names. Akadata uses /lib/ld-musl-x86_64.so.1 and does not create false libc.so.6 or ld-lsb-x86-64.so.3 aliases.


The hierarchy is an interface

Root is root; /usr and /usr/local retain distinct jobs

/bin, /sbin, /lib, and /usr are real directories. None is replaced by a usrmerge symlink. Early-boot OpenRC executables remain in /sbin, and service scripts continue to use #!/sbin/openrc-run.

/                         Current image: /dev/vda1, ext4, read-write
├── bin                   Essential early-boot user commands
├── sbin                  System binaries — init, OpenRC, rescue tools
├── lib                   musl loader, essential shared libraries, kernel modules
└── usr                   Distribution-managed userland
    ├── bin               Standard user commands and applications
    ├── sbin              Non-essential administration programs and daemons
    └── local             First-party and administrator hierarchy
        ├── bin
        ├── sbin
        ├── lib
        └── src

Directory inventory

What lives where

/bin

Early‑boot userland

apk, the APK package manager, built from source alongside the distribution. kmod, the kernel module loader and utility. Essential shell utilities for bootstrapping the system before /usr is available.

/sbin

System administration

openrc (the init process), openrc-run (service script interpreter), and rc-update, rc-status, rc-service for service lifecycle. ldconfig builds the shared‑library cache. akadata-rescue provides the recovery shell, and akadata-network-config writes persistent network state.

/usr/bin

Managed userland

Every distribution‑built command lives here. The four runtimes: python3 (3.14.6), node (24.18.1), php (8.5.9), perl. Network tools: curl, ssh, scp, rsync. The reverse‑proxy binaries: nginx, haproxy. The compiler: gcc, g++. DNS tools: dig, nslookup. Utilities: htop, lsof, tree, jq, vim.

/usr/sbin

Daemons and administration

nginx (the daemon instance) and php-fpm (FastCGI process manager). Mail server daemons: postfix, dovecot. Anti‑spam: rspamd. Timekeeping: chronyd. Network control: ip, nft, iptables. Scheduled services: chronyd, crond. The SSH daemon: sshd.

/usr/local

Your space

Empty by default. Populated by the administrator with CPAN modules, pip virtual environments, npm global packages, compiled binaries, and site‑specific scripts. Mountable and portable. Moved between Saphira machines that share the same Akadata base, it is usable as‑is, because the base interpreter and standard library are identical. See the Stack guide for the walkthrough.

Akadata hierarchy ownership
HierarchyPolicyExamples
/Essential boot, repair, configuration, and runtime foundations./bin, /sbin, /lib, /etc
/usrDistribution-managed secondary userland; it does not replace the root hierarchy.Nginx, PHP-FPM, Python 3.14.6 and managed daemons
/usr/localReserved for locally administered and first-party software outside the distribution package namespace.Local automation, overrides, source and site-specific tools

Immutable recovery topology

A planned mount design, not a Version 0 release claim

The current Stage3 image creates one ext4 partition at /dev/vda1, mounts it at /, and boots it read-write. Saphira does not yet ship separate read-only root and read-write userland partitions.

The proposed recovery topology preserves the already-enforced directory boundary while adding independent mount policy:

/                         Proposed separate read-only recovery root
├── bin                   Rescue shell and essential early-boot tools
├── sbin                  init, OpenRC, filesystem and network recovery tools
└── lib                   musl loader and complete early-boot library closure

/usr                      Proposed separately mounted managed userland
├── bin                   Applications and standard userland
├── sbin                  Managed non-essential daemons and administration tools
└── local                 Local administrator and first-party overrides
    ├── bin
    ├── sbin
    └── lib

Before this can become a release guarantee, the image builder must create and identify the separate filesystems; /var, runtime state, package transactions, configuration writes, upgrades, and rollback must receive an explicit writable design; and boot acceptance must prove that the complete rescue closure works with /usr unavailable.

The recovery objective is credible only after destructive boot tests demonstrate it. The documentation will not promise flawless recovery or operation without rescue media before that evidence exists.


BSD lineage

Wheel, spokes, and the local hierarchy

Akadata keeps the BSD-derived wheel administrative convention. In the Stage4 account policy, wheel is GID 1, contains root, and is accompanied by the deliberately named spokes group at GID 2. The names express the relationship between privileged administration, delegated participation, and the root hub.

/usr/local carries the same respect for local administration: distribution packages own their declared system paths, while locally maintained programs and overrides have a stable hierarchy that automated package replacement does not need to occupy.


Auditable claims

Source contracts and target-root validation

The conformance position is maintained as matrices and executable validators rather than inferred from directory names.

Standards evidence under /tank/musl/docs/standards
FilePurpose
AUDIT-REPORT.mdReadable summary of the audited conformance and compatibility position.
FHS-3.0-CONFORMANCE.mdNormative Akadata FHS position and audit entry points.
LSB-5.0-COMPATIBILITY.mdQualified LSB profile and explicit binary-ABI limitations.
fhs-3.0-matrix.tsvRequirement classifications, evidence, implementation, tests, and deviations.
lsb-5.0-matrix.tsvProfile-level LSB classifications and evidence.
lsb-5.0-commands.tsvPer-command LSB compatibility classifications.
sources.tsvStandards source references used by the audit.
./build.sh fhs-audit --source-only
./build.sh lsb-audit --source-only
./build.sh fhs-audit
./build.sh lsb-audit
  • The FHS validator rejects usrmerge links and root-hierarchy executables resolving below /usr.
  • The LSB validator checks compatible commands while rejecting misleading glibc loader and library aliases.
  • Stage4 rejects packages that replace protected root directories or move essential root-hierarchy files into /usr.