  A pattern of interaction that arises again and again in programming is a
"handshake", in which two agents exchange data. The exchange is thought of as
provision of a service. Each interaction is initiated by a specific agent--the
client or Angel--and concluded by the other--the server or Demon. We present a
category in which the objects--called interaction structures in the
paper--serve as descriptions of services provided across such handshaken
interfaces. The morphisms--called (general) simulations--model components that
provide one such service, relying on another. The morphisms are relations
between the underlying sets of the interaction structures. The proof that a
relation is a simulation can serve (in principle) as an executable program,
whose specification is that it provides the service described by its domain,
given an implementation of the service described by its codomain. This category
is then shown to coincide with the subcategory of "generated" basic topologies
in Sambin's terminology, where a basic topology is given by a closure operator
whose induced sup-lattice structure need not be distributive; and moreover,
this operator is inductively generated from a basic cover relation. This
coincidence provides topologists with a natural source of examples for
non-distributive formal topology. It raises a number of questions of interest
both for formal topology and programming. The extra structure needed to make
such a basic topology into a real formal topology is then interpreted in the
context of interaction structures.
