While the common language runtime along with a common set of services allows us to have multiple ``in-process components'' within an application, it does not specify how different components interact with each other. For this purpose, we need an interface model that allows components to access other components' functionality in a uniform manner. Since Converse is a message-driven runtime, traditional interface description languages do not perform well because they assume semantics of a blocking procedure call. Other shortcomings of traditional interface models have also been noted in literature [2]:
``Current component interfaces are based on functional representation of services provided by a component. ... this model fails to describe many important features such as locality properties, resource usage patterns,...''
Enhancing the traditional interface languages to allow asynchronous remote procedure calls results in other problems, such as proliferation of interfaces. We have developed a different interface model based on separate input and output interfaces, which enables us to overcome these problems. In this interface model, each component describes the output data it publishes, and the input data it accepts on a set of named and typed ports. Computations in the components are attached to the set of input ports. This method of attaching computations to incoming data is performed by the component internally, and while being a close match with the underlying Converse runtime system, it does not introduce any foreign concepts to the programming paradigm of the component. For example, an input port for a component written using MPI may be accessible to the component as a ranked processor within a special communicator. A standard library of interface components needed for composition of parallel applications as well as an orchestration language - a high level scripting language that utilizes this interface model to make it easy to construct complete applications from components - is also developed. Charisma interface model is described in chapter 3.