Configuring large computing installations is a difficult problem -- there are many different subsystems involved, all with their own language, and many different people with an interest in overlapping aspects of the overall configuration. Deploying and maintaining a configuration which reliably meets everyone's "higher-level" requirements is hard, and configuration errors are responsible for a significant proportion of system failures.
Almost all large installations use some type of "configuration tool" (*) in an attempt to automate and unify the process. These often involve some kind of custom specification language, which is often claimed to be "declarative". But all practical configuration languages have developed in very informal ways, with a complex semantics which are error-prone and difficult to use. Declarative configuration languages in particular, are quite different from programming languages, and have not been widely studied in any formal way, despite their critical role in most large infrastructures.