In Prospero, the global file system consists of a collection of virtual file systems. Virtual file systems usually start as a copy of a prototype. The root contains links to files or directories selected by the user. Directory links can be of several types: conventional, union, and filtered.
A conventional link is similar to a hard link in traditional file systems. It may be made to any type of object, including a directory. It maps a name for an object to the information needed to access the object. As long as an unexpired link to an object exists the object may be accessed by that name. If the object moves, a forwarding pointer will allow continued access using the same name. An object is only deleted when no unexpired links to it remain.
A union link can only be made to a directory. With a union link, the objects included in the linked directory become part of the virtual directory containing the link. Thus, the contents of a virtual directory are the union of the collection of conventional links it contains, and the contents of all directories included through union links.
Filters may be attached to either type of link. A filter alters the set of links that are seen in directories whose paths pass through the filtered link. A filter can specify which links are to appear and which are to be ignored, it can change the features of individual links, or it can synthesize new links that are not in the original directory. A filtered link contains a reference to the filter and any arguments required by the filter.
Predefined client-side and server-side filters are available. Client-side filters are written in C and are dynamically linked during name resolution. Note that client-side dynamically linked filters have security problems.