Most generally it is a set of data descriptions that can be shared by several applications.
An active data dictionary is automatically updated as changes occur in the database. A passive data dictionary must be manually updated.
In a DBMS, this functionality is performed by the system catalog. The data dictionary is a more general software utility used by designers, users, and administrators for information resource management.
The data dictionary may maintain information on system hardware, software, documentation, users, and other aspects.
Data dictionaries are also used to document the database design process itself and can accumulate metadata ready to feed into the system catalog.
[Does anybody call them "codebooks"?]