Skip to content

pleiszenburg/Pythonic-Filesystems-in-Userspace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Pythonic Filesystems in Userspace (FUSE) in 2019

Filesystem in Userspace

API

Two widely used versions exist: 2 and 3. While version 3 is currently being adopted by more and more projects, most FUSE file systems tend to use version 2 at this point.

Besides API versions, there are also two API levels: The high level FUSE API and the low level FUSE API.

Not all FUSE libraries and bindings offer both API versions and/or API levels. This must be taken into consideration when developing a cross-platform FUSE file system.

Libraries

While FUSE is (at least in the Unix world) a Kernel feature, several user space libraries exist for easy access. libfuse acts as the reference implementation.

In summary, FUSE is supported on Linux, FreeBDS, OpenBSD, NetBSD, Mac OS X and Windows. APIs are (more or less) compatible. FUSE is also known to work on OpenSolaris/Illumos, Minix and Android.

Python bindings

Several competing Python bindings for FUSE exist. Some are unmaintained. Some are offering access only to the high level API or to the low level API. Some are not suitable for cross-platform use.

Getting precise usage statistics is not trivial. The above numbers are based partially on GitHub's "used by" statistics and partially on current numbers from libraries.io.

python-fuse (high level API, versions 2) and python-llfuse (low level API, version 2) were developed by the original libfuse authors - specifically as bindings to libfuse. While python-fuse is still being maintained, support for python-llfuse has been dropped. It is superseded by pyfuse3 (low level API, version 3), which is also being developed by the libfuse team. pyfuse3 is the currently only async-enabled Python FUSE package.

fusepy is the currently only viable cross-platform Python implementation. It offers both low and high level API bindings in version 2 where possible. Its is based on ctypes. Development seized in 2016 and was only briefly resumed in 2018. Several forks attempt to continue development, e.g. refuse.

Python binding abstraction layers

Introductions

Relevant news