updated FAQ and Filesystems
diff --git a/FAQ b/FAQ
index 758ff25..5a79d8c 100644
--- a/FAQ
+++ b/FAQ
@@ -1,4 +1,4 @@
-This was generated on 2005/09/27 from
+This was generated on 2006/01/09 from
 
   http://fuse.sourceforge.net/wiki/index.php/FAQ
 
@@ -8,8 +8,8 @@
 General
 =======
 
-How can I umount a filesystem
------------------------------
+How can I umount a filesystem?
+------------------------------
 
 Filesystems mounted without sysadmin privileges can be umounted with
 the command
@@ -46,6 +46,53 @@
 vowed never to name a project after a common term, not even anything
 found more than a handful of times on Google.
 
+Is it possible to mount a fuse filesystem from fstab?
+-----------------------------------------------------
+
+Yes, from version 2.4.0 this is possible.  The filesystem must adhere
+to some rules about command line options to be able to work this
+way.  Here's an example of mounting an sshfs filesystem:
+
+sshfs#user@host:/    /mnt/host    fuse    defaults    0 0
+
+The mounting is performed by the /sbin/mount.fuse helper script.
+
+Licensing issues
+~~~~~~~~~~~~~~~~
+
+Under what license is FUSE released?
+------------------------------------
+
+The kernel part is released under the GNU GPL.
+
+Libfuse is released under the GNU LGPL.
+
+All other parts (examples, fusermount, etc) are released under the GNU GPL.
+
+Under what conditions may I modify or distribute FUSE?
+------------------------------------------------------
+
+See the files COPYING and COPYING.LIB in the distribution.
+
+More information can be found at http://www.gnu.org/licenses/
+
+Under what conditions may I distribute a filesystem which uses libfuse?
+-----------------------------------------------------------------------
+
+See COPYING.LIB in the distribution.
+
+In simple terms as long as you are linking dynamically (the default)
+there are no limitations on linking with libfuse.  For example you may
+distribute the filesystem itself in binary form, without source code,
+under any propriatery license.
+
+Under what conditions may I distribute a filesystem that uses the raw
+---------------------------------------------------------------------
+kernel interface of FUSE?
+-------------------------
+
+There are no restrictions whatsoever for using the raw kernel interface.
+
 API
 ===
 
@@ -102,9 +149,106 @@
 
 Yes: fuse_get_context()->uid, etc.
 
+How should threads be started?
+------------------------------
+
+Miscellaneous threads should be started from the init() method.
+Threads started before fuse_main() will exit when the process goes
+into the background.
+
+Is it possible to store a pointer to private data in the
+--------------------------------------------------------
+fuse_file_info structure?
+-------------------------
+
+Yes, the 'fh' filed is for this purpose.  This filed may be set in the
+open() and create() methods, and is available in all other methods
+having a struct fuse_file_info parameter.  Note, that changing the
+value of 'fh' in any other method as open() or create() will have no
+affect.
+
+Since the type of 'fh' is unsigned long, you need to use casts when
+storing and retrieving a pointer.  Under Linux (and most other
+architectures) an unsigned long will be able to hold a pointer.
+
+This could have been done with a union of 'void *' and 'unsigned long'
+but that would not have been any more type safe as having to use
+explicit casts.  The recommended type safe solution is to write a
+small inline function that retrieves the pointer from the
+fuse_file_info structure.
+
 Problems
 ========
 
+Version problems
+~~~~~~~~~~~~~~~~
+
+Why do I get Connection Refused after mounting?
+-----------------------------------------------
+
+Library is too old (< 2.3.0)
+
+You can check which version of the library is being used by foofs by
+doing 'ldd path_to_foofs'.  It will return something like this
+
+        libfuse.so.2 => /usr/local/lib/libfuse.so.2 (0xb7fc9000)
+        libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb7fb9000)
+        libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb7f39000)
+        libc.so.6 => /lib/tls/libc.so.6 (0xb7e04000)
+
+Then do 'ls -l path_to_libfuse'
+
+> ls -l /usr/local/lib/libfuse.so.2
+lrwxrwxrwx  1 root root 16 Sep 26 13:41 /usr/local/lib/libfuse.so.2 -> libfuse.so.2.2.1
+
+Why does fusermount fail with an Unknown option error?
+------------------------------------------------------
+
+Errors like 'fusermount: Unknown option -o' or 'fusermount: Unknown
+option --' mean, that an old version of fusermount is being used.  You
+can check by doing 'which fusermount'.
+
+If you installed FUSE from source, then this is probably because there
+exists a binary package on your system which also contains a
+fusermount program, and is found first in the path, e.g. in
+/usr/bin/fusermount.
+
+The solution is to remove the binary package.
+
+Installation problems
+~~~~~~~~~~~~~~~~~~~~~
+
+Why is there an error loading shared libraries?
+-----------------------------------------------
+
+If you get the following error when starting a FUSE-based filesystem:
+
+   foofs: error while loading shared libraries: libfuse.so.2:
+   cannot open shared object file: No such file or directory
+
+check /etc/ld.so.conf for a line containing '/usr/local/lib'.  If it's
+missing, add it, and run ldconfig afterwards.
+
+Why doesn't mounting as user work if installing FUSE from a package?
+--------------------------------------------------------------------
+
+Distributions often package 'fusermount' without the suid bit, or only
+executable to the 'fuse' group.
+
+This results in the following message, when trying to mount a
+filesystem as an unprivileged user:
+
+   fusermount: mount failed: Operation not permitted
+
+The simplest solution is to change the mode of 'fusermount':
+
+   chmod 4755 /usr/bin/fusermount
+
+Note, you may have to do this after each upgrade.
+
+Other problems
+~~~~~~~~~~~~~~
+
 Why are some bytes zeroed when reading a file?
 ----------------------------------------------
 
@@ -118,6 +262,39 @@
 the read can return a smaller value than requested.  In this case the
 end of file can be signalled by returning zero.
 
+Why does cp return operation not permitted when copying a file with no
+----------------------------------------------------------------------
+write permissions for the owner?
+--------------------------------
+
+"cp" calls open(2) with read-only permissions and O_CREAT, the purpose
+being to atomically obtain a read/write file handle and make the file
+read-only.  Unfortunately, this does not work very well in fuse, since
+you first get a mknod, and then an open call.  At the time of open, you
+can't distinguish easily wether this is the first open issued by cp,
+or another process trying to write a read-only file.
+
+Defining the 'create' method solves this problem, however this
+requires a Linux kernel version of at least 2.6.15 and libfuse version
+2.5 or greater.
+
+There can be other workarounds, however the easy one is to use the
+"default_permissions" mount option, and to avoid checking permissions
+on open. If you store files on a filesystem, this can get tricky
+because you will have to change the file mode to allow writing.  Using
+the stateful API (i.e. returning an handle on open) will simplify
+things.  In this case, and using "-o default_permissions", when
+implementing the open call you have to:
+
+1. check if the open is in write mode (i.e. mode has O_RDWR or O_WRONLY)
+
+2. in that case (in mutual exclusion with other open, getattr
+   etc. calls on the same file) change the mode from "M" to "M OR
+   0o200"
+
+3. open the file, change back the mode even in case of errors, and
+   return the obtained handle
+
 Why doesn't find work on my filesystem?
 ---------------------------------------