Abstract The background to and progress in the development of ‘distributed programs’ which execute on a distributed multiple-processor architecture are reviewed. Three basic concurrent programming methodologies are introduced and illustrated. The general problems associated with the use of distributed architectures are considered. Finally, the problems and techniques associated with implementing the various programming methodologies on different architectures are discussed. The implicit constraints imposed on the high-level software by the low-level communications architecture are then examined.