Conversation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
Thanks for looking into this @wjmelements, macFUSE support has been broken for a while and it's good to see someone poking at it.
I do not think we can merge this as-is, I want to share some context about the FUSE library landscape that affects which direction we take here.
The state of bazil.org/fuse
The current dependency (bazil.org/fuse) is maintained by Tommi Virtanen (tv42), essentially a one-person project. The last commit was January 2023, there are 62 open issues and 22 unreviewed PRs. macOS support was deliberately removed in April 2020 after OSXFUSE went closed-source. We're pinned to a Jan 2020 snapshot from before that removal. It's effectively abandoned.
The state of seaweedfs/fuse
seaweedfs/fuse was forked from bazil by Chris Lu (SeaweedFS creator) in December 2018. It added macFUSE 4.x support, some perf improvements, and a data race fix. The last commit was August 2023, and v1.2.3 is the latest tag. It is 36 commits ahead of bazil but roughly 200 commits behind .
As of January 2026, SeaweedFS uses seaweedfs/go-fuse (a fork of hanwen/go-fuse), a completely different FUSE library. The fork's own creator has walked away from it. Only about 17 packages import seaweedfs/fuse, almost all SeaweedFS forks.
This PR's seaweedfs/fuse swap is trading one abandoned library for another abandoned library. It solves the immediate macFUSE 4/5 detection problem but doesn't improve the long-term situation.
What the ecosystem is doing
The Go FUSE ecosystem has largely converged on two paths:
-
hanwen/go-fuse(2,300 stars, last commit March 2026, maintained by Han-Wen Nienhuys at Google) is the de facto standard. Used by gocryptfs, kopia, containerd, and rclone's newermount2backend. Has FUSE3 support and the best performance. SeaweedFS moved here. The downside: completely different API from bazil, so migration means rewriting kubo'sfuse/layer. -
anacrolix/fuse(43 stars, last commit March 2026, maintained by Matt Joiner) is the most actively maintained bazil fork. It's API-compatible (drop-in replacement), supports macFUSE 4+, and adds FUSE-T support (kext-less macOS FUSE, which is where Apple is pushing things). Used by restic. No FUSE3 support, and restic acknowledges it as a stopgap, but it is actively maintained today.
For comparison:
| Library | Last commit | Maintained | bazil API compat | macOS | FUSE3 |
|---|---|---|---|---|---|
bazil.org/fuse |
Jan 2023 | No | -- | No | No |
seaweedfs/fuse |
Aug 2023 | No | Yes | macFUSE 4 | No |
anacrolix/fuse |
Mar 2026 | Yes | Yes (drop-in) | macFUSE + FUSE-T | No |
hanwen/go-fuse |
Mar 2026 | Yes | No (rewrite) | Yes | Yes |
What I think we should do
I appreciate the pragmatic approach here, but if we're going to touch the FUSE dependency, we should pick something that's actually maintained rather than swapping one dormant library for another. The tryMacFUSEPlist() addition for version detection is a good idea regardless of which library we use.
If the goal is "fix macFUSE with minimal effort now", anacrolix/fuse would be the better drop-in since it's actively maintained and also supports FUSE-T (which matters as Apple continues to deprecate kernel extensions).
But my personal opinion as a maintainer is that we should not do necromancy for macOS, unless there is clear benefit to ecosystem?
The proper long-term fix is migrating to hanwen/go-fuse, which is where the ecosystem has settled, but that's a bigger project and probably a separate effort. And adding proper end-to-end tests to test/cli (to replace legacy test/sharness) that run on both macos and linux (similar to how migration tests run on windows/macos/linux.
Thoughts?
|
ok I picked
I definitely have time to do that if you would accept it.
I agree, but I am less sure that I will have time to do it. |
|
@wjmelements ack, perhaps a good compromise and value add for now is going with So the next steps here would be: Use
|
Reviewer @lidel
Changes