P4-4: Linux provider — FUSE (no OS standard exists) #47
Labels
No labels
data-integrity
engine
platform
procurement
remote
scaffold
ui
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: Cordy/cairn-desktop#47
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Depends on P4-3.
The situation
Linux has no equivalent of Cloud Filter or File Provider. There is no desktop-wide
placeholder mechanism, no standard hydration callback, and no file-manager convention for
"cloud file". OpenCloud is writing
openvfsfrom scratch in 2026 for exactly this reason.So this is not "port the pattern" — it is "build the mechanism". Weigh that before committing.
Options
A. FUSE mount. Present the Cairn as a FUSE filesystem; content fetched on
read().Recommended.
github.com/hanwen/go-fuseis mature and pure Go. Gives genuine files-on-demandwith no per-file-manager work.
Costs: the sync folder becomes a mount point, not a normal directory — different from the
Windows and macOS models. Requires the
fusekernel module (present on mainstream distros,absent in some containers and hardened kernels). Unmounting cleanly on crash needs care, or the
user is left with a hung mount that
lsblocks on forever.B. Do not ship it on Linux. Keep full sync on Linux and document the difference honestly.
Costs: feature inconsistency across platforms.
C. Wait for something standard. There is no credible candidate. Not a plan.
Recommendation: A, with B as the fallback if FUSE proves fragile in the beta. Decide
before writing code, and record the decision here.
Note the honest asymmetry: Linux is where Cairn's self-hosting audience lives, but almost
certainly not where the 2 TB-server-256 GB-laptop problem is most acute — that is a corporate
Windows and macOS fleet problem. Shipping A on Windows and macOS and B on Linux is a defensible
outcome, not a failure.
If FUSE
read()triggers a ranged GET; cache hydrated content on local disk so a second read is free.PinAlwaysfiles are kept in the cache and never evicted.than no feature — every
lsin that directory blocks, and users blame the app for freezingtheir file manager.
Steps
PlaceholderFSovergo-fuse.without a reboot.
git commit -s -m "feat(vfs): Linux FUSE placeholder provider"Acceptance criteria
fusemodule degrades to full sync with a clear message, rather than failing tostart.
internal/syncis unchanged.