// filesystem isolation
Your filesystem.
composed your way.
Make changes and test inside session - real /etc is never affected.
$SESSION_LAYER_DIR=~/scratch/session \
BASE_LAYER_DIRS=/etc \
prismafs /mnt/etc-test
$vim /mnt/etc-test/nginx/nginx.conf
$nginx -t -c /mnt/etc-test/nginx/nginx.conf
nginx: ...nginx.conf test is successful
$umount /mnt/etc-test
$rm -rf ~/scratch/session
macOS, FreeBSD, and Linux.
// how-it-works
How it works
original1 / 5
You have directory or directories you need to keep unmodified. Could be a codebase, data set, tree some installer or migration, or anything really.
You want to make changes, run operations, and still have original as main source of truth.
A namespace,
not a container.
Getting a private copy of a directory on UNIX usually means container, jail, or VM, a lot of machinery when all you wanted was to try a change, or contextualize temporary operation (and leave the original alone). Long ago, Plan 9 provided each program individual picture of the filesystem. UNIX never really did. PrismaFS is inspired by that idea and does it the UNIX way.
It looks like your home, your project, or any other path you provide. You can combine multiple sources, your session is on top and takes every write in isolated userspace filesystem context.
Without Apple's limits, Linux and FreeBSD can give one program that view. Everything else on your machine still sees real files. macOS does not allow this, so there you mount a chosen path.
// install
Install
Homebrew
Install macFUSE first (or brew install --cask macfuse). You must approve kernel extension in System Settings on macOS, because of its security model. After that, one reboot is required.
Then:
$brew install goranb131/ithas-prismafs/prismafs
First time from this tap, if Homebrew complains that formula is untrusted:
$brew trust goranb131/ithas-prismafs
$brew install goranb131/ithas-prismafs/prismafs
If it complains about newer Xcode Command Line Tools, it prints and instructs command you need to run. That command is:
$xcode-select --install
Finish that, then run brew install goranb131/ithas-prismafs/prismafs again.
Fastest way to verify that install was success, or that binary works: prismafs -v (or ./prismafs -v from a source build, or the downloaded filename). It prints PrismaFS version and exits.
$prismafs -v
Build from source
Or build from source:
$git clone git@github.com:goranb131/ITHAS-prismaFS.git
$cd ITHAS-prismaFS
$make
Then ./prismafs from that directory, or sudo make install so the command is just prismafs.
$./prismafs -v
// roadmap
What's coming
Named sessions
manifest: time, sources, description
Exportable sessions
archive & manifest
prismafs-diff
added, removed, modified, permissions, ownership
prismafs-replay
apply saved diff to another base
prismafs run
run command in your session. Keep or discard
Linux and FreeBSD: start any program so its folder view is PrismaFS view (for example, terminal, your project or home). That program reads and writes there. Any separate terminal still sees original unchanged directory.
prismafs shell
session subshell, ability to keep or discard on exit
prismafs-tui
browse, size, summary, discard or export
Cryptographic signing
SHA-256 + Ed25519, prismafs-verify
More synthetic files
hostname, uptime, loadavg, network interfaces
FreeBSD build and Ports
AUR package, Homebrew updates, static binaries
Man pages and documentation for new tools
Full roadmap for detail, updates, and changelog.