A distributed system is constructed from a set of relatively independent co
mponents that form a unified but geographically and functionally diverse en
tity. Examples include networked operating systems, Internet services, the
national telephone switching system, and, in general, all the technology us
ing today's diverse digital networks. Nevertheless, distributed systems rem
ain difficult to design, build, and maintain, primarily due to the lack of
a clean, perspicuous interconnection model for the components. Our experien
ce with two distributed operating systems, Plan 9(R) and Infernos, encourag
es us to propose such a model. These systems depend on, advocate, and gener
ally push to the limit a fruitful idea-to present their resources as files
in a hierarchical name space. The objects appearing as files may represent
stored data, but they may also be devices, dynamic information sources, int
erfaces to services, and control points. The approach unifies and provides
basic naming, structuring, and access control mechanisms for all system res
ources. A simple underlying network protocol, Styx(R), forms the core of th
e architecture by presenting a common language for communication within the
system. Even within nondistributed systems, the presentation of services a
s files advantageously extends a familiar scheme for naming, classifying, a
nd connecting to system resources, More important, the approach provides a
natural way to build distributed systems by using well-known technology for
attaching remote file systems. If resources are represented as files and t
here are remote file systems, one has a distributed system-resources availa
ble in one place are usable from another.