cryptomator / cryptomator/jfuse

Feature Request: libfuse3 support on macOS for FSKit backend

Open
#145 2 comments 1 reaction 1 assignee Claimed by @overheadhunter View on GitHub
Dominant language
Java
Stars
61
Forks
6
PR merge metrics
No merged PRs in 30d

Description

## Summary

The jfuse-mac module uses libfuse2, while jfuse-linux and jfuse-win use libfuse3. This creates a functionality gap on macOS where FSKit-based mounting is not available.

## Background

macFUSE 5.1.0+ has been adding support for an FSKit backend that allows FUSE filesystems to work without kernel extensions. This matters because Apple has made loading kexts increasingly restrictive - users must boot into Recovery Mode to enable third-party kexts.

The FSKit backend is enabled via `-o backend=fskit`. Per the macFUSE 5.1.0 release notes, this option is only supported with libfuse3:

> "When specifying the mount option `-o backend=fskit`, libfuse3 will use the FSKit backend to mount the file system."

Since jfuse-mac uses libfuse2, the FSKit option is not available.

Note: FSKit support in macFUSE may still be maturing (see https://github.com/macfuse/macfuse/issues/1070), and FSKit is not a free lunch - it has significant limitations regarding what information is available to the filesystem compared to the kext backend, so compatibility will be limited. Due to these limitations, it may be valuable to ensure failures happen early and clearly so users aren't surprised when filesystems don't work properly with FSKit. However, having libfuse3 support would at least allow users to try it when it's ready.

## Current Behavior

```
$ # Using jfuse on macOS with libfuse2
mount_macfuse: the file system is not available (1)

$ # Attempting FSKit option
fuse: invalid argument 'backend=fskit' # libfuse2 doesn't recognize this option
```

## Requested Behavior

Update jfuse-mac to use libfuse3 instead of libfuse2, matching the approach used on Linux and Windows. macFUSE ships libfuse3 at `/usr/local/lib/libfuse3.4.dylib`.

## Technical Details

The jfuse-mac pom.xml currently references:
```xml
${project.parent.basedir}/libfuse2/include/fuse.h
FUSE_USE_VERSION=29
```

For libfuse3 support, this would need to change to the fuse3 headers and appropriate version macros.

## Questions

1. Is there a technical reason jfuse-mac uses libfuse2 instead of libfuse3?
2. Are there any known compatibility concerns with macFUSE's libfuse3 implementation?
3. Given FSKit's limitations, should jfuse provide a way to detect when FSKit is being used and warn/fail early if the filesystem uses unsupported features?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.