BMBF through DFKI, ITW 9601
January 1996 - December 1998
Computer systems are undergoing a revolution. Twenty years ago, they were centralized, isolated, and expensive. Today, they are distributed, networked, and inexpensive. However, advances in software construction have failed to keep pace with advances in hardware. To a large extent, this is a consequence of the fact that current programming languages were conceived for sequential and centralized programming. Distributed systems, however, need radically different software than centralized systems.
The basic problem with current programming languages is that they delegate two basic functionalities to the underlying operating system, where they cannot be accommodated at a sufficiently high level. These functionalities concern the persistent storage of data (i.e., files) and the creation and coordination of possibly distributed computational agents (i.e., processes). Delegating these functionalities to the operating system has the severe disadvantage that the data abstractions (e.g., objects) of the programming language cannot be used for persistent storage or for communication between agents. Due to these discontinuities, the construction of software involving distribution and persistence cannot fully exploit the benefits offered by current programming languages.
The PERDIO project will develop a high-level programming system for networked computers, called Perdio in the following. Perdio will assist the cost-efficient construction of open, distributed, fault-tolerant, reactive, and knowledge-intensive software systems. A single Perdio program will be able to create multiple computations that spread over the network, and computations created by separate Perdio programs will be able to connect transparently. Perdio computations will be able to make use of persistent stores that can hold all data abstractions. It will be possible to access data structures without being aware of whether they are active in primary memory or passive in secondary storage.
Having both distribution and persistence in a single system gives synergy. The multitude of separate models (programming-language model, long-term storage model, distribution model) is replaced by a single model. Where previously explicit code had to be written to move data between models, in the single model none is needed. Where previously augmenting a program with the abilities of another model required major effort (e.g., making a program distributed), in the single model, a program can be written with only the single model in mind, and with minor changes it will have the abilities of the other models. The combination of persistence and distribution is of particular importance for the construction of fault-tolerant software systems.
Perdio will combine network-transparency with network-awareness. Network-transparency means that the semantics of computations does not depend on the site they execute on, and that the possible interconnections between two computations do not depend on whether they execute on the same or on different sites. Network-awareness means that distribution is achieved by explicit acts that give full control over communication patterns. While network-transparency makes it easy to write distributed software, network-awareness makes it possible to avoid undesirable network traffic and to fully plan the exploitation of the resources of a distributed computing system.
Perdio will be implemented on Unix-based workstations connected through standard Internet protocols. Perdio will spawn a world-wide computational universe that is organized at a much higher level of abstraction than the current Unix/Internet technology. Users without special system privileges will be able to install Perdio on their workstations and to transparently enter the Perdio universe through the Internet. We will experiment with scenarios from mobile computing and start work on an environment for collaborative and distributed program development.
Perdio will be based on Oz, a higher-order concurrent constraint language developed in a current project at the DFKI. Oz is already used inside and outside of the DFKI for applications that require processing of complex symbolic representations, organization into multiple agents, and soft real-time control. Oz's primary structuring concept for concurrent programming is the object. Objects combine stateful data abstraction with mutual exclusion and synchronization. Oz is based on logic variables and constraints, thus realizing an expressive and straightforward form of concurrent control that originated with concurrent logic programming. Oz offers the problem-solving capabilities of constraint logic programming by means of a higher-order search combinator spawning a subordinated computation space.
A key advantage of Oz is its simple yet expressive formal computation model. Objects and other programming abstractions are obtained from a small set of orthogonal primitives. Oz is in fact the first language whose concurrent object system is constructed in a principled and formal manner. Once distribution and persistence issues are understood for the basic computation model underlying Oz, they will extend readily to the rest of the language. This holds true both for conceptual and for implementational concerns. Oz's problem-solving capabilities come as a conservative extension to the rest of the language and are not expected to interfere with the extension to distribution and persistence. The main reason we were able to construct an efficient and stable implementation of Oz with so few resources is in fact the simplicity gained from Oz's computation model and the concomitant reduction to a lean kernel language.
First applications of Oz include multi-agent scenarios, simulations, scheduling, placement, configuration, graphical user interfaces, natural language processing, and virtual reality. There is no other concurrent language combining a rich object system with advanced features for symbolic processing and problem solving. The extension of Oz to distributed and persistent programming will yield a powerful and unparalleled programming tool showing the full potential of the concepts underlying Oz. Given the widely recognized fact that the current tools for distributed programming are primitive and unnecessarily complex, there is the chance that Perdio will have an impact at the very center of the future of computing.