The NAAT tool is divided into a frontend and a backend, separated from each other as much as possible.
The frontend displays informations and handles user inputs; it's the interface between the user and the underlying mechanics.
The communication between the frontend and the backend is kept as simple as possible; the main api is to GET or SET the value of variables. These variables are a set of pertinent system parameters, the hostname for instance.
The backend falls into two parts: a data-access part (which handles a simple transaction system, the retrieval and storing of data, and the generation of events, i.e. names of changed variables), and a system configuration part, which triggers appropriate actions on account of events.
This events mechanism makes the architecture data-driven, so that the frontend has to care only about the data (the system parameters) and not about the mechanics to update the system. This greatly simplify developments and offers some great extensibility.
Actions triggered by events update the system according to the new values of the system parameters. This is done by means of templates, which are really the system files but a bit smarter, since they include some perl to change their content on account of parameters. In a nutshell, they are parameterized system files (the use of templates was an idea from the e-smith distribution). Beside templates, actions also include scripts (for specific needs) and services handling (start, stop, restart and reload).