What is new in 2.5

 - Merge library part of FreeBSD port

 - New atomic create+open, access and ftruncate operations

 - On filesystems implementing the new create+open operation, and
   running on Linux kernels 2.6.15 or later, the 'cp' operation will
   work correctly when copying read-only files.

 - New option parsing interface added to the library

 - Lots of minor improvements and fixes

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
