{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,1,22]],"date-time":"2026-01-22T10:05:48Z","timestamp":1769076348956,"version":"3.49.0"},"reference-count":32,"publisher":"Cambridge University Press (CUP)","issue":"5-6","license":[{"start":{"date-parts":[[2010,10,15]],"date-time":"2010-10-15T00:00:00Z","timestamp":1287100800000},"content-version":"unspecified","delay-in-days":0,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2010,11]]},"abstract":"<jats:title>Abstract<\/jats:title><jats:p>Existing package and system configuration management tools suffer from an<jats:italic>imperative model<\/jats:italic>, where system administration actions such as package upgrades or changes to system configuration files are stateful: they destructively update the state of the system. This leads to many problems, such as the inability to roll back changes easily, to deploy multiple versions of a package side-by-side, to reproduce a configuration deterministically on another machine, or to reliably upgrade a system. In this paper we show that we can overcome these problems by moving to a<jats:italic>purely functional system configuration model<\/jats:italic>. This means that all static parts of a system (such as software packages, configuration files and system startup scripts) are built by pure functions and are immutable, stored in a way analogous to a heap in a purely functional language. We have implemented this model in<jats:italic>NixOS<\/jats:italic>, a non-trivial Linux distribution that uses the<jats:italic>Nix package manager<\/jats:italic>to build the entire system configuration from a modular, purely functional specification.<\/jats:p>","DOI":"10.1017\/s0956796810000195","type":"journal-article","created":{"date-parts":[[2010,10,15]],"date-time":"2010-10-15T11:33:51Z","timestamp":1287142431000},"page":"577-615","source":"Crossref","is-referenced-by-count":33,"title":["NixOS: A purely functional Linux distribution"],"prefix":"10.1017","volume":"20","author":[{"given":"EELCO","family":"DOLSTRA","sequence":"first","affiliation":[]},{"given":"ANDRES","family":"L\u00d6H","sequence":"additional","affiliation":[]},{"given":"NICOLAS","family":"PIERRON","sequence":"additional","affiliation":[]}],"member":"56","published-online":{"date-parts":[[2010,10,15]]},"reference":[{"key":"S0956796810000195_ref22","doi-asserted-by":"publisher","DOI":"10.1145\/72551.72554"},{"key":"S0956796810000195_ref2","doi-asserted-by":"publisher","DOI":"10.1145\/1291151.1291184"},{"key":"S0956796810000195_ref21","unstructured":"Heydon A. , Levin R. , Mann T. & Yu Y. (March 2001). The Vesta Approach to Software Configuration Management. Tech. Rep. Research Report 168. Compaq Systems Research Center."},{"key":"S0956796810000195_ref7","doi-asserted-by":"crossref","first-page":"241","DOI":"10.1007\/3-540-60578-9_21","volume-title":"Selected Papers from the ICSE SCM-4 and SCM-5 Workshops on Software Configuration Management","author":"Clemm","year":"1995"},{"key":"S0956796810000195_ref13","first-page":"81","volume-title":"Eighth Workshop on Language Descriptions, Tools and Applications (LDTA 2008)","author":"Dolstra","year":"2008"},{"key":"S0956796810000195_ref9","unstructured":"den Breejen W. (March 2008). Managing State in a Purely Functional Deployment Model. M.Phil. thesis, Dept. of Information and Computing Sciences, Utrecht University. INF\/SCR-2007-053."},{"key":"S0956796810000195_ref4","unstructured":"den Breejen Wouter . 2008 (Mar.). Managing state in a purely functional deployment model. M.Phil. thesis, Dept. of Information and Computing Sciences, Utrecht University. INF\/SCR-2007-053."},{"key":"S0956796810000195_ref29","volume-title":"Advanced Programming in the UNIX Environment","author":"Stevens","year":"2005"},{"key":"S0956796810000195_ref26","volume-title":"Haskell 98 Language and Libraries: The revised Report","author":"Peyton Jones","year":"2004"},{"key":"S0956796810000195_ref28","first-page":"281","volume-title":"Proceedings of the 35th Annual Hawaii International Conference on System Sciences (HICSS'02)","author":"Sloane","year":"2002"},{"key":"S0956796810000195_ref32","unstructured":"Tucker D. B. & Krishnamurthi S. (2001) Applying module system research to package management. In Tenth International Workshop on Software Configuration Management (SCM-10)."},{"key":"S0956796810000195_ref10","first-page":"61","volume-title":"HotOS X: 10th Workshop on Hot Topics in Operating Systems","author":"DeTreville","year":"2005"},{"key":"S0956796810000195_ref20","first-page":"311","volume-title":"ACM SIGPLAN '00 Conference on Programming Language Design and Implementation","author":"Heydon","year":"2000"},{"key":"S0956796810000195_ref18","doi-asserted-by":"publisher","DOI":"10.1145\/1086365.1086380"},{"key":"S0956796810000195_ref6","unstructured":"Clemm G. (February 1986) The Odin System \u2014 an Object Manager for Extensible Software Environments. Ph.D. thesis, University of Colorado at Boulder."},{"key":"S0956796810000195_ref5","first-page":"309","article-title":"A site configuration engine","volume":"8","author":"Burgess","year":"1995","journal-title":"Computing systems"},{"key":"S0956796810000195_ref3","unstructured":"Boehm Hans-Juergen . 1993 (June). Space efficient conservative garbage collection. Pages 197\u2013206 of: Proceedings of the ACM SIGPLAN '93 Conference on Programming Language Design and Implementation. SIGPLAN Notices, no. 28\/6."},{"key":"S0956796810000195_ref30","unstructured":"TIS Committee. (May 1995) Tool Interface Specification (TIS) Executable and Linking Format (ELF) Specification, Version 1.2."},{"key":"S0956796810000195_ref15","doi-asserted-by":"publisher","DOI":"10.1002\/spe.4380090402"},{"key":"S0956796810000195_ref12","unstructured":"Dolstra E. (2006) The Purely Functional Software Deployment Model. Ph.D. thesis, Faculty of Science, Utrecht University, The Netherlands."},{"key":"S0956796810000195_ref1","unstructured":"Anderson Rick . 2000 (Jan.). The end of DLL hell. MSDN, http:\/\/msdn2.microsoft.com\/en-us\/library\/ms811694.aspx."},{"key":"S0956796810000195_ref19","first-page":"155","volume-title":"Proceedings of the 16th Systems Administration Conference (LISA '02)","author":"Hart","year":"2002"},{"key":"S0956796810000195_ref14","doi-asserted-by":"publisher","DOI":"10.1109\/ICSE.2004.1317480"},{"key":"S0956796810000195_ref23","first-page":"115","volume-title":"Proceedings of the 17th USENIX Conference on System Administration (LISA '03)","author":"Kanies","year":"2003"},{"key":"S0956796810000195_ref25","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796800000319"},{"key":"S0956796810000195_ref11","doi-asserted-by":"crossref","unstructured":"Dolstra E. (November 2005). Secure sharing between untrusted users in a transparent source\/binary deployment model. In 20th IEEE\/ACM International Conference on Automated Software Engineering (ASE 2005), pp. 154\u2013163.","DOI":"10.1145\/1101908.1101933"},{"key":"S0956796810000195_ref31","first-page":"99","volume-title":"Proceedings of the 16th Systems Administration Conference (LISA '02)","author":"Traugott","year":"2002"},{"key":"S0956796810000195_ref16","volume-title":"Red Hat RPM Guide","author":"Foster-Johnson","year":"2003"},{"key":"S0956796810000195_ref8","first-page":"1","volume-title":"HotSWUp '08: Proceedings of the 1st International Workshop on Hot Topics in Software Upgrades","author":"Cosmo","year":"2008"},{"key":"S0956796810000195_ref24","first-page":"25","volume-title":"Proceedings of the USENIX 1995 Technical Conference","author":"Pendry","year":"1995"},{"key":"S0956796810000195_ref27","volume-title":"Applied Cryptography","author":"Schneier","year":"1996"},{"key":"S0956796810000195_ref17","unstructured":"FreeBSD Project. (2009) FreeBSD Ports Collection. Available at: http:\/\/www.freebsd.org\/ports\/"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796810000195","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2020,6,12]],"date-time":"2020-06-12T23:36:17Z","timestamp":1592004977000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796810000195\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2010,10,15]]},"references-count":32,"journal-issue":{"issue":"5-6","published-print":{"date-parts":[[2010,11]]}},"alternative-id":["S0956796810000195"],"URL":"https:\/\/doi.org\/10.1017\/s0956796810000195","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2010,10,15]]}}}