I am very pleased to announce the third (and hopefully final) release
candidate of libfuse 3. As you may have already heard, FUSE 3 adds
several exiting new features and gets rid of several historical bugs
that could not be fixed without breaking backwards compatibility.
This is a release candidate, so functionality and API will correspond to
the final release unless any serious bugs are discovered.
The changes from the last release candidate look somewhat bigger than I
would like, but I think there are valid reasons for including
them. Apart from bugfixes for issues that were discovered when running
more exotic setups, the biggest change is that libfuse now defaults to
*enabling* most of the capabilities that were disabled by default in
libfuse 2. All of these features should be enabled whenever possible,
and the only reason libfuse 2 did not do so was to preserve backwards
compatibility. libfuse3 is the only chance that we have to switch to
saner defaults for quite some time, so it makes sense to make this
* Added documentation for all fuse capability flags (`FUSE_CAP_*`) and
`struct fuse_conn_info` fields.
* fuse_loop(), fuse_loop_mt(), fuse_session_loop() and
fuse_session_loop_mt() now return more detailed error codes instead
of just -1. See the documentation of fuse_session_loop() for details.
* The FUSE main loop is now aborted if the file-system requests
capabilities that are not supported by the kernel. In this case, the
session loop is exited with a return code of ``-EPROTO``.
* Most file-system capabilities that were opt-in in libfuse2 are now
enabled by default. Filesystem developers are encouraged to review
the documentation of the FUSE_CAP_* features to ensure that their
filesystem is compatible with the new semantics. As before, a
particular capability can still be disabled by unsetting the
corresponding bit of `fuse_conn_info.wants` in the init() handler.
* Added FUSE_CAP_PARALLEL_DIROPS and FUSE_CAP_POSIX_ACL,
FUSE_HANDLE_KILLPRIV feature flags.
* FUSE filesystems are now responsible for unsetting the setuid/setgid
flags when a file is written, truncated, or its owner
changed. Previously, this was handled by the kernel but subject to
* The ``allow_other`` and ``allow_root`` mount options (accepted by
`fuse_session_new()`) may now be specified together. In this case,
``allow_root`` takes precedence.