// filesystem isolation

Your filesystem.
composed your way.

prismafs

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.

NLnet FoundationNGI Zero Commons Fund

PrismaFS is funded through the NGI0 Commons Fund, established by NLnet with financial support from the European Commission's Next Generation Internet programme.

// 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

01sessions
  • Named sessions

    manifest: time, sources, description

  • Exportable sessions

    archive & manifest

02toolchain
  • 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

03integrity
  • Cryptographic signing

    SHA-256 + Ed25519, prismafs-verify

  • More synthetic files

    hostname, uptime, loadavg, network interfaces

04distribution
  • FreeBSD build and Ports

  • AUR package, Homebrew updates, static binaries

  • Man pages and documentation for new tools

Full roadmap for detail, updates, and changelog.