USFS is a 64-bit AIX filesystem kernel extension and a userspace client library. It provides FUSE-like functionality on AIX using an AIX-specific implementation. A FUSE adapter can make the client library compatible with the Linux FUSE API, making it easier to port projects that depend on FUSE.
The first alpha release is available for focused testing. The core functionality works, with known issues. You can run the provided examples or conduct your own experiments. Do not use this alpha in production. Kernel extension failures can crash the system. Upgrade from this version will not be supported.
Build natively on AIX with GCC, CMake 3.20+, GNU Make, Bash, RPM build tools, and the native AIX development tools:
cmake -S . -B build -G "Unix Makefiles" -DCMAKE_C_COMPILER=gcc
cd build
make packageRun as root on an isolated, recoverable AIX host:
# Install and check status
rpm -ivh "build/packages/usfs-0.1.0-1.aix$(uname -v).$(uname -r).ppc.rpm"
usfsctl
### Run memfs example
# Main session
mkdir -p /mnt/usfs-mem
usfs_memfs /mnt/usfs-mem
# Separate session
printf 'USFS works\n' >/mnt/usfs-mem/hello.txt
cat /mnt/usfs-mem/hello.txt
umount /mnt/usfs-mem
### Run the read-only mirror example
# Main session
mkdir -p /mnt/usfs-mirror
usfs_mirror --source=/usr /mnt/usfs-mirror
# Separate session
ls /mnt/usfs-mirror
umount /mnt/usfs-mirror
The package installs /usr/lib/libusfs.a, /usr/include/usfs/usfs.h, and
usfs.pc. The public header documents requests, callbacks, options and
lifecycle contracts; the examples demonstrate their use. Mutable backends
must implement conditional namespace mutations
atomically.
In-place upgrades and replacement installs are rejected. To reinstall, unmount
all USFS filesystems, stop the daemons, and prevent new device opens. Then run
rpm -e usfs followed by rpm -ivh with the new RPM.
USFS integrates with standard AIX tracing facilities to capture kernel and request activity for diagnosis:
# Start a root-owned session and select where to save the raw trace.
usfsctl trace start --profile requests --output /tmp/usfs.trace
usfsctl trace status
# Reproduce the event. Pause and resume are optional.
usfsctl trace pause
usfsctl trace resume
# Stop records the raw trace and creates /tmp/usfs.trace.txt.
usfsctl trace stop
# Reformat the raw trace later, optionally choosing a report path.
usfsctl trace report /tmp/usfs.trace --output /tmp/usfs-report.txtPossible profiles are core, requests (default), full.
Normal USFS unload/reload uses a resident device-dispatch proxy and requires existing USFS users to be torn down. The separate, explicitly unsafe proxy-removal command can still cause a kernel fault. See kernel proxy lifecycle for the protocol, maintenance commands, and verification requirements. Should not be reproducible during manual sequential execution of examples above.
USFS mounts do not support record locks, ACLs, privilege control lists,
extended attributes, quotas, fclear, special-file creation, file ioctl,
or pathconf/fpathconf. See
unsupported filesystem operations for the
complete list, observed errors, and important exceptions.
- Technical preview — completed.
- First alpha release — published; current stage.
- Further testing, audit reports, and reliability improvements.
- Beta release after further testing and stabilization.
- Clarified compatibility and system requirements, documented WPAR support, performance tests.
- First stable general-availability release.
- s3fs and sshfs on AIX.
Further development will depend on community demand. Feedback is highly appreciated.
One initial performance test has been completed. See the performance summary for the results. More performance tests and improvements are planned for later stages of development.
Build and run tests directly on AIX with the out-of-source CMake workflow. For a complete non-performance campaign over SSH and a downloadable coverage archive, run:
bash collect-coverage.sh root@aix.example.com /ws/usfs-coverageSee the coverage archive guide for prerequisites, test scope, HTML review, and portable coverage exports.