ReFUSE : Userspace FUSE Reimplementation Using puffs

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.