Mono.Fuse is a binding for the FUSE library, permitting user-space file systems to be written in C#.
What about SULF?
Mono.Fuse has no relation to SULF or fusewrapper, for three reasons:
- They go to great efforts to avoid a Mono.Posix.dll dependency, duplicating Mono.Unix.Native.Stat (Fuse.Stat), Mono.Unix.Native.Statvfs (Fuse.StatFS), and many methods from Mono.Unix.Native.Syscall (Fuse.Wrapper).
- I don't like the SULF API. (Not that I spent a great deal of time looking at it, but what I did see I didn't like.) SULF is an inode-based API, while Mono.Fuse is a path-based API. I think paths are easier to deal with, while Valient Gough believes inodes are.
- SULF wraps the FUSE kernel-level interface, while Mono.Fuse wraps the higher level libfuse C interface.
I find (1) the most appalling, if only because I'm the Mono.Posix maintainer and I'd like to see my work actually used. :-)
Once I started writing Mono.Fuse, I discovered a good reason to avoid Mono.Posix: it's currently impossible to use the native MonoPosixHelper shared library from outside of Mono. I figured this would be a good opportunity to rectify that, making it easier for additional libraries to build upon the Mono.Posix infrastructure.
Mono.Fuse has since been updated so that it doesn't require Mono class library changes, and thus can work on the "stable" Mono 1.1.13.
Source code is available.