While distributed systems are now commonplace, the programming of distributed systems is still a complex task. This research focuses on simplifying the programming of distributed subsystems and applications by supporting distribution in the language. The design of an object- based language, called Emerald, and a distributed run-time system for Emerald, that facilitate the construction of distributed programs will be undertaken. The novel features of Emerald include: (1) a uniform object model that is used for programming both private local objects and shared remote objects, (2) a type system that permits multiple user-defined and compiler-defined implementations, and (3) an explicit notion of object location and mobility. A prototype Emerald system is currently operating on a small local area network of workstations.