FUSE ( Filesystem in Userspace ) est une interface logicielle pour les systèmes d'exploitation Unix et de type Unix qui permet aux utilisateurs non privilégiés de créer leurs propres systèmes de fichiers sans modifier le code du noyau . Ceci est rendu possible grâce à l'exécution du code du système de fichiers dans l'espace utilisateur , le module FUSE assurant uniquement l'interface avec le noyau.
FUSE est disponible pour Linux , FreeBSD , OpenBSD , NetBSD (sous forme de puffs ), OpenSolaris , Minix 3 , macOS , MorphOS (sous forme de filesysbox.library) et Windows .
FUSE est un logiciel libre initialement distribué sous les termes de la licence publique générale GNU et de la licence publique générale limitée GNU .
Histoire
Les utilisateurs de Plan 9 disposent d'une commande ftpfs permettant de se connecter à un serveur FTP, de transférer les fichiers distants dans leur espace de noms et de traduire les opérations 9p en opérations FTP. Ceci permet aux utilitaires standards (grep, sed, etc.) d'accéder directement aux fichiers distants. Depuis, plusieurs implémentations de ftpfs et sshfs ont vu le jour.
Le système FUSE faisait initialement partie d' AVFS ( A Virtual Filesystem ), une implémentation de système de fichiers fortement influencée par le concept de traducteur du GNU Hurd . Il a remplacé le système de fichiers utilisateur Linux et fourni une interface de traduction utilisant lufislibfuse1.
FUSE a été initialement distribué sous les termes de la licence publique générale GNU et de la licence publique générale limitée GNU , puis réimplémenté dans le cadre du système de base FreeBSD et distribué sous les termes de la licence BSD simplifiée . Une réimplémentation sous licence ISC par Sylvestre Gallon a été publiée en mars 2013 et intégrée à OpenBSD en juin 2013
FUSE a été intégré à l' arbre du noyau Linux principal dans la version 2.6.14.(2005)
La partie espace utilisateur de FUSE, la bibliothèque libfuse , a généralement suivi le rythme de développement du noyau Linux tout en maintenant une compatibilité « au mieux » avec les distributions dérivées de BSD. Ceci est possible car le noyau FUSE gère ses propres « niveaux de fonctionnalités », ou versions. L’exception est la version dérivée de FUSE pour macOS, OSXFUSE, qui présente trop de différences pour permettre le partage d’une même bibliothèque. Une rupture dans l’histoire de libfuse est la version libfuse3, qui inclut des améliorations incompatibles au niveau de l’interface et des performances, par rapport à l’ancienne version libfuse2, désormais en mode maintenance.
Le protocole FUSE entre le noyau et l'espace utilisateur étant versionné et public, un programmeur peut choisir d'utiliser un autre composant logiciel à la place de libfuse tout en communiquant avec les fonctionnalités FUSE du noyau. Par ailleurs, libfuse et ses nombreux ports offrent une interface de haut niveau portable, utilisable sur un système dépourvu de FUSE.
Ports, forks et réimplémentations
La version de FUSE pour Mac OS X présente trop de différences pour partager la même bibliothèque que les systèmes libfuse classiques . Lancée sous le nom de MacFUSE de Google en 2009, elle a été dérivée en OSXFUSE en 2011 par Benjamin Fleischer. OSXFUSE a été renommé macFUSE en 2020 suite au changement de nom de Mac OS X en macOS. La version actuelle de macFUSE se compose d'une extension noyau propriétaire et de trois bibliothèques espace utilisateur open source : une version dérivée de libfuse2, une version dérivée de libfuse3 et un framework Objective-C permettant d'accéder aux fonctionnalités spécifiques à macFUSE. La dernière version entièrement open source était OSXFUSE 3.8.3, sortie en 2018.
WinFsp est une interface de pilote de système de fichiers en espace utilisateur pour Windows, distribuée sous licence GPLv3. Elle implémente les API C libfuse2 et libfuse3, ainsi que ses propres API pour C et .NET.
OpenHarmony utilise une version dérivée de libfuse3 comme « composant tiers » avec des modifications minimales. On ignore si cette inclusion concerne uniquement les branches d'OpenHarmony basées sur le noyau Linux (ce qui serait trivial) ou également leurs noyaux personnalisés LiteOS et UniProton.
Fonctionnement et utilisation

