What is new in 2.4

 - Simplify device opening.  Now '/dev/fuse' is a requirement

 - Allow module auto-loading if user has access to '/dev/fuse'

 - Allow mounting over a regular file for unprivileged users

 - Allow mounting of arbitrary FUSE filesystems from /etc/fstab

 - New mount options: 'umask=M', 'uid=N', 'gid=N'

 - Check for non-empty mountpoint, and refuse mount by default.  New
   mount option: 'nonempty'

 - Low level (inode based) API added

 - Allow 'direct_io' and 'keep_cache' options to be set on a
   case-by-case basis on open.

 - Add 'attr_timeout' and 'entry_timeout' mount options to the
   high-level library.  Until now these timeouts were fixed at 1 sec.

 - Some bugfixes

What is new in 2.3

 - Add new directory related operations: opendir(), readdir(),
   releasedir() and fsyncdir()

 - Add init() and destroy() operations which are called before the
   event loop is started and after it has exited

 - Update kernel ABI so that on dual architectures (e.g. AMD64) 32bit
   binaries work under a 64bit kernel

 - Bugfixes

What is new in 2.2

Userspace changes:

 - Add fuse_file_info structure to file operations, this allows the
   filesystem to return a file handle in open() which is passed to
   read(), write(), flush(), fsync() and release().

 - Add source compatibility with 2.1 and 1.4 releases

 - Binary compatibility with 2.1 release is retained

Kernel changes:

 - Make requests interruptible.  This prevents the filesystem to go
   into an unbreakable deadlock with itself.

 - Make readpages() synchronous.  Asynchronous requests are deadlock
   prone, since they cannot be interrupted (see above)

 - Remove shared-writeable mapping support, which could deadlock the
   machine

 - Remove INVALIDATE userspace initiated request

 - Update ABI to be independent of sizeof(long), so dual-size archs
   don't cause problems

 - Remove /sys/fs/fuse/version.  Version checking is now done through
   the fuse device

 - Replace directory reading method on the kernel interface.  Instead
   of passing an open file descriptor to the kernel, send data through
   the FUSE device, like all other operations.

============================================================================

What is new in 2.1

* Bug fixes

* Improved support for filesystems implementing a custom event-loop

* Add 'pkg-config' support

* Kernel module can be compiled separately

============================================================================

What is new in 1.9

* Lots of bugs fixed

* Minor modifications to the library API

* Improvements to the kernel/userspace interface

* Mounting by non-root made more secure

* Build shared library in addition to the static one

* Consolidated mount options

* Optimized reading under 2.6 kernels

* Direct I/O support

* Support file I/O on deleted files

* Extended attributes support

============================================================================

What is new in 1.3

* Thanks to user bugreports and stress testing with LTP and sfx-linux
a number of bugs were fixed, some quite serious.

* Fix compile problems with recent SuSE kernles

============================================================================

What is new in 1.2

* Fix mount problems on recent 2.6 kernels with SELinux enabled

* Fixed writing files lager than 2GBytes

* Other bugfixes

============================================================================

What is new in 1.1

* Support for the 2.6 kernels

* Support for exporting filesystem over NFS in 2.6 kernels

* Read efficiency improvements: read in 64k blocks instead of 4k
(Michael Grigoriev).  Can be turned on with '-l' option of fusermount

* Lazy automatic unmount

* Added 'fsync()' VFS call to the FUSE interface

* Bugfixes

============================================================================

What is new in 1.0

* Cleanups and bugfixes

* Added 'release()' VFS call to the FUSE interface

* 64 bit file offsets (handling of > 4 GByte files)

* libfuse is now under LGPL

* New 'statfs' call (Mark Glines)

* Cleaned up mount procedure (mostly by Mark Glines)

  NOTE: Binaries linked with with a previous version of libavfs may
  not work with the new version of the fusermount program.  In such
  case recompile the program after installing the new libavfs library.

* Fix for problems under linux kernel 2.4.19

============================================================================

What is new in 0.95

* Optimized read/write operations.  Raw throughput has increased to
about 60Mbyte/s on a Celeron/360

* Python bindings by Jeff Epler

* Perl bindings by Mark Glines

* Improved multithreaded operation

* Simplified library interface

* Bugfixes

============================================================================

What is new in 0.9:

* Everything
