We have designed an object-oriented architecture for a portable, distributed, general-purpose operating system. The system is built around a simple, general and efficient module-object infrastructure, which provides the framework for a modular, configurable and scalable operating system. Instead of providing a fixed set of services, our architecture allows the dynamic composition of distributed services from a pool of modules, which integrates software components provided by applications, third-parties and the system itself. Module implementations are independent of any particular programming language or pardigm. At a more detailed level, polymorphism is supported through a herarchy of interfaces and the separation of interface and implementation. There is no inheritance or delegation of implementations; instead, we take a comopositional approach to code reuse. A location-transparent invocation mechanism, optimized for the local, intra-domain case, allows for fine-grained decomposition of subsystems. It uses composable communication services and can thus dynamically take advantage of the most efficiient transport protocol, dependent on the location of the server object with respect to the client object.