Pour implémenter un nouveau système de fichiers, libfuseil est nécessaire d'écrire un programme gestionnaire lié à la bibliothèque fournie. Ce programme a pour fonction principale de définir comment le système de fichiers doit répondre aux requêtes de lecture/écriture/stat. Il sert également à monter le nouveau système de fichiers. Lors du montage, le gestionnaire est enregistré auprès du noyau. Si un utilisateur effectue ensuite des requêtes de lecture/écriture/stat pour ce système de fichiers nouvellement monté, le noyau transmet ces requêtes d'E/S au gestionnaire, puis renvoie la réponse de ce dernier à l'utilisateur.

fusermountcommandeFUSE est particulièrement utile pour écrire des systèmes de fichiers virtuels . Contrairement aux systèmes de fichiers traditionnels qui interagissent avec les données stockées sur un support de stockage de masse, les systèmes de fichiers virtuels ne stockent pas directement les données. Ils servent de représentation ou d'interface pour un système de fichiers ou un périphérique de stockage existant.
En principe, toute ressource disponible pour une implémentation FUSE peut être exportée sous forme de système de fichiers.
La version de FUSE dans le noyau Linux inclut diverses fonctionnalités optionnelles qui peuvent être activées pour améliorer les performances, notamment la mise en cache en écriture différée (par opposition à l'écriture immédiate) et le transfert direct des E/S.
Applications
Systèmes de fichiers sur disque
Les systèmes de fichiers classiques sur disque peuvent être implémentés dans l'espace utilisateur avec FUSE, par exemple pour des raisons de compatibilité ou de licence.
- Système de fichiers sur bande linéaire : Permet d’accéder aux fichiers stockés sur bande magnétique de la même manière qu’à ceux stockés sur disque dur ou sur clé USB.
- NTFS-3G et NTFS captif permettent l'accès aux systèmes de fichiers NTFS .
- Retro - Fuse est un système de fichiers en espace utilisateur permettant de monter des systèmes de fichiers créés par d'anciens systèmes Unix sur des systèmes d'exploitation modernes. La version actuelle de Retro-Fuse prend en charge le montage des systèmes de fichiers créés par les versions 5, 6 et 7 de Research Unix ( Bell Labs) , ainsi que par les systèmes basés sur 2.9BSD et 2.11BSD.
Systèmes de fichiers en couches
Les systèmes de fichiers FUSE peuvent créer une vue d'un système de fichiers sous-jacent, en transformant les fichiers d'une certaine manière.
- EncFS : Système de fichiers virtuel chiffré
- FuseCompress, gzipfs, Fuse-ZIP, CompFUSEd : Systèmes de fichiers virtuels compressés
- Les systèmes de fichiers d'archivage peuvent également effectuer cette tâche
Systèmes de fichiers d'archivage et de sauvegarde
Les systèmes de fichiers FUSE peuvent exposer le contenu des archives ou des ensembles de sauvegarde sans avoir à les extraire au préalable.
- archivemount
- Atlas (logiciel de sauvegarde Rubrik) : Système de fichiers immuable et distribué utilisé par les applications de protection des données Rubrik Cloud Data Management
- Borg (logiciel de sauvegarde) : Programme de sauvegarde dédupliquée qui permet de monter les archives de sauvegarde en tant que systèmes de fichiers FUSE.
- Restic : Logiciel de sauvegarde gratuit, rapide, efficace et sécurisé utilisant FUSE pour vous permettre de parcourir tous vos instantanés de sauvegarde comme un système de fichiers classique.
- SPFS est un système de fichiers pour Spectrum Protect, conçu pour monter l'espace de fichiers du serveur de sauvegarde n'importe où sur votre serveur et utiliser les fonctionnalités incluses par ce dernier (chiffrement, déduplication, compression, filtrage, etc.). Il s'agit d'un système de fichiers WORM .
Clients de système de fichiers distants/distribués
- CernVM-FS : Un système de distribution de logiciels en lecture seule, implémenté comme un système de fichiers POSIX dans l'espace utilisateur (FUSE) utilisant le transport HTTP, pour distribuer des logiciels de manière rapide et fiable à l'échelle mondiale.
- CloudStore (anciennement Kosmos filesystem) : en le montant via FUSE, les utilitaires Linux existants peuvent interagir avec CloudStore.
- ExpanDrive : Un système de fichiers commercial implémentant SFTP/FTP/S3/Swift utilisant FUSE
- FTPFS
- GlusterFS : Système de fichiers distribué en cluster capable de s’étendre jusqu’à plusieurs pétaoctets.
- goofys : Un système de fichiers FUSE qui permet d'accéder au stockage Amazon S3/Microsoft Azure en mettant l'accent sur les performances.
- google-drive-ocamlfuse est un système de fichiers FUSE pour Google Drive, écrit en OCaml . Il permet de monter votre Google Drive sous Linux.
- IPFS : Un système de fichiers distribué pair à pair qui vise à connecter tous les appareils informatiques avec le même système de fichiers.
- JuiceFS : Un système de fichiers POSIX distribué, construit sur Redis et S3.
- KBFS : Un système de fichiers distribué avec chiffrement de bout en bout et un espace de noms global basé sur le service Keybase.io qui utilise FUSE pour créer des points de montage de fichiers cryptographiquement sécurisés.
- Le système de fichiers Lustre Cluster utilisera FUSE pour lui permettre de s'exécuter dans l'espace utilisateur, rendant ainsi possible un portage vers FreeBSD. Cependant, le portage ZFS -Linux de Lustre exécutera l'unité de gestion des données (DMU) de ZFS dans l'espace utilisateur.
- MinFS : MinFS est un pilote FUSE pour serveur de stockage d'objets compatible Amazon S3. MinFS permet de monter un compartiment distant (d'un stockage d'objets compatible S3) comme s'il s'agissait d'un répertoire local.
- MooseFS : Un système de fichiers distribué et tolérant aux pannes, disponible sur tous les systèmes d'exploitation dotés de l'implémentation FUSE (Linux, FreeBSD, NetBSD, OpenSolaris, OS X), capable de stocker des pétaoctets de données répartis sur plusieurs serveurs visibles comme une seule ressource.
- Nexfs : Un système de fichiers Linux commercial qui combine le stockage cloud et objet compatible bloc, fichier et S3 dans un seul pool de stockage compatible POSIX.
- ObjectiveFS : Système de fichiers distribué avec stockage d'objets en arrière-plan (Amazon S3, Google Cloud Storage ou stockage d'objets compatible S3) utilisant FUSE
- Rclone peut monter divers systèmes de stockage distants/cloud avec FUSE.
- s3fs : Permet de monter un compartiment S3 comme s'il s'agissait d'un système de fichiers local.
- Système de fichiers Sector : Sector est un système de fichiers distribué conçu pour les ordinateurs grand public. Sector utilise FUSE pour fournir une interface de système de fichiers local montable.
- SSHFS : Permet d'accéder à un système de fichiers distant via SSH .
- Transmit : Un client FTP commercial qui permet également de monter les serveurs WebDAV, SFTP, FTP et Amazon S3 comme des disques dans le Finder, via MacFUSE.
- WebDrive : Un système de fichiers commercial implémentant WebDAV , SFTP, FTP, FTPS et Amazon S3
- WikipediaFS : Consultez et modifiez les articles Wikipédia comme s'il s'agissait de fichiers réels.
- Wuala : était un système de fichiers distribué multiplateforme, basé sur Java et entièrement intégré au système d'exploitation. Il utilisait respectivement FUSE, MacFUSE et CBFS Connect pour l'intégration du système de fichiers, en plus d'une application Java accessible depuis n'importe quel navigateur web compatible Java (service arrêté en 2015).
- IndexFS : Un système de fichiers distant agrégant des fichiers avec un accès CURL transparent aux fichiers distribués.
Autre
- GVfs : Le système de fichiers virtuel pour l’ environnement de bureau GNOME
- rvault : Un coffre-fort numérique sécurisé et authentifié pour les secrets et les documents de petite taille, utilisant le chiffrement par enveloppe et l’authentification par mot de passe à usage unique (OTP). Il utilise FUSE pour exposer le coffre-fort comme un système de fichiers.
- EaseFilter-Cloud-File-System : Un système de fichiers cloud Windows destiné aux développeurs en espace utilisateur, permettant de mettre en œuvre l'équilibrage de charge et la reprise après sinistre basée sur le cloud.