Jump to content

Filesystem in Userspace: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Trek00 (talk | contribs)
hurd reference
On-disk file systems: Bell Labs was the more commonly used named for "Bell Telephone Laboratories" (BTL) during the 70's and 80's when Research Unix was being developed.
 
(165 intermediate revisions by more than 100 users not shown)
Line 1: Line 1:
{{Short description|Software interface for Unix-like systems}}
{{More citations needed|date=January 2024}}
{{Infobox software
{{Infobox software
| name = Filesystem in Userspace
| name = Filesystem in Userspace
| logo =
| logo =
| screenshot = [[File:FUSE structure.svg|280px]]
| screenshot =
| caption = A flow-chart diagram showing how FUSE works
| caption =
| developer =
| developer =
| latest release version = 2.9.2
| latest release version = {{wikidata|property|edit|reference|P348}}
| latest release date = {{start date and age|2012|10|16|df=yes}}
| latest release date = {{start date and age|{{wikidata|qualifier|P348|P577}}}}
| latest preview version =
| latest preview version =
| latest preview date =
| latest preview date =
| operating system = [[Unix-like]]
| programming language = [[C (programming language)|C]]
| programming language = [[C (programming language)|C]]
| operating system = [[Unix]], [[Unix-like]]
| genre = [[File system]] [[software driver|driver]]
| genre = [[File system]] [[software driver|driver]]
| license = [[GPL]] for kernel part, [[LGPL]] for Libfuse, [[BSD licenses#2-clause|Simplified BSD]] on FreeBSD, [[ISC license]] on OpenBSD
| license = [[GPL]] for Linux kernel part, [[LGPL]] for Libfuse, [[BSD licenses#2-clause|Simplified BSD]] on FreeBSD, [[ISC license]] on OpenBSD; proprietary for macOS
| website = {{URL|fuse.sourceforge.net}}
| website = {{URL|https://github.com/libfuse/libfuse}}
}}
}}
'''Filesystem in Userspace''' ('''FUSE''') is a [[software interface]] for [[Unix-like]] computer [[operating system]]s that lets non-privileged users create their own [[file system]]s without editing [[kernel (computing)|kernel]] code. This is achieved by running file system code in [[user space]] while the FUSE module provides only a "bridge" to the actual kernel interfaces.


'''Filesystem in Userspace''' ('''FUSE''') is a [[software interface]] for [[Unix]] and [[Unix-like]] computer [[operating system]]s that lets non-privileged users create their own [[file system]]s without editing [[kernel (operating system)|kernel]] code. This is achieved by running file system code in [[user space]] while the FUSE module provides only a bridge to the actual kernel interfaces.
The FUSE system was originally part of [http://sourceforge.net/projects/avf A Virtual Filesystem] (AVFS), that was heavily influenced by the translator concept of the [[GNU Hurd]].<ref>{{cite web|url=http://www.draketo.de/light/english/free-software/some-technical-advantages-of-the-hurd|title=Some technical advantages of the Hurd|date=May 15, 2011|accessdate=March 28, 2016}}</ref> FUSE is [[free software]] originally released under the terms of the [[GNU General Public License]] and the [[GNU Lesser General Public License]], later also reimplemented as part of the [[FreeBSD]] base system<ref>https://wiki.freebsd.org/WhatsNew/FreeBSD10</ref> and released under the terms of [[BSD licenses#2-clause|Simplified BSD]] license. An [[ISC license|ISC]]-licensed re-implementation by Sylvestre Gallon was released in March 2013<ref>http://openbsd.7691.n7.nabble.com/Fuse-and-sshfs-support-for-OpenBSD-td224422.html</ref> and incorporated into [[OpenBSD]] in June 2013.<ref>http://marc.info/?l=openbsd-cvs&m=137027468819965</ref>


FUSE is available for [[Linux]], [[FreeBSD]], [[OpenBSD]], [[NetBSD]] (as [[PUFFS (NetBSD)|puffs]]), [[OpenSolaris]], [[Minix 3]], [[Android (operating system)|Android]] and [[OS X]].<ref>http://osxfuse.github.io/</ref> It was officially merged into the mainstream [[Linux kernel]] tree in kernel version 2.6.14.<ref>{{cite web|url=http://www.linux.com/archive/feature/47839 |accessdate=July 31, 2011 |deadurl=yes |archiveurl=http://web.archive.org/web/20111214225158/http://www.linux.com/archive/feature/47839 |archivedate=December 14, 2011 }}</ref>
FUSE is available for [[Linux]], [[FreeBSD]], [[OpenBSD]], [[NetBSD]] (as [[PUFFS (NetBSD)|puffs]]), [[OpenSolaris]], [[Minix 3]], [[macOS]],<ref>{{cite web|url=https://osxfuse.github.io/|title=Home - FUSE for OS X}}</ref> and [[Microsoft Windows|Windows]].<ref>{{Citation|last=Zissimopoulos|first=Bill|title=billziss-gh/winfsp|date=2021-02-14|url=https://github.com/billziss-gh/winfsp|access-date=2021-02-16}}</ref>


FUSE is [[free software]] originally released under the terms of the [[GNU General Public License]] and the [[GNU Lesser General Public License]].
==Virtual file system==

FUSE is particularly useful for writing [[virtual file system]]s. Unlike traditional file systems that essentially save data to and retrieve data from disk, virtual filesystems do not actually store data themselves. They act as a view or translation of an existing file system or storage device.
== History ==
The FUSE system was originally part of ''AVFS'' (''A Virtual Filesystem''), a filesystem implementation heavily influenced by the translator concept of the [[GNU Hurd]].<ref>{{cite web|url=http://www.draketo.de/light/english/free-software/some-technical-advantages-of-the-hurd|title=Some technical advantages of the Hurd|date=May 15, 2011|access-date=March 28, 2016}}</ref> It superseded [[Linux Userland Filesystem]], and provided a translational interface using {{code|lufis}} in libfuse1.

FUSE was originally released under the terms of the [[GNU General Public License]] and the [[GNU Lesser General Public License]], later also reimplemented as part of the [[FreeBSD]] base system<ref>{{cite web|url=https://wiki.freebsd.org/WhatsNew/FreeBSD10|title=WhatsNew/FreeBSD10 - FreeBSD Wiki}}</ref> and released under the terms of [[BSD licenses#2-clause|Simplified BSD]] license. An [[ISC license|ISC]]-licensed re-implementation by Sylvestre Gallon was released in March 2013,<ref>{{cite web|url=http://openbsd.7691.n7.nabble.com/Fuse-and-sshfs-support-for-OpenBSD-td224422.html|title=openbsd dev - tech - Fuse (and sshfs) support for OpenBSD|access-date=2013-07-14|archive-date=2020-10-26|archive-url=https://web.archive.org/web/20201026101016/http://openbsd.7691.n7.nabble.com/Fuse-and-sshfs-support-for-OpenBSD-td224422.html|url-status=dead}}</ref> and incorporated into [[OpenBSD]] in June 2013.<ref>{{cite web|url=http://marc.info/?l=openbsd-cvs&m=137027468819965|title='CVS: cvs.openbsd.org: src' - MARC}}</ref>

FUSE was merged into the mainstream [[Linux kernel]] tree in kernel version 2.6.14.<ref>{{cite web|url=http://osdir.com/ml/file-systems.fuse.devel/2005-09/msg00021.html|title=file-systems.fuse.devel - FUSE merged to 2.6.14! - msg#00021 - Recent Discussion OSDir.com|url-status=dead|archive-url=https://web.archive.org/web/20160420173822/http://osdir.com/ml/file-systems.fuse.devel/2005-09/msg00021.html|archive-date=2016-04-20}}</ref>

The userspace side of FUSE, the {{tt|libfuse}} 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.<ref>{{cite web |title=libfuse/libfuse, the reference implementation of the Linux FUSE (Filesystem in Userspace) interface |url=https://github.com/libfuse/libfuse |publisher=libfuse |access-date=9 January 2020 |date=9 January 2020}}</ref> 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.<ref>{{cite web |title=libfuse3 ChangeLog |url=https://github.com/libfuse/libfuse/blob/master/ChangeLog.rst#libfuse-300-2016-12-08 |website=GitHub |access-date=9 January 2020}}</ref>

As the kernel-userspace protocol of FUSE is versioned and public, a programmer can choose to use a different piece of code in place of {{tt|libfuse}} and still communicate with the kernel's FUSE facilities. On the other hand, {{tt|libfuse}} and its many ports provide a portable high-level interface that may be implemented on a system without a "FUSE" facility.

== Operation and usage ==
[[File:FUSE structure.svg|thumb|right|280px|A flow-chart diagram showing how FUSE works: Request from userspace to list files (ls -l /tmp/fuse) gets redirected by the Kernel through VFS to FUSE. FUSE then executes the registered handler program (./hello) and passes it the request (ls -l /tmp/fuse). The handler program returns a response back to FUSE which is then redirected to the userspace program that originally made the request.]]
To implement a new file system, a handler program linked to the supplied <code>libfuse</code> 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 to [[Mount (computing)|mount]] 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.

[[File:Unmount SSHFS.png|thumb|right|Unmounting a FUSE-based file system with the <code>fusermount</code> command]]

FUSE is particularly useful for writing [[virtual file system]]s. 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.
In principle, any resource available to a FUSE implementation can be exported as a file system.


== Ports ==
== Applications ==
*[http://web.archive.org/web/20070411043200/http://fuse4bsd.creo.hu:80/ Older "fusefs-kmod" version of Fuse for FreeBSD]
*[http://fuse4x.org/ Fuse4X] is a port of Fuse to [[OS X]] (now merged with OSXFuse.)
*[http://code.google.com/p/macfuse/ MacFUSE] is an old port of Fuse to Mac OS X; no longer maintained
*[http://osxfuse.github.com/ OSXFuse] is a port of Fuse to OS X and a successor to MacFUSE
*[http://dokan-dev.github.io/ Dokan] Windows user mode file system library and [http://hg.sharesource.org/fuse4win fuse4win] FUSE api for it
*NetBSD has [http://netbsd.gw.com/cgi-bin/man-cgi?perfused+8+NetBSD-6.0 FUSE support] in base system starting with NetBSD-6.0
*[[MINIX 3]] has [http://wiki.minix3.org/doku.php?id=releases:3.2.0:start FUSE support] in base system starting with version 3.2.0


== Example uses ==
=== On-disk file systems ===
Conventional on-disk file systems can be implemented in user space with FUSE, e.g. for compatibility or licensing reasons.

*[[Linear Tape File System]]: Allows files stored on magnetic tape to be accessed in a similar fashion to those on disk or removable flash drives.
*[[NTFS-3G]] and [[Captive NTFS]], allowing access to [[NTFS]] filesystems.
*[https://github.com/jaylogue/retro-fuse retro-fuse]: retro-fuse is a user-space filesystem that provides a way to mount filesystems created by ancient Unix systems on modern OSes. The current version of retro-fuse supports mounting filesystems created by Fifth, Sixth and Seventh Edition of Research Unix from [[Bell Labs]], as well as 2.9BSD and 2.11BSD based systems.

=== Layering file systems ===
FUSE filesystems can create a view of an underlying file system, transforming the files in some way.


*[[Wuala]]: A multi-platform, Java-based fully OS integrated distributed file system. Using FUSE, MacFUSE and [http://www.eldos.com/cbfs/ Callback File System] respectively for file system integration, in addition to a Java-based app accessible from any Java-enabled web browser.
*[[WebDrive]]: A commercial filesystem implementing [[WebDAV]], SFTP, FTP, FTPS and [[Amazon S3]]
*[[Transmit]]: A commercial FTP client that also adds the ability to mount WebDAV, SFTP, FTP and Amazon S3 servers as disks in Finder, via MacFUSE.
*[[ExpanDrive]]: A commercial filesystem implementing SFTP/FTP/S3/Swift using FUSE
*[[GlusterFS]]: Clustered Distributed Filesystem having ability to scale up to several petabytes.
*[[SSHFS]]: Provides access to a remote filesystem through [[Secure Shell|SSH]]
*[[FTPFS]]
*[[GmailFS]]: Filesystem which stores data as mail in [[Gmail]]
*[[GVfs]]: The virtual filesystem for the [[GNOME desktop]]
*[[EncFS]]: [[Disk encryption|Encrypted virtual filesystem]]
*[[EncFS]]: [[Disk encryption|Encrypted virtual filesystem]]
*[[NTFS-3G]] and [[Captive NTFS]], allowing access to [[NTFS]] filesystems
* FuseCompress, gzipfs, Fuse-ZIP, CompFUSEd: Compressed virtual filesystems
* Archive filesystems may also perform this task
*[[WikipediaFS]]: View and edit Wikipedia articles as if they were real files

*[[Sun Microsystems]]'s [[Lustre (file system)|Lustre]] cluster filesystem will use FUSE to allow it to run in userspace, so that a FreeBSD port is possible.<ref>{{cite web | url = http://lustre.sev.net.ua/| title = Lustre FreeBSD | accessdate = 2008-03-02
=== Archive and backup file systems ===
}}</ref> However, the [[ZFS]]-Linux port of Lustre will be running ZFS's DMU (Data Management Unit) in userspace.<ref>{{ cite web | url = http://arch.lustre.org/index.php?title=Architecture_ZFS_for_Lustre | title = Architecture ZFS for Lustre | accessdate = 2008-03-02 | publisher = Sun Microsystems}}</ref>
FUSE filesystems can expose the contents of archives or backup sets without having to first extract them.

*[[archivemount]]
*[[archivemount]]
*[https://www.rubrik.com/blog/architecture/15/7/introducing-atlas-rubriks-cloud-scale-file-system Atlas (Rubrik backup software)]: Immutable, distributed filesystem used by Rubrik Cloud Data Management data protection applications
*[[Sector/Sphere|Sector File System]]: Sector is a distributed file system designed for large amount of commodity computers. Sector uses FUSE to provide a mountable local file system interface
*[[Borg (backup software)]]: Deduplicating backup program that allows backup archives to be mounted as FUSE filesystems.
*[[CloudStore]] (formerly, Kosmos filesystem): By mounting via FUSE, existing [[Linux]] utilities can interface with CloudStore
*[https://restic.net/ Restic]: Free, fast, efficient and secure backup software uses FUSE to be able to browse all of your backup snapshots as a regular file system
*[http://www.spictera.com SPFS] A file system for Spectrum Protect, designed to mount the backup server filespace anywhere on your server, and use the features included from the backup server (encryption, de-duplication, compression, filtering etc). This is a [[Write once read many|WORM]] file system.

=== Remote/distributed file system clients ===
*[https://cvmfs.readthedocs.io/en/stable/ CernVM-FS]: A distributed read-only software distribution system, implemented as a POSIX filesystem in user space (FUSE) using HTTP transport, to deliver software in a fast and reliable fashion at global scale.
*[[CloudStore]] (formerly, Kosmos filesystem): By mounting via FUSE, existing [[Linux]] utilities can interact with CloudStore
*[[ExpanDrive]]: A commercial filesystem implementing SFTP/FTP/S3/Swift using FUSE
*[[FTPFS]]
*[[GlusterFS]]: Clustered Distributed Filesystem having ability to scale up to several petabytes.
*[https://github.com/kahing/goofys/ goofys]: A FUSE filesystem that allows access to Amazon S3/Microsoft Azure storage with an emphasis on performance.
*[https://github.com/astrada/google-drive-ocamlfuse google-drive-ocamlfuse] is a FUSE filesystem for Google Drive, written in OCaml. It lets you mount your Google Drive on Linux.
*[[InterPlanetary_File_System|IPFS]]: A peer-to-peer distributed file system that seeks to connect all computing devices with the same system of files.
*[[Juice File System|JuiceFS]]: A distributed POSIX file system built on top of Redis and S3.
*[[Keybase|KBFS]]: A distributed filesystem with [[end-to-end encryption]] and a global namespace based on [[Keybase|Keybase.io]] service that uses FUSE to create cryptographically secure file mounts.
*[[Lustre (file system)|Lustre]] Cluster filesystem will use FUSE to allow it to run in userspace, so that a FreeBSD port is possible.<ref>{{cite web| url = http://lustre.sev.net.ua/| title = Lustre FreeBSD| access-date = 2008-03-02| url-status = dead| archive-url = https://web.archive.org/web/20080312031136/http://lustre.sev.net.ua/| archive-date = 2008-03-12}}</ref> However, the [[ZFS]]-Linux port of Lustre will be running ZFS's DMU (Data Management Unit) in userspace.<ref>{{cite web | url = http://arch.lustre.org/index.php?title=Architecture_ZFS_for_Lustre | title = Architecture ZFS for Lustre | access-date = 2008-03-02 | publisher = Sun Microsystems | archive-date = 2009-01-22 | archive-url = https://web.archive.org/web/20090122083850/http://arch.lustre.org/index.php?title=Architecture_ZFS_for_Lustre | url-status = dead }}</ref>
*[[Minio#MinFS|MinFS]]: MinFS is a fuse driver for Amazon S3 compatible object storage server. MinFS<ref>{{cite web|url=https://github.com/minio/minfs|title=minio/minfs|website=GitHub|access-date=12 April 2018}}</ref> lets you mount a remote bucket (from a S3 compatible object store), as if it were a local directory.
*[[Moose File System|MooseFS]]: An open source distributed fault-tolerant file system available on every OS with FUSE implementation (Linux, FreeBSD, NetBSD, OpenSolaris, OS X), able to store petabytes of data spread over several servers visible as one resource.
*[[Moose File System|MooseFS]]: An open source distributed fault-tolerant file system available on every OS with FUSE implementation (Linux, FreeBSD, NetBSD, OpenSolaris, OS X), able to store petabytes of data spread over several servers visible as one resource.
*[https://nexustorage.com Nexfs]: A commercial Linux file system that combines Block, File, and S3 compatible Cloud & Object storage into a single pool of POSIX compatible storage.
*[https://objectivefs.com/ ObjectiveFS]: Distributed filesystem with object store backend (Amazon S3, Google Cloud Storage or S3-compatible object store) using FUSE
*[[Rclone]] can mount a variety of remote / cloud storage with FUSE.
*[https://github.com/s3fs-fuse/s3fs-fuse s3fs]: Gives the ability to mount an [[S3 bucket]] as if it were a local file system.
*[[Sector/Sphere|Sector File System]]: Sector is a distributed file system designed for large amount of commodity computers. Sector uses FUSE to provide a mountable local file system interface.
*[[SSHFS]]: Provides access to a remote filesystem through [[Secure Shell|SSH]].
*Transmit: A commercial FTP client that also adds the ability to mount WebDAV, SFTP, FTP and Amazon S3 servers as disks in Finder, via MacFUSE.
*[[WebDrive]]: A commercial filesystem implementing [[WebDAV]], SFTP, FTP, FTPS and [[Amazon S3]]
*[[WikipediaFS]]: View and edit Wikipedia articles as if they were real files
*[[Wuala]]: Was a multi-platform, Java-based fully OS integrated distributed file system. Using FUSE, MacFUSE and [https://www.callback.com/cbfsconnect/ CBFS Connect] respectively for file system integration, in addition to a Java-based app accessible from any Java-enabled web browser (service discontinued in 2015).
*[https://github.com/MajenkoProjects/indexfs IndexFS]: A remote file aggregating filesystem with transparent CURL access to distributed files.

=== Other ===
<!-- Some can be sorted into the above. -->
*[[GVfs]]: The virtual filesystem for the [[GNOME desktop]]
*[https://github.com/rmind/rvault rvault]: A secure and authenticated store for secrets and small documents using envelope encryption with [[one-time password]] (OTP) authentication. It uses FUSE to expose the vault as a file system.


== See also ==
== See also ==
{{Portal|Free software}}
{{Portal|Free and open-source software}}

*[[GNU Hurd]], the operating system that introduced the translator concept, attaching user space programs to the virtual file system
*[[PUFFS (NetBSD)|PUFFS]], a similar framework with FUSE compatibility
*[[9P]], the file protocol from the [[Plan 9 from Bell Labs|Plan 9 operating system]], which preceded FUSE and provides many of the same features
*[[9P (protocol)]]
*[[Installable File System]]
*[[Installable File System]]
*[[Dokan Library]] FUSE Windows compatibility
*[https://docs.microsoft.com/en-us/windows/win32/projfs/projected-file-system Windows Projected File System (ProjFS)]


==References==
== References ==
{{Reflist}}
{{Reflist|30em}}


==External links==
== External links ==
*{{Official website|fuse.sourceforge.net}}
*{{Official website|https://github.com/libfuse/libfuse}}
*[http://www.ibm.com/developerworks/linux/library/l-fuse/ Develop your own filesystem with FUSE] by Sumit Singh
*[https://web.archive.org/web/20180216233455/https://www.ibm.com/developerworks/linux/library/l-fuse/ Develop your own filesystem with FUSE] by Sumit Singh
*[http://apps.sourceforge.net/mediawiki/fuse/index.php?title=FileSystems List of FUSE filesystems]
*[https://github.com/libfuse/libfuse/wiki/Filesystems List of FUSE filesystems]
*[https://web.archive.org/web/20050923210216/http://lxr.linux.no/#linux+v2.6.34/Documentation/filesystems/fuse.txt Documentation/filesystems/fuse.txt] documentation in Linux source tree
*[http://www.crossmeta.org/redmine Crossmeta] FUSE Kernel for Windows is a true port of Fuse 2.8
*[http://www.eldos.com/cbfs/ Callback File System] - SDK that lets developers create virtual file systems for Windows in user mode
*[http://www.secfs.net/winfsp/ WinFSP], a FUSE-like system for Windows (a FUSE compatibility layer is provided for Cygwin)
*[https://github.com/crossmeta/cxfuse Crossmeta FUSE], Port of FUSE to Windows (commercial software)
*[http://lxr.linux.no/#linux+v2.6.34/Documentation/filesystems/fuse.txt Documentation/filesystems/fuse.txt] documentation in Linux source tree


{{Filesystem}}
[[Category:Free special purpose file systems]]

[[Category:Free software programmed in C]]
[[Category:Free special-purpose file systems]]
[[Category:Linux kernel features]]
[[Category:Linux kernel features]]
[[Category:User space file systems]]
[[Category:Software that uses Meson]]
[[Category:Unix file system-related software]]
[[Category:Unix file system-related software]]
[[Category:Free software programmed in C]]
[[Category:Userspace file systems]]

Latest revision as of 16:32, 24 July 2024

Filesystem in Userspace
Stable release
3.16.2[1] Edit this on Wikidata / 10 October 2023; 14 months ago (10 October 2023)
Repository
Written inC
Operating systemUnix, Unix-like
TypeFile system driver
LicenseGPL for Linux kernel part, LGPL for Libfuse, Simplified BSD on FreeBSD, ISC license on OpenBSD; proprietary for macOS
Websitegithub.com/libfuse/libfuse

Filesystem in Userspace (FUSE) is a software interface for Unix and Unix-like computer operating systems that lets non-privileged users create their own file systems without editing kernel code. This is achieved by running file system code in user space while the FUSE module provides only a bridge to the actual kernel interfaces.

FUSE is available for Linux, FreeBSD, OpenBSD, NetBSD (as puffs), OpenSolaris, Minix 3, macOS,[2] and Windows.[3]

FUSE is free software originally released under the terms of the GNU General Public License and the GNU Lesser General Public License.

History

[edit]

The FUSE system was originally part of AVFS (A Virtual Filesystem), a filesystem implementation heavily influenced by the translator concept of the GNU Hurd.[4] It superseded Linux Userland Filesystem, and provided a translational interface using lufis in libfuse1.

FUSE was originally released under the terms of the GNU General Public License and the GNU Lesser General Public License, later also reimplemented as part of the FreeBSD base system[5] and released under the terms of Simplified BSD license. An ISC-licensed re-implementation by Sylvestre Gallon was released in March 2013,[6] and incorporated into OpenBSD in June 2013.[7]

FUSE was merged into the mainstream Linux kernel tree in kernel version 2.6.14.[8]

The userspace side of FUSE, the libfuse 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 of libfuse 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.

Operation and usage

[edit]
A flow-chart diagram showing how FUSE works: Request from userspace to list files (ls -l /tmp/fuse) gets redirected by the Kernel through VFS to FUSE. FUSE then executes the registered handler program (./hello) and passes it the request (ls -l /tmp/fuse). The handler program returns a response back to FUSE which is then redirected to the userspace program that originally made the request.

To implement a new file system, a handler program linked to the supplied libfuse 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 to mount 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.

Unmounting a FUSE-based file system with the fusermount command

FUSE is particularly useful for writing virtual 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.

Applications

[edit]

On-disk file systems

[edit]

Conventional on-disk file systems can be implemented in user space with FUSE, e.g. for compatibility or licensing reasons.

  • Linear Tape File System: Allows files stored on magnetic tape to be accessed in a similar fashion to those on disk or removable flash drives.
  • NTFS-3G and Captive NTFS, allowing access to NTFS filesystems.
  • retro-fuse: retro-fuse is a user-space filesystem that provides a way to mount filesystems created by ancient Unix systems on modern OSes. The current version of retro-fuse supports mounting filesystems created by Fifth, Sixth and Seventh Edition of Research Unix from Bell Labs, as well as 2.9BSD and 2.11BSD based systems.

Layering file systems

[edit]

FUSE filesystems can create a view of an underlying file system, transforming the files in some way.

Archive and backup file systems

[edit]

FUSE filesystems can expose the contents of archives or backup sets without having to first extract them.

  • archivemount
  • Atlas (Rubrik backup software): Immutable, distributed filesystem used by Rubrik Cloud Data Management data protection applications
  • Borg (backup software): Deduplicating backup program that allows backup archives to be mounted as FUSE filesystems.
  • Restic: Free, fast, efficient and secure backup software uses FUSE to be able to browse all of your backup snapshots as a regular file system
  • SPFS A file system for Spectrum Protect, designed to mount the backup server filespace anywhere on your server, and use the features included from the backup server (encryption, de-duplication, compression, filtering etc). This is a WORM file system.

Remote/distributed file system clients

[edit]
  • CernVM-FS: A distributed read-only software distribution system, implemented as a POSIX filesystem in user space (FUSE) using HTTP transport, to deliver software in a fast and reliable fashion at global scale.
  • CloudStore (formerly, Kosmos filesystem): By mounting via FUSE, existing Linux utilities can interact with CloudStore
  • ExpanDrive: A commercial filesystem implementing SFTP/FTP/S3/Swift using FUSE
  • FTPFS
  • GlusterFS: Clustered Distributed Filesystem having ability to scale up to several petabytes.
  • goofys: A FUSE filesystem that allows access to Amazon S3/Microsoft Azure storage with an emphasis on performance.
  • google-drive-ocamlfuse is a FUSE filesystem for Google Drive, written in OCaml. It lets you mount your Google Drive on Linux.
  • IPFS: A peer-to-peer distributed file system that seeks to connect all computing devices with the same system of files.
  • JuiceFS: A distributed POSIX file system built on top of Redis and S3.
  • KBFS: A distributed filesystem with end-to-end encryption and a global namespace based on Keybase.io service that uses FUSE to create cryptographically secure file mounts.
  • Lustre Cluster filesystem will use FUSE to allow it to run in userspace, so that a FreeBSD port is possible.[11] However, the ZFS-Linux port of Lustre will be running ZFS's DMU (Data Management Unit) in userspace.[12]
  • MinFS: MinFS is a fuse driver for Amazon S3 compatible object storage server. MinFS[13] lets you mount a remote bucket (from a S3 compatible object store), as if it were a local directory.
  • MooseFS: An open source distributed fault-tolerant file system available on every OS with FUSE implementation (Linux, FreeBSD, NetBSD, OpenSolaris, OS X), able to store petabytes of data spread over several servers visible as one resource.
  • Nexfs: A commercial Linux file system that combines Block, File, and S3 compatible Cloud & Object storage into a single pool of POSIX compatible storage.
  • ObjectiveFS: Distributed filesystem with object store backend (Amazon S3, Google Cloud Storage or S3-compatible object store) using FUSE
  • Rclone can mount a variety of remote / cloud storage with FUSE.
  • s3fs: Gives the ability to mount an S3 bucket as if it were a local file system.
  • Sector File System: Sector is a distributed file system designed for large amount of commodity computers. Sector uses FUSE to provide a mountable local file system interface.
  • SSHFS: Provides access to a remote filesystem through SSH.
  • Transmit: A commercial FTP client that also adds the ability to mount WebDAV, SFTP, FTP and Amazon S3 servers as disks in Finder, via MacFUSE.
  • WebDrive: A commercial filesystem implementing WebDAV, SFTP, FTP, FTPS and Amazon S3
  • WikipediaFS: View and edit Wikipedia articles as if they were real files
  • Wuala: Was a multi-platform, Java-based fully OS integrated distributed file system. Using FUSE, MacFUSE and CBFS Connect respectively for file system integration, in addition to a Java-based app accessible from any Java-enabled web browser (service discontinued in 2015).
  • IndexFS: A remote file aggregating filesystem with transparent CURL access to distributed files.

Other

[edit]
  • GVfs: The virtual filesystem for the GNOME desktop
  • rvault: A secure and authenticated store for secrets and small documents using envelope encryption with one-time password (OTP) authentication. It uses FUSE to expose the vault as a file system.

See also

[edit]

References

[edit]
  1. ^ "Release 3.16.2". 10 October 2023. Retrieved 19 October 2023.
  2. ^ "Home - FUSE for OS X".
  3. ^ Zissimopoulos, Bill (2021-02-14), billziss-gh/winfsp, retrieved 2021-02-16
  4. ^ "Some technical advantages of the Hurd". May 15, 2011. Retrieved March 28, 2016.
  5. ^ "WhatsNew/FreeBSD10 - FreeBSD Wiki".
  6. ^ "openbsd dev - tech - Fuse (and sshfs) support for OpenBSD". Archived from the original on 2020-10-26. Retrieved 2013-07-14.
  7. ^ "'CVS: cvs.openbsd.org: src' - MARC".
  8. ^ "file-systems.fuse.devel - FUSE merged to 2.6.14! - msg#00021 - Recent Discussion OSDir.com". Archived from the original on 2016-04-20.
  9. ^ "libfuse/libfuse, the reference implementation of the Linux FUSE (Filesystem in Userspace) interface". libfuse. 9 January 2020. Retrieved 9 January 2020.
  10. ^ "libfuse3 ChangeLog". GitHub. Retrieved 9 January 2020.
  11. ^ "Lustre FreeBSD". Archived from the original on 2008-03-12. Retrieved 2008-03-02.
  12. ^ "Architecture ZFS for Lustre". Sun Microsystems. Archived from the original on 2009-01-22. Retrieved 2008-03-02.
  13. ^ "minio/minfs". GitHub. Retrieved 12 April 2018.
[edit]