Philpax icon

Philpax

Notes · Other Peoples' Talks · FOSDEM 2026 · BLUE - A generic build-system crafted entirely in Guile

https://fosdem.org/2026/schedule/event/3A7VGM-blue/

  • Can run build commands
  • Framework to build your own build systems
  • Can define your objects and let blueknow what to do
  • Why another build system?
    • Blue is minimalist and self-contained
    • Only one dependency; guile
    • Blue can bootstrap itself
    • Blue is goal-based; you specify a goal and blue will figure out what steps are required
    • Blue is extensible
      • GOOPS: method overriding/redefining, inheritance
      • User-defined commands that can override built-in commands
      • Plugin system
      • Stencil system
      • Project serialisation
  • Hello blue:
    • Blueprint for gathering a blue project description
    • Stencil for a set of buildable types and utilities to simplify the description of common patterns
    • Buildables for an object that blue knows how to build
    • Put this together into a blueprint
  • This fails to begin with, because we need to provide a configuration for this stencil
    • Doing blue configure -- build
    • The double-dash is used to pass arguments to subcommands, like guix
  • Configuration:
    • Can define variables for project - version, cflags, etc
    • Project dependencies - can use list mapping to construct it
    • Blue can tell you why thing sfail
    • Example:
      • Start by bringing blue modules
        • Add a C stencil
      • Add CFLAGS variable
      • Add the rest of the state
      • Configure and build
  • Delayed computation
    • Expression evaluated at runtime with a dynamic computation environment
    • The application is memoized
    • Expression syntax for doing thisi
    • Syntax sugar for make-computation + lambda
    • Can be used for obtaining configuration values
    • Much more than variable expression; bring the power of Guile, and can be serialised to disk
  • Replay functionality to debug how the build failed
  • Preference system; can be defined globally, project-locally, or env variable
  • Extensibility
    • Inheritance
    • Slots have a type system
    • Method overloading
    • Can define our own buildables
  • BLUE.EL - emacs interface for BLUE
  • BLUE can bootstrap by pulling itself in as a dependency
  • Currently in the pre-alpha phase
  • Lots of current features