5. Software Components
This section defines the following categories of software components: data, subprogram, thread, thread group, and process.
Software components may have associated source text specified using property associations. Software source text can be processed by source text tools to obtain a binary executable image consisting of code and data to be loaded onto a memory component and executed by a processor component.  Source text may be written in a traditional programming language, a very-high-level or domain-specific language, or may be an intermediate product of processing such representations, e.g., an object file.
Data components represent data types and static data in source text.  Data components are sharable between threads within the same thread group or process, and across processes and systems.
The subprogram component models callable source text that is executed sequentially. Subprograms are callable from within threads and subprograms.
Threads represent sequential sequences of instructions in loaded binary images produced from source text.  Threads model schedulable units of control that can execute concurrently.  Threads can interact with each other through exchanges of control and data as specified by port connections, through server subprogram calls, and through shared data components.
A thread group is a compositional component that permits organization of threads within processes into groups with relevant property associations.
A process represents a virtual address space.  Access protection of the virtual address space is enforced at runtime if specified by the property Runtime_Protection.  The source text associated with a process forms a complete program as defined in the applicable programming language standard.  A complete process specification must contain at least one thread declaration.  Processes may share a data component as specified by the required subcomponent resolved to an actual subcomponent and accessed through port connections.