Subsystems

The Ada Reference Manual defines a subsystem as a root library unit together with all of its children 1. A root library unit is essentially a library unit declared without a prefixed name (more specifically, a first child of package Standard) 2.

Ada was originally designed as a language for programming in the large, which is more than just being designed for the construction of very large programs, but also for the construction of large programs by a large number of people across concurrent teams (this happens to be an excellent property for open-source projects). Ada’s powerful package paradigm is the foundational mechanism for enabling programming in the large. Ada’s subsystem concept is appropriate for an architectural-level component of an Ada program.

AURA Subsystems are a superset of Ada subsystems, since AURA operates in the context of the Ada standard. An Ada subsystem becomes an AURA subsystem by either being accessible from an AURA repository, or containing an AURA subsystem manifest. AURA Subsystems are the functional analogues to “packages” or “crates” in other popular package management systems.

An AURA implementation will always attempt to resolve all dependencies of a program (project) by checking-out any missing subsystems needed by a program from configured repositories. For subsystems installed and configured from a repository, the AURA implementation also iteratively attempts to checkout all missing subsystems depended-upon by any checked-out subsystems.

1

Ada Reference Manual, 10.1-3, defines a subsystem.

2

Ada Reference Manual, 10.1.1-10 - defines a root library unit.