3 ms·
I suspect if you've run into problems with a lot of things built on FUSE, the problem is FUSE. Yes, s3fs and sshfs can both leave the system in an unstable sta
by blagie 3y ago
I suspect if you've run into problems with a lot of things built on FUSE, the problem is FUSE.
Yes, s3fs and sshfs can both leave the system in an unstable state. For example, there can be a dead mount which is impossible to unmount, and in severe cases, blocks a clean reboot.
A file system in user space (or in network space) should NEVER break the system, no matter what happens in user space (or in network space). Most network file systems try to respect this (albeit with mixed success). FUSE does not.
I'm not claiming FUSE cannot be made to work. Just that it's very bad since (1) plenty of smart people clearly failed to do so (2) the badness it leaves behind should be more than it's permitted to.
I can point to specific issues, but at the end of the day, that's neither here nor there. At the end of the day, something like:
https://github.com/libfuse/libfuse/blob/master/example/poll.c https://github.com/libfuse/libfuse/blob/master/example/poll....
Is about a hundred times more complicated than it should be. It should not require memsets, pthread mutexes, or flags, and should probably have an implementation in a modern, high-level language. To a large extent, that's the point of moving things out of the kernel.
I'm even perhaps okay with being permitted to do low-level operations for a particularly performance-constrained subsystem, but that's not 95% of the uses of something like FUSE.
Footnote: I actually enjoyed writing low-level code like this a lot, when computers were in the single-digit to triple-digit MHz range, and we didn't need to worry about people breaking in over a ubiquitous worldwide internet, but I left that mindset behind decades ago. Right now, I want code to be stable, simple, auditable, and secure.