A Knowledge Sharing Approach to Software Interoperation

Getting programs to work together often necessitates extensive work on the part of the users of those programs or their programmers { to learn the characteristics of completed programs and to negotiate communication formats and protocols for programs under development. What's more, the resulting systems are usally very rigid { components often cannot be modi ed or replaced without subsequent rounds of negotiation and programming. In order to deal with these problems, the systems community has developed various pieces of technology to transfer much of the burden of interoperation >From the creators and users of programs to the programs themselves, including such things as standard communication languages, subroutine libraries to assist programmers in writing interoperable software, and system services to facilitate interoperation at runtime. Unfortunately, the current technology is too limited to support the ideal of automated interoperation. Existing standards are not su ciently expressive to allow the communication of the de nitions, theorems, assumptions that are often needed for systems to interoperate. Current subroutine libraries provide little support for increased expressiveness. Directory assistance programs and brokers are limited by inexpressiveness in the languages used to document programs and by their lack of inferential capability. Recent progress by researchers in the Arpa-sponsored Knowledge Sharing E ort suggests that it may now be possible to remedy these de ciencies through the use of knowledge sharing technology. The basis for this approach is a highly expressive communication language, called ACL (for Agent Communnication Language). In the approach to interoperation described here, programs (called agents) use ACL to supply machine-processable documentation to system programs (called facilitators), which then coordinate their activities. Since agents and facilitators assume the burden of interoperation, application programmers are relieved of this responsibility and can construct their programs without having to learn the details of other programs in the runtime environment. This knowledge-sharing approach to software interoperation has been developed into a practical technology. The language is fully de ned; there are coordinated subroutine libraries to assist in writing software agents; and there are running facilitators. The technology has been put to use in a variety of applications necessitating interoperation, such as concurrent engineering and distributed project management; and it is being used at the authors' institution in the construction of a prototype for the national information infrastructure.