Purpose of this release
=======================

The only purpose of this release is to place a clear LGPL license on my code.
This release is completely untested, but is essentially the original 0.9 release
with the LGPL notice added and a few comments deleted.

General Information
===================

This is a Python[1] interface to FUSE[2].

FUSE (Filesystem in USErspace) is a simple interface for userspace
programs to export a virtual filesystem to the linux kernel.  FUSE
also aims to provide a secure method for non privileged users to
create and mount their own filesystem implementations.

When run from the commandline, "fuse.py" simply reexports the root
filesystem within the mount point as example/fusexmp does in the main
FUSE distribution.  It also offers a class, fuse.Fuse, which can be
subclassed to create a filesystem.  fuse.Xmp is the example filesystem
implementation

In your subclass of fuse, add attributes with the expected names
("getattr", "readlink", etc) and call signatures (refer to fuse.Xmp)
then call main().  Make it runnable as a #! script, and mount with
	fusermount <mount point> <script name>
for some reason,
	fusermount <mount point> python <script name>
does not seem to work.

Limitations
===========

This is minimally tested (in fact, I haven't written any files via
fuse/python, just ls'd and cat'ted a bit) and there's no documentation,
docstrings, or tests.  The Python code should probably be refactored
to provide a nice way to do
	try:
		return f(...)
	except OSError, detail:
		if hasattr(detail, "errno"): detail = detail.errno
		return -detail
among other shortcomings

Python does not have opendir/readir/closedir, so Xmp.readdir is
implemented to perform a stat call for each file.  This limitation may
not be important when implementing other filesystem types that don't
directly map onto real filesystems.

Python's lstat() does not return some fields which must be filled in
(st_blksize, st_blocks, st_ino), and _fusemodule assumes that the return
value from the lstat() method is identical to Python's lstat().  This
limitation should be lifted, and some standard order chosen for these
three values.  For now, though, default (nonsensical) values are chosen,
and stuff like "du" doesn't work.

The Python Global Interpreter Lock is not handled, so using
fuse.MULTITHREAD will not work.  Modifying the PROLOGUE and EPILOGUE
functions may take care of this.  For now, just run without
fuse.MULTITHREAD in flags.

[1] http://www.python.org
[2] http://sourceforge.net/projects/avf/
