This talk argues for a model of components based upon the notion of communicating processes. By this, we mean layered networks of active components, responding to and generating events communicated to each other through channels. This model follows Hoare's algebra of Communicating Sequential Processes (CSP), enhanced by dynamic extras such as the mobile processes of Cardelli's Ambient Calculus.
The defining feature of components is that composing them into larger systems (themselves components) should be straightforward. Their semantics should not mysteriously change when combined with other components! From knowledge of their individual behaviours, we should be able to deduce - without great stress - their combined behaviour. This is not a familiar property of many software systems today.
CSP semantics - including those of its parallel combining operator - are compositional. This is a necessary pre-condition for any component model. Weaknesses in object orientation for component engineering (e.g. uncontrolled aliasing) will be discussed in the light of corresponding strengths for process orientation. Language versus library support for communicating processes will be considered, along with security and performance matters and the status of current implementation efforts at the University of Kent.
Keywords: components, processes, channels, networks, mobiles, scalability, CSP, JCSP, occam(tm).