should explore the configuration space, building different configurations, to discover which pa-
rameter causes the failure. Similarly, if a certain configuration fails while it did not previously,
Hydra should try to isolate the specific commit that introduced the fault.
Another interesting direction is to discover possibly troublesome configurations using source
code analysis. For instance, nested #ifdefs in C programs conditional on options in the configu-
ration space may indicate a potential feature interaction that must be tested specifically.
8. Conclusion
A continuous build system is an indispensable tool in any software development project,
but existing implementations have serious limitations: they place a heavy maintenance burden
on users because the build environment is not managed, have poor reproducibility, and have
no explicit support for building variants of systems. Hydra, by virtue of the purely functional
component description language provided by the underlying Nix package manager, solves these
issues.
The software described in this paper is available at http://nixos.org/hydra-scp. This
includes the source code of Hydra, Nix and Nixpkgs, various binary distributions of Nix, a binary
distribution of Hydra installable through Nix that includes Hydra’s 120 runtime dependencies,
the extensive Nix and Nixpkgs user manuals, and links to numerous examples of Hydra build
jobs.
Acknowledgements. The authors would like to thank the anonymous reviewers of the WAS-
DeTT workshop for their comments. This research was supported by the NIRICT LaQuSo Build
Farm project. Martin Bravenboer, Armijn Hemel, Merijn de Jonge and Roy van den Broek
contributed to the various incarnations of the Nix build farm. We also want to thank the many
contributors to the Nix project.
References
Apache Software Foundation, 2005. Apache Ant. http://ant.apache.org/, accessed 15 August 2005.
Bravenboer, M., Kalleberg, K. T., Vermaas, R., Visser, E., June 2008. Stratego/XT 0.17. A language and toolset for
program transformation. Science of Computer Programming 72 (1-2), 52–70, special issue on experimental software
and toolkits.
Catalyst community, 2008. Catalyst — the elegant MVC framework. http://www.catalystframework.org/, ac-
cessed 1 December 2008.
Dolstra, E., Jan. 2006. The purely functional software deployment model. Ph.D. thesis, Faculty of Science, Utrecht
University, The Netherlands, http://www.cs.uu.nl/
∼
eelco/pubs/phd-thesis.pdf.
Dolstra, E., Apr. 2008. Maximal laziness — an efficient interpretation technique for purely functional DSLs. In: Eighth
Workshop on Language Descriptions, Tools and Applications (LDTA 2008). Electronic Notes in Theoretical Com-
puter Science. Elsevier Science Publishers, to appear.
Dolstra, E., de Jonge, M., Visser, E., Nov. 2004a. Nix: A safe and policy-free system for software deployment. In:
Damon, L. (Ed.), 18th Large Installation System Administration Conference (LISA ’04). USENIX, Atlanta, Georgia,
USA, pp. 79–92.
Dolstra, E., L
¨
oh, A., Sep. 2008. NixOS: A purely functional Linux distribution. In: ICFP 2008: 13th ACM SIGPLAN
Intl. Conf. on Functional Programming. ACM Press.
Dolstra, E., Visser, E., Jul. 2008. The Nix build farm: A declarative approach to continuous integration. In: Workshop
on Advanced Software Development Tools and Techniques (WASDeTT 2008).
URL http://smallwiki.unibe.ch/wasdett2008/
Dolstra, E., Visser, E., de Jonge, M., May 2004b. Imposing a memory management discipline on software deployment.
In: Proceedings of the 26th International Conference on Software Engineering (ICSE 2004). IEEE Computer Society,
pp. 583–592.
17