Code Staging in GNU Guix
This work provides a novel approach for operating system configuration in GNU Guix, facilitating code management and reuse, but it is incremental as it builds upon existing functional package management concepts.
The paper introduces G-expressions (gexps) as a staging mechanism in GNU Guix to handle embedded code snippets for execution, addressing the need for hygienic code staging in a multi-tier programming environment. It reports on their implementation and experience in various operating system use cases, such as package builds and system services, enabling code reuse and sharing.
GNU Guix is a " functional " package manager that builds upon earlier work on Nix. Guix implements high-level abstractions such as packages and operating system services as domain-specic languages (DSLs) embedded in Scheme. It also implements build actions and operating system orchestration in Scheme. This leads to a multi-tier programming environment where embedded code snippets are staged for eventual execution. This paper presents G-expressions or " gexps ", the staging mechanism we devised for Guix. We explain our journey from traditional Lisp S-expressions to G-expressions, which augment the former with contextual information and ensure hygienic code staging. We discuss the implementation of gexps and report on our experience using them in a variety of operating system use cases-from package build processes to system services. Gexps provide a novel way to cover many aspects of OS connguration in a single, multi-tier language, while facilitating code reuse and code sharing .