A
program unit is either a package, a task unit, a protected unit,
a protected entry, a generic unit, or an explicitly declared subprogram
other than an enumeration literal. Certain kinds of program units can
be separately compiled. Alternatively, they can appear physically nested
within other program units.
A library unit is a separately
compiled program unit, and is a package, subprogram, or generic unit.
Library units may have other (logically nested) library units as children,
and may have other program units physically nested within them.
A
root library unit, together with its children and grandchildren and so
on, form a
subsystem.