================================================================================ P9408 J.A. Bergstra & P. Klint "The toolbus - a component interconnection architecture -" Building large, heterogeneous, distributed software systems poses serious problems for the software engineer; achieving interoperability of software systems is still a major challenge. We describe an experiment in designing a generic software architecture for solving these problems. To get control over the possible interactions between software components (``tools'') we forbid direct inter-tool communication. Instead, all interactions are controlled by a ``script'' that formalizes all the desired interactions among tools. This leads to a component interconnection architecture resembling a hardware communication bus, and therefore we will call it a ``ToolBus''. We describe tool interactions in process-oriented ``ToolBus scripts'' featuring, amongst others, (1) sequential composition, choice and iteration of processes; (2) handshaking (synchronous) communication of messages; (3) asynchronous communication of notes to an arbitrary number of processes; (4) note subscription; (5) dynamic process creation. Most notably lacking are built-in datatypes: operations on data can only be performed by tools, giving opportunities for efficient implementation. We present the ToolBus architecture at five different levels of abstraction: (1) motivation and informal overview; (2) description of the intended meaning of ToolBus scripts using Process Algebra; (3) algebraic specification (in ASF+SDF) of a prototype interpreter for ToolBus scripts; (4) examples of ToolBus scripts; (5) experimental C implementation of a ToolBus interpreter. The results of this experiment can be viewed from two different angles. The ToolBus architecture itself seems to be one feasible approach to the component interconnection problem, while the method used to arrive at this design has some merits of its own. The orchestrated use of process theory for design, algebraic specification for rapid prototyping, and C for experimental implementation, leads to a versatile framework for experimentation and implementation at affordable costs. 1991 CR Categories: C.2.4 [Computer-communication network}]: Distributed systems; D.2.1 [Software Engineering]: Requirements/Specifications; D.2.2 [Software Engineering]: Tools and techniques; D.2.6 [Software Engineering]: Programming Environments; D.3.4 [Programming Languages]: Processors; D.4.1 [Operating Systems]: Process management; D.4.4 [Operating Systems]: Communications management; H.5.2 [Information interfaces and presentation]: User interfaces. 1991 Mathematics Subject Classification: 68N15 [Software]: Programming Languages; 68N20 [Software]: Compilers and generators; 68Q65 [Theory of computing]: Abstract data types; algebraic specification. Key Words & Phrases: interoperability of software tools, modularity, control integration, client/server architectures, distributed systems, process interpreter, prototyping, software development methodology. Note: The systematic use of the iteration operator has been inspired by simultaneous work~\cite{Iteration} in the context of the ESPRIT Basic Research Action CONFER no. 6454. It may serve as an illustration of the practical value of an iteration operator in Process Algebra.