Choose the Linux FUSE and message-parsing implementation stack #3
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: phg/fuse-mail-dir-by-tag#3
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?
Part of #1
Question
Against official documentation and upstream source, which maintained implementation language, Linux FUSE binding, RFC-message/address parser, filesystem-watching facility, and persistence approach best fit the required writable projection, concurrency model, near-real-time updates, 100,000-message scale, Nix packaging, and long-running systemd operation? Record a recommendation with rejected alternatives and risks.
Claimed by Codex research agent /root/research_fuse_stack for resolution on branch research/linux-fuse-message-stack.
Resolution
Choose stable Rust with:
fuser0.17 (default/no-libfuse build) for the inode-oriented Linux FUSE server and kernel cache invalidation;mailparse0.16.1 for bounded, header-only parsing and address parsing on every repeated delivery/visible-recipient header;inotifyon a dedicated thread for exact move cookies and overflow/watch failure handling;rusqlitelinked to the Nix-provided SQLite, using one coordinator-owned connection in rollback-journal mode;The source Maildir remains authoritative. SQLite is a disposable metadata/inode cache: startup performs a complete reconcile before mounting, and overflow or inconsistency rebuilds while the last complete snapshot remains served. FUSE writes and external watcher events share the coordinator; source rename/unlink happens before the index transaction, with reconciliation healing any crash gap. Message bodies are neither parsed nor cached.
The strongest rejected alternative is Go with
go-fuse/v2; it remains viable for a Go-strong team. Rustfuse3adds an unnecessary async runtime and had failed 0.9.0 docs generation; C/libfuse adds avoidable memory-safety complexity;mail-parseris richer than the header-only job; cross-platformnotifyhides Linux details this design needs. Principal risks are Dovecot/FUSE cache semantics, duplicate-path races, inotify loss/races, tolerant parser edge cases, and the unavoidable Maildir/SQLite crash gap; the findings prescribe black-box, overflow, corpus, crash-injection, and 100,000-message/10,000-tag scale tests.Evidence and full trade-off analysis:
research/linux-fuse-message-stackb6048de04f6996226fbba070b9919edb1c37c0dbdocs/research/linux-fuse-message-stack.md