This adds a new Website/Docs for Snix, using Thulite / Doks, which is mostly hugo and a bit of npm. Change-Id: Iea10d4068fa783ec0ddd6bcaba5c8d92b1a1168f
		
			
				
	
	
		
			35 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
title: "Protocol"
 | 
						|
slug: protocol
 | 
						|
description: ""
 | 
						|
summary: ""
 | 
						|
date: 2025-03-14T14:14:35+01:00
 | 
						|
lastmod: 2025-03-14T14:14:35+01:00
 | 
						|
draft: false
 | 
						|
weight: 41
 | 
						|
toc: true
 | 
						|
---
 | 
						|
 | 
						|
One goal of the builder protocol is to not be too tied to the Nix implementation
 | 
						|
itself, allowing it to be used for other builds/workloads in the future.
 | 
						|
 | 
						|
This means the builder protocol is versatile enough to express the environment a
 | 
						|
Nix build expects, while not being aware of "what any of this means".
 | 
						|
 | 
						|
For example, it is not aware of how certain environment variables are set in a
 | 
						|
nix build, but allows specifying environment variables that should be set.
 | 
						|
 | 
						|
It's also not aware of what nix store paths are. Instead, it allows:
 | 
						|
 | 
						|
 - specifying a list of paths expected to be produced during the build
 | 
						|
 - specifying a list of castore root nodes to be present in a specified
 | 
						|
   `inputs_dir`.
 | 
						|
 - specifying which paths are write-able during build.
 | 
						|
 | 
						|
In case all specified paths are produced, and the command specified in
 | 
						|
`command_args` succeeds, the build is considered to be successful.
 | 
						|
 | 
						|
This happens to be sufficient to *also* express how Nix builds works.
 | 
						|
 | 
						|
Check `build/protos/build.proto` for a detailed description of the individual
 | 
						|
fields, and the tests in `glue/src/tvix_build.rs` for some examples.
 |