Many contemporary operating systems utilize a system call interface
between the operating systems and its clients. Increasing numbers
of systems are provided low-level mechanisms for intercepting and
handling systems calls in user code. Nonetheless, they typically
provide no higher-level tools or abstractions for effectively
utilizing these mechanisms. Using them has typically required
reimplementation of a substantial portion of the system interface
from scratch, making the use of such facilities unwieldy at best.

I assert that an object-oriented toolkit can be constructed which
substantially increases the ease of interposing user code between
clients and instances of the system interface by allowing such code
to be written in terms of the high-level objects provided by this
interface, rather than in terms of the intercepted systems calls
themselves.

Furthermore, I assert that having such a toolkit will enable new
interposition agents to be written which otherwise would not have
been attempted. Examples of interesting agents include: system call
tracing tools, protected environments for running untrusted
binaries, modified filesystem namespaces, transparent network data
compression and/or encryption agents, transactional software
environments and emulators for other operating system environment.