|Aitor f287e4a2aa||6 months ago|
|demo||6 months ago|
|fuse||6 months ago|
|include||6 months ago|
|libfskit||6 months ago|
|test||6 months ago|
|tools||6 months ago|
|.gitignore||6 months ago|
|CONTRIBUTORS||6 months ago|
|LICENSE.ISC||6 months ago|
|LICENSE.LGPLv3+||6 months ago|
|Makefile||6 months ago|
|README.md||6 months ago|
|TESTERS||6 months ago|
|buildconf.mk||6 months ago|
fskit is an SDK for creating filesystems. It provides generic code and data structures for managing filesystem inodes, handles, permissions, reference counting, concurrency, and so on, so developers can focus on filesystem-specific features. With fskit, a fully-featured multithreaded filesystem can be written in just over 200 lines of code.
When implementing a userspace filesystem, existing filesystem libraries (FUSE, puffs, 9P) force the programmer to think about both read/write handling (“data plane” operations) and metadata bookkeeping and access control (“control plane” operations). This makes implementation difficult in two key ways:
To eliminate these difficulties, we created fskit. Fskit implements a featureful but extensible POSIX-like filesystem control plane on top of an existing filesystem library, freeing the programmer to focus on the much simpler application-specific data plane. In doing so, we lower the barrier-to-entry for creating new filesystems.
The build process is intentionally simple. To build:
$ make PREFIX=/usr/local
To install libfskit to /usr/local/lib and headers to /usr/local/include/fskit:
$ sudo make install PREFIX=/usr/local
To build libfskit_fuse, a helper library that wraps fskit into FUSE bindings:
$ make -C fuse/ PREFIX=/usr/local
To install libfskit_fuse to /usr/local/lib and headers to /usr/local/include/fskit/fuse:
$ sudo make -C fuse/ install PREFIX=/usr/local
You can change the installation directory by setting DESTDIR.
Forthcoming :) Take a look at demo/ and tests/ to see examples.