Until recently, most modern network elements (e.g., routers, switches, or firewalls)
supported a small set of traditional interfaces that were used to communicate with those
elements. These typically included a proprietary command-line interface (CLI), SNMP,
CORBA, and more recently, some form of NETCONF. These languages have a few key
traits in common. First, they are, generally speaking, very static in nature and require
a priori data model design and declaration. In practice, this means that code is often
generated from these interfaces, which are built directly into the firmware images exe‐
cuting on the network elements, as well as the management software (or applications).