1.  Introduction

      As network communications and workstation environments became common elements in UNIX systems, several vendors of UNIX systems have designed and built network file systems that allow client process on one UNIX machine to access files on a server machine. Examples include Sun's Network File System, NFS [Sandberg85], AT&T's recently-announced Remote File Sharing, RFS [Rifkin86], the LOCUS distributed filesystem [Walker85], and Masscomp's extended filesystem [Cole85]. Other remote filesystems have been implemented in research or university groups for internal use, notably the network filesystem in the Eighth Edition UNIX system [Weinberger84] and two different filesystems used at Carnegie-Mellon University [Satyanarayanan85]. Numerous other remote file access methods have been devised for use within individual UNIX processes, many of them by modifications to the C I/O library similar to those in the Newcastle Connection [Brownbridge82].

      Multiple network filesystems may frequently be found in use within a single organization. These circumstances make it highly desirable to be able to transport filesystem implementations from one system to another. Such portability is considerably enhanced by the use of a stylized interface with carefully-defined entry points to separate the filesystem from the rest of the operating system. This interface should be similar to the interface between device drivers and the kernel. Although varying somewhat among the common versions of UNIX, the device driver interfaces are sufficiently similar that device drivers may be moved from one system to another without major problems. A clean, well-defined interface to the filesystem also allows a single system to support multiple local filesystem types.

      For reasons such as these, several filesystem interfaces have been used when integrating new filesystems into the system. The best-known of these are Sun Microsystems' Virtual File System interface, VFS [Kleiman86], and AT&T's File System Switch, FSS. Another interface, known as the Generic File System, GFS, has been implemented for the ULTRIX*** system by Digital [Rodriguez86]. There are numerous differences among these designs. The differences may be understood from the varying philosophies and design goals of the groups involved, from the systems under which the implementations were done, and from the filesystems originally targetted by the designs. These differences are summarized in the following sections within the limitations of the published specifications.