Userspace FUSE for macOS
FUSE-T is a kext-less implementation of FUSE for macOS that uses NFS v4 local server instead of a kernel extension.
The main motivation for this project is to replace macfuse (https://osxfuse.github.io/) that implements its own kext to make fuse work. With each version of macOS it's getting harder and harder to load kernel extensions. Apple strongly discourages it and, for this reason, software distributions that include macfuse are very difficult to install.
Additionally, the macfuse kext is unstable, may cause frequent system crashes and kernel lock-ups. Given those limitations many software publishers are unable to use macfuse anymore.
FUSE-T doesn't make use of kernel extension, it implements its own userspace server that converts between FUSE protocol and NFS calls and let macOS mount NFS volume instead of a kernel filesystem.
Drop-in replacement for osxfuse (https://osxfuse.github.io/). API headers in libfuse are identical so there's no need to change anything in the filesystem implementation. The APIs are compatible with macfuse but differ from the Linux version of libfuse because the macfuse project was not updated in sync with the corresponding Linux version
Kext-less, no kernel extensions needed
NFSv4 protocol to better support macOS features such as extended attributes, file locks and others
Stable, easy to mount and unmount volumes with macOS built-in tools, no need for proprietary fusermount
Performance, FUSE-T offers much better performance and this is due to excellent macOS client side NFSv4 implementation
How FUSE-T works
When a filesystem issues a mount API call, libfuse launches a FUSE-T NFS server that exposes a local TCP port to the macOS mount process and another communication channel to libfuse.
After that a macOS mount_nfs command is executed and NFS RPCs are getting called on the server. The server converts NFS RPC calls into FUSE requests that emulate the original kernel to libfuse protocol. Those requests are executed in libfuse and then passed to the corresponding FUSE filesystem, the result is passed back to the macOS NFS client.
After the filesystem process dies the NFS server unmounts the NFS folder mounted previously and terminate itself.
Installing from brew
brew tap macos-fuse-t/homebrew-cask
brew install fuse-t
brew install fuse-t-sshfs
The sshfs project
Email me at email@example.com