Filesystems in User-Space: puffs, refuse vs. FUSE, and more (Updated)
[I'm taking the liberty to post this unquoted here, as I did the
editing on the news item, based on input from Antti
NetBSD now offers full support for running file systems in userspace.
The core component inside the kernel that exposes a file system
interface towards the userland programs is "puffs", and communicates
with vnodes, the kernel's own idea of files. The "libpuffs" library
is the interface between userland file systems and the kernel
component. To facilitate running the huge amount of file systems
already available for the FUSE interface, but not dictate the
capabilities of puffs by it, it was decided that FUSE support should
be provided as a compatibility layer on top of the native puffs
interface. This compatibility is offered by re-fuse, a BSD-licensed
re-implementation of FUSE. It is designed to be source code compatible
with FUSE, and more information can be found in the refuse(3) manpage.
While puffs is stable for users, the library programming interface and
the binary interfaces are still likely to change, and therefore puffs
and the dependant librefuse are not built by default. For people
tracking -current, the build of all relevant puffs components
(librefuse, psshfs, etc.) by "make build" can be enabled by adding
Using puffs also requires the kernel option "
file-system PUFFS", or alternatively loading the puffs.o kernel module,
which is included in a puffs-enabled build.
FUSE compatibility was added within pkgsrc, and besides the required
infrastructure work a number of FUSE packages were added to pkgsrc in the
new "filesystem" category. Example packages that are currently available
puffs was originally developed during the Google Summer of Code 2005
"userfs" project by Antti Kantee.
It was further polished using funding
from the Ulla Tuominen Foundation and committed
into the NetBSD source tree in October 2006.
The work was presented at AsiaBSDCon 2007 in a paper
entitled "puffs - Pass-to-Userspace Framework File System".
The "refuse" library was
written by Alistair Crooks and committed to NetBSD in February
2007. All components will be available in NetBSD releases starting
with NetBSD 5. Work for using FUSE-enabled packages via pkgsrc was
done by Juan Romero Pardines following import of the "refuse" library.
For more information, see NetBSD's webpage on file systems in userspace at
An in-depth technical description of puffs was presented at
in a paper entitled "puffs - Pass-to-Userspace Framework File System".
The paper and
[Tags: fuse, puffs, refuse]