The Foundation Introduction The Foundation is a programming architecture with a defined API created to implement distributed soft real time systems. It is designed to implement single and multi-nodal systems of independent agents who provide well specified services to each other and the system as a whole. The Foundation was originally implemented over top of the MTOS real time operating system and was later ported to run over Solaris Unix. In its embedded form, it has been used as a basis of telecommunications switching services and in a distributed network of real time monitoring systems. In its Unix manifestation, it has been used to implement large and small media delivery servers. Model Daemons Work is accomplished by daemons. A daemon is an independently executable software entity with a name and a prioritized message queue. Each daemon operates as an transaction processor. Internally, it reads the highest priority message in its queue, processes it, sends resultant or command/query messages to other daemons, and returns to read the next highest priority message in its queue. When there are no messages to process it blocks until one arrives (block on receive model). Elves Elves are capable of doing almost anything that a daemon can. They are implemented as normal threads of a daemon process so as to allow more parallelism and reduce Operating System process overhead. All elves of a daemon share a common pool of memory. Every daemon has at least a 'main' elf. Messages All information communicated between daemons is by message (except device driver sink/source daemons). There is no concept of global memory communication in the Foundation model and all state is maintained within the daemons themselves and modified by the incoming message events. Any daemon may send a message to any daemon or elf on any system at any time as long as it knows the daemon or elf's name and the system id on which it resides. Any elf may send messages to any elf in any daemon on any system as long as it knows the elf's name. The message handling model is based on a 'block on receive' model as opposed to a 'block on send' model used in more common architectures, like RPC. Event processing is driven by the explicit priority of the received messages, highest first. Note that the message priority is completely independent of the execution priority of the daemon, contrary to the 'block on send' model. Wakeups All timing is performed by Wakeups. When a daemon requests a Wakeup, it will receive a Wakeup message at the requested priority after the requested time has elapsed. Wakeups may be cancelled up to the point the Wakeup message is read from the message queue. The Foundation model unifies all physical, timer, and informational events in a consistent manner. Physical Events Some daemons can be used as "device driver" daemons. These directly access h/w resources of the underlying platform and forward information and handle requests by messages to the rest of the system. Conclusion My creation of the Foundation architecture and its various implementations, has been shown to be very effective in handling tasks that are intrinsically hard to implement in large complex real time and communication handling systems. It is especially effective in handling distributed event based systems that become complex with regular top down "reductio ad absurdum" approaches. This is due to its message based information passing approach and use of a community of interacting actors each having the capability to do a specific job in response to a transaction request - much like people in a human society.