A Builder handles the process of scheduling work to workers. Each Builder is responsible for a certain type of build, which usually consist of identical or very similar sequence of steps.

The class serves as a kind of queue for that particular type of build. In general, each Builder runs independently, but it’s possible to constrain the behavior of Builders using various kinds of interlocks.

Each builder is a long-lived object which controls a sequence of Builds. A Builder is created when the config file is first parsed, and lives forever (or rather until it is removed from the config file). It mediates the connections to the workers that do all the work, and is responsible for creating the Build objects - Builds.

Each builder gets a unique name, and the path name of a directory where it gets to do all its work. This path is used in two ways. On the buildmaster-side a directory is created for keeping status information. On the worker-side a directory is created where the actual checkout, compile and test commands are executed.