Design and implementation of a distributed systems language (crystal, charlotte, lynx, soda)

In a distributed environment, processes interact solely through the exchange of messages. Safe, convenient, and efficient communication is of vital importance, not only for the tightly-coupled components of parallel algorithms, but also for more loosely-coupled users of distributed resources. Server processes in particular must be able to communicate effectively with clients written at widely varying times and displaying largely unpredictable behavior. Such communication requires high-level language support. Interprocess communication can be supported by augmenting a conventional sequential language with direct calls to operating system primitives, but the result is both cumbersome and dangerous. Convenience and safety are offered by the many distributed languages proposed to date, but in a form too inflexible to support loosely-coupled applications. A new language known as LYNX overcomes the disadvantages of both these previous approaches. The name of the language is a play on its use of duplex communication links. Links are a mechanism for the naming, protection, and abstraction of distributed resources. They allow the connections between processes to be inspected and altered dynamically. Additional language features support the division of processes into multiple threads of control. The interaction of threads and links facilitates the construction of servers. Experience with LYNX indicates that the language is a significant improvement over existing notations for interprocess communication. An implementation on top of the Charlotte distributed operating system presented several interesting problems and yielded unexpected insights into the nature of the language/operating system interface. A paper design of an implementation for the SODA distributed operating system was in some ways considerably simpler. The Charlotte implementation is complete and performs well.