Vnode stacking was first implemented by Rosenthal (in SunOS 4.1) around 1990 . A few other works followed Rosenthal, such as further prototypes for extensible file systems in SunOS , and the Ficus layered file system [6,9] at UCLA.
Several newer operating systems offer a stackable file system interface. Such operating systems have the potential of easy development of file systems offering a wider range of services. Their main disadvantages are that they are not portable enough, not sufficiently developed or stable, and they are not available for common use. Also, they require significant changes to existing operating systems and existing file systems to support stacking. Finally, new operating systems with new file system interfaces are not likely to perform as well as ones that are several years older. Wrapfs, on the other hand, offers an API that is portable across operating systems, and requires no changes to existing operating systems or other file systems.
The Herd of Unix-Replacing Daemons (HURD) from the Free Software Foundation (FSF) is a set of servers running on the Mach 3.0 microkernel that collectively provide a Unix-like environment. HURD file systems are implemented at the user level. The novel concept introduced by HURD is that of the translator. A translator is a program that can be attached to a pathname and perform specialized services when that pathname is accessed. Writing a new translator is a matter of implementing a well defined file access interface and filling in such operations as opening files, looking up file names, creating directories, etc.
Spring is an object-oriented research operating system built by Sun Microsystems Laboratories. It was designed as a set of cooperating servers on top of a microkernel. Spring provides several generic modules that offer services useful for a file system: caching, coherency, I/O, memory mapping, object naming, and security. Writing a file system for Spring requires defining the operations to be applied on the file objects. Operations not defined are inherited from their parent object.
CFS is a portable user-level cryptographic file system based on NFS. It is used to encrypt any local or remote directory on a system, accessible via a different mount point and a user-attached directory. Users first create a secure directory and choose the encryption algorithm and key to use. A wide choice of ciphers is available and great care was taken to ensure a high degree of security. CFS's performance is limited by the number of context switches that must be performed and the encryption algorithm used.
TCFS is a modified client-side NFS kernel module that communicates with a remote NFS server. TCFS is available only for Linux systems, and both client and server must run on Linux. TCFS allows finer grained control over encryption--individual files or directories can be encrypted by turning on or off a special flag. Unfortunately, TCFS does not support the Blowfish cipher.
Linux comes with a special loop device driver which allows users to use regular files as block devices, and even create a file system on such looped files. Optional encryption modules can be used to encrypt file data on a block basis. The loop device, however, is not a replacement for a real file system. It does not truly stack on top of all other file systems, it does not support 100% Unix file system semantics (such as access to block and character devices, as well as advisory locking). This is mostly because the loop device does not call the underlying file system functions of the native file system it loops over. For example, the loop device cannot be used on top of NFS, and no more than 7 loop devices may be used at once. Wrapfs is a full featured file system which is independent of the file systems below it; any number of instances of Wrapfs can be mounted on top of Ext2fs, NFS, or even other instances of Wrapfs.