File systems have proven to be useful in enriching and extending system functionality. We are investigating ways of simplifying file system development and using the file system abstraction for extending legacy systems to support the requirements of ubiquitous computing services.
As a first step towards this end, we have created FiST (File System Translator), a tool for stackable file system code generation. FiST helps to ease the the development of file systems by providing a higher-level infrastructure for layering new file system functionality on top of existing file systems. FiST consists of a language, code generator, and file system templates. In particular, the language provides higher-level primitives as more powerful basic building blocks to simplify file system development. It abstracts operations based on the UNIX vnode interface to provide generalized file system features that can be used across several operating systems. FiST-generate file systems provide kernel-level performance without kernel modification. FiST has been implemented and tested using three different and widely-used UNIX operating systems: Solaris, FreeBSD, and Linux. We have constructed several real-world file systems using
FiST to demonstrate its effectiveness. These file systems include a union file system, an encryption file system, a file system that load balances across replicated file systems, and compression file systems. Our experiences with these systems shows that FiST can reduce development time and code size by an order of magnitude while extending file system functionality with little performance overhead.