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 always 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.