Pool
Pools behave like data stores; activities writing to a pool expect data to persist in some way as defined by the pool’s implementation. As with channels, pools may have multiple incarnations.
Channel
Channels behave like pipes; activities write to one end and read from the other. Every channel has an implementation associated with it that defines its behavior; this implementation is shared among multiple incarnations of the channel.
Connection
Connections represent an activity’s access to an IDA. Connections have scope defined as follows:
local — within the context of the defining subsystem.
global — within the context of the global subsystem.
container — within the context of the containing subsystem. If the container is the global subsystem then global and container are equivalent.
argument — the process of binding a connection to its target is delayed until runtime. Subsystems with argument connections expect to find IDA references in their argument vector upon invocation. There is a special notation for argument connections which are labeled to indicate the connection’s name within the subsystem (so it can be referenced) and the reference’s position/index within the subsystem’s argument vector.
device — this IDA is a device reference. Device references resolve in the global context and return 2 channels, a ‘reader’ and a ‘writer’.
Device
Devices are entities that represent access to some process or hardware outside the context of the global subsystem. Devices may be opened which creates an instance of the device under an instance name. Subsequent opens with the same instance name return a reference to the already opened instance. It is therefore possible for subsystems to share device instances; this implies that device instance names should be unique with respect to any particular device. Closing a device will not remove the instance until the last reference is removed. Devices implement 2 channels, a read and a write channel, but may have other behaviors depending upon the implementation.