A conventional file system provides the user with generic structure and semantics for accessing files. The default scheme is sufficient for many applications. However, many applications require different file structures or semantics, which must be provided by the applications. This paper describes the Modify-on-Access file system that provides safe and simple user-defined extensibility through transformations, which are modular operations on input and output streams. Our file system supports three distinct classes of transformations: kernel-resident, library, and shell scripts. Each provides different tradeoffs in performance, safety, and ease of use. In all cases, a user inserts transformations into input and output streams that modify the data as it is accessed. Untrusted (i.e., user-level) transformations execute in user space for safety. With the Modify-on-Access file system, a user defines the structure and semantics of files, on a per-file basis. Moreover, through transformation...
Paul W. Schermerhorn, Robert J. Minerick, Peter W.