This articleneeds additional citations forverification. Please helpimprove this article byadding citations to reliable sources. Unsourced material may be challenged and removed. Find sources: "Filesystem in Userspace" – news ·newspapers ·books ·scholar ·JSTOR(January 2024) (Learn how and when to remove this message) |
| Filesystem in Userspace | |
|---|---|
| Stable release | |
| Written in | C |
| Operating system | Unix,Unix-like |
| Type | File systemdriver |
| License | GPL for Linux kernel part,LGPL for Libfuse,Simplified BSD on FreeBSD,ISC license on OpenBSD; proprietary for macOS |
| Website | github |
Filesystem in Userspace (FUSE) is asoftware interface forUnix andUnix-like computeroperating systems that lets non-privileged users create their ownfile systems without editingkernel code. This is achieved by running file system code inuser space while the FUSE module provides only a bridge to the actual kernel interfaces.
FUSE is available forLinux,FreeBSD,OpenBSD,NetBSD (aspuffs),OpenSolaris,Minix 3,macOS,[2]MorphOS (as filesysbox.library), andWindows.[3]
FUSE isfree software originally released under the terms of theGNU General Public License and theGNU Lesser General Public License.
Plan 9 users have aftpfs command that will connect to a ftp server, populate remote files in their name space, and translate9p operations into ftp operations. This allows standard utilities (grep, sed, etc.) to work directly on remote files. Since then, several implementations of ftpfs andsshfs have appeared.[citation needed]
The FUSE system was originally part ofAVFS (A Virtual Filesystem), a filesystem implementation heavily influenced by the translator concept of theGNU Hurd.[4] It superseded Linux Userland Filesystem, and provided a translational interface usinglufis in libfuse1.
FUSE was originally released under the terms of theGNU General Public License and theGNU Lesser General Public License, later also reimplemented as part of theFreeBSD base system[5] and released under the terms ofSimplified BSD license. AnISC-licensed re-implementation by Sylvestre Gallon was released in March 2013,[6] and incorporated intoOpenBSD in June 2013.[7]
FUSE was merged into the mainstreamLinux kernel tree in kernel version 2.6.14.[8]
The userspace side of FUSE, thelibfuse library, generally followed the pace of Linux kernel development while maintaining "best effort" compatibility with BSD descendants. This is possible because the kernel FUSE reports its own "feature levels", or versions. The exception is the FUSE fork for macOS, OSXFUSE, which has too many differences for sharing a library.[9] A break in libfuse history is libfuse3, which includes some incompatible improvements in the interface and performance, compared to the older libfuse2 now under maintenance mode.[10]
As the kernel-userspace protocol of FUSE is versioned and public, a programmer can choose to use a different piece of code in place oflibfuse and still communicate with the kernel's FUSE facilities. On the other hand,libfuse and its many ports provide a portable high-level interface that may be implemented on a system without a "FUSE" facility.
The version of FUSE forMac OS X has too many differences for sharing the same library as regularlibfuse systems.[clarification needed] It was started as Google's MacFUSE in 2009 and forked as OSXFUSE in 2011 by Benjamin Fleischer. OSXFUSE was rebranded as macFUSE in 2020 following the rebrand of Mac OS X to macOS.[11] The modern macFUSE consists of a closed-source kernel extension and three open-source userspace libraries: a fork of libfuse2, a fork of libfuse3 and anObjective-C framework for accessing macFUSE-specific functionality. The last fully open-source release was OSXFUSE 3.8.3 of 2018.[12]
WinFsp is a userspace filesystem driver interface for Windows released under GPLv3. It implements the libfuse2 and libfuse3 C APIs in addition to its own APIs for C and .NET.[13]
OpenHarmony uses a fork of libfuse3 as a "third-party component" with minimal modification. It is unclear whether this inclusion is only for the Linux kernal-based branches of OpenHarmony (which would be trivial) or also for their customLiteOS and UniProton kernels.[14][15]

To implement a new file system, a handler program linked to the suppliedlibfuse library needs to be written. The main purpose of this program is to specify how the file system is to respond to read/write/stat requests. The program is also used tomount the new file system. At the time the file system is mounted, the handler is registered with the kernel. If a user now issues read/write/stat requests for this newly mounted file system, the kernel forwards these IO-requests to the handler and then sends the handler's response back to the user.

fusermount commandFUSE is particularly useful for writingvirtual file systems. Unlike traditional file systems that essentially work with data on mass storage, virtual filesystems don't actually store data themselves. They act as a view or translation of an existing file system or storage device.
In principle, any resource available to a FUSE implementation can be exported as a file system.
The version of FUSE in Linux kernel includes various optional features that can be enabled to improve performance, including writeback (as opposed to write-through) caching and I/O passthrough.
Conventional on-disk file systems can be implemented in user space with FUSE, e.g. for compatibility or licensing reasons.
FUSE filesystems can create a view of an underlying file system, transforming the files in some way.
FUSE filesystems can expose the contents of archives or backup sets without having to first extract them.