Packages are one of the four forms of program unit, of which programs can be composed. The other forms are subprograms, task units, and generic units.
Packages allow the specification of groups of logically related entities. In their simplest form packages specify pools of common object and type declarations. More generally, packages can be used to specify groups of related entities including also subprograms that can be called from outside the package, while their inner workings remain concealed and protected from outside users.
References: generic unit, program unit, subprogram, task unit, type declaration.