Like plans, components come in two varieties, composite and simple. A simple component is a component that contains a single resource, but no references to other components. A composite component is a component that references other components, but does not contain any resources. A composite component may reference both composite and simple components.
A composite component contains the components that it references. The referenced components are referred to as contained components, and the referencing component is referred to as the containing or container component.
A composite component declares whether each of its contained components should be installed as top-level or nested components. If a contained component is installed as top-level, then it can be used by any other component just as if it had been directly installed by a plan. However, if a contained component is installed as nested, then its services are only available to the containing component. Logically, a nested contained component defines a finer-grained unit of functionality required by the containing component, but not otherwise useful to other components. Whereas a top level contained component defines services that will be used by the containing component, but may also be used by other components.
Composite components contain only references to other components, but not the components themselves. The referenced components are other existing components that are updated and managed independent of the containing component. A component may be referenced by any number of composite components. A component's name is not affected by whether or not it is referenced by other composite component; name conflicts are resolved using paths.
When used within this document, the terms derived component, child component, and parent component refer to component inheritance relationships rather than component composition relationships.