Port fuse from FreeBSD
kusumi.tomohiro at gmail.com
Thu Sep 15 14:59:09 PDT 2016
I'm thinking about porting fuse from FreeBSD. Several benefits by doing this.
1. There are some good fuse based fs like sshfs, ntfs-3g and maybe
some others I'm not really aware of (like glusterfs if it ever worked
on BSD ?).
2. puffs in DragonFly is broken according to other devs/users, and no
one is really going to fix it (which is fine with me too).
3. We probably don't need (a broken) puffs if we get (a working) fuse,
given the fact that most userspace filesystems are written for Linux
fuse, but not for NetBSD puffs. NetBSD puffs seems to provide a some
sort of emulation layer for compatibility with fuse, but ours
apparently doesn't because it's broken.
I haven't written any code yet, and won't be for another 2-3 weeks,
but was looking at fuse (a kernel subsystem in FreeBSD and Linux
kernel), libfuse (userspace portion of fuse) and some specific
filesystem implementations such as sshfs.
The target will be the next DragonFly release which is 4.8. Not sure
if I can make it if we're to release 4.8 within 2016 (which is only 4
months from 4.6), but I should be able to make it otherwise with good
enough stability for the initial release.
The difficult part is that it's kinda difficult to tell how long it
takes to port fuse, given the concept of the fuse itself. It's easy to
imagine some sort of bugs will be exremely difficult to fix or even
I know DragonFly users want ntfs(3g), but the initial release won't
target ntfs. In theory, having fuse subsystem with good stability
should mean it runs ntfs, but ntfs is probably way too complex to make
it reliably work without bunch of try-and-errors within fuse itself.
sshfs seems to be a good one for dogfooding the fuse on DragonFly once
it starts to work, because sshfs isn't a toy fs (I think it's quite
popular among Linux users) yet the code size isn't that huge, plus
it's written by the same author as fuse in Linux kernel which
guarantees good code quality.
If porting a kernel subsystem goes as expected, I'll eventually need
marino@ (or someone who is as good) to help with userspace. One of the
issue with libfuse is that ./configure doesn't recognize DragonFly as
a BSD, probably because our uname doesn't contain "BSD" (see around
line 12000 of ./configure), and tries to compile with Linux specific
code (e.g. mount(2) with 5 arguments instead of four). I may be able
to fix these issues myself, but I doubt I do it in a right way.
I'm also willing to fix any issues I may encounter on FreeBSD.
If everything goes as expected, we can get rid of puffs in 4.8.
More information about the Users