Skip to content
/ zb Public

An experiment in hermetic, reproducible build systems

License

Notifications You must be signed in to change notification settings

256lights/zb

Repository files navigation

zb

zb (pronounced "zee bee" or "zeeb") is an experiment in hermetic, reproducible build systems. It has not stabilized and should not be used for production purposes.

zb is based on the ideas in The purely functional software deployment model by Eelco Dolstra and Build systems à la carte, as well as the author's experience in working with build systems. The build model is mostly the same as in Nix, but build targets are configured in Lua instead of a domain-specific language.

For more motivation on the development of zb, see the early blog posts:

Examples

The hello world example:

return derivation {
  name    = "hello";
  infile  = path "hello.txt";
  builder = "/bin/sh";
  system  = "x86_64-linux";
  args    = {"-c", "while read line; do echo \"$line\"; done < $infile > $out"};
}

Other examples:

Getting Started

Prerequisites:

  • Knowledge of using the command-line for your OS (e.g. Terminal.app, Command Prompt, etc.)
  • Go 1.23.2 or later.

Linux or macOS

  1. sudo mkdir /zb && sudo chown $(id -u):$(id -g) /zb
  2. Clone this repository to your computer and cd into it.
  3. go build ./cmd/zb
  4. Start the build server (only on startup): ./zb serve --sandbox=0 &
  5. Run a build: ./zb build --file demo/hello.lua

You can use ./zb --help to get more information on commands.

Windows

Must be running Windows 10 or later, since zb depends on Windows support for Unix sockets.

  1. Install MinGW-w64. If you're using the Chocolatey package manager, you can run choco install mingw.
  2. Create a C:\zb directory.
  3. Clone this repository to your computer and cd into it.
  4. go build .\cmd\zb
  5. Start the build server in one terminal: .\zb.exe serve
  6. Run a build in another terminal: .\zb.exe build --file demo/hello_windows.lua

Next Steps

zb uses a slightly modified version of Lua 5.4. The primary difference is that strings (like those returned from the path function or the .out field of a derivation) can carry dependency information, like in the Nix expression language. This is largely hidden from the user. From there, the following libraries are available:

Objectives

License

MIT

About

An experiment in hermetic, reproducible build systems

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages