Abstract
Embedded systems have one characteristic that directly influences their design more than any other: they need to keep up with events in their environment. Whereas ordinary systems generally require their environment to adapt to the behavior of the system, embedded systems need to have the opposite attitude and must themselves adapt to their environment. This requirement implies that there must be progress at all times, regardless of what the internal status of the system may be: hardware malfunctions or software errors may never, to the extent possible, result in halting such a system. One direct consequence of this observation is that traditional architectures are less than ideally suited for designing this type of system. In many architectures there is synchronous communication between cooperating software functions, and even if asynchrony is introduced, there is generally an asymmetric relation between such functions: at least one of them has knowledge of the other. These properties reduce the resilience of systems to problems of various kinds, and lead to very complex design problems. It will be argued that subscription is a much better model for organizing the communication inside embedded systems. In this model, components have no knowledge about each other, communication channels are established only when the need to receive certain data elements is explicitly expressed by a function, and transfer of data is autonomously handled by the architecture upon production of a new element.