In an increasingly diverse and splintered world, interoperability rules. The ability to leverage code written for another platform means more time and resources for doing new and exciting research instead of reinventing the wheel. Interoperability requires standards, and as the saying goes, the best part of standards is that everyone can have their own. However, in the userspace file system world, the Linuxoriginated FUSE is the clear yardstick. In this paper we present ReFUSE, a userspace implementation of the FUSE interface on top of the NetBSD native puffs (Pass-to-Userspace Framework File System) userspace file systems framework. We argue that an additional layer of indirection is the right solution here, as it allows for a more natural export of the kernel file system interface instead of emulating a foreign interface in the kernel. Doing so also reaps other minor benefits such as clarifying the license as the whole chain from the kernel to the file system is BSD-licensed. Another obvious benefit is having a fully performant native userspace file system interface available. We summarize the puffs and FUSE interfaces and explain how the mapping between the two was done, including experiences from the implementation. After this we show by example that FUSE file systems work with ReFUSE as expected, present a virtual directory extension for the FUSE interface and conclude by outlining future work in the area.
[1]
Antti Kantee.
puffs-Pass-to-Userspace Framework File System
,
2007
.
[2]
John K. Ousterhout,et al.
Pseudo Devices: User-Level Extensions to the Sprite File System
,
1988
.
[3]
Greg Lehey.
Porting UNIX Software: From Download to Debug
,
1995
.
[4]
Chris J. Scheiman,et al.
Extending the operating system at the user level: the Ufo global file system
,
1997
.
[5]
Erez Zadok,et al.
Fist: a system for stackable file-system code generation
,
2001
.
[6]
Erez Zadok,et al.
Versatility and Unix semantics in namespace unification
,
2006,
TOS.
[7]
Steve R. Kleiman,et al.
Vnodes: An Architecture for Multiple File System Types in Sun UNIX
,
1986,
USENIX Summer.