diff options
author | Florian Klink <flokli@flokli.de> | 2021-03-31T22·30+0200 |
---|---|---|
committer | flokli <flokli@flokli.de> | 2021-03-31T22·34+0000 |
commit | 3c4e401c9ee9bd837ce6446cd2ddb9b1bed40f8a (patch) | |
tree | 0d5cf37c9e70d7bd1e5e57b92737c24f3b2e5382 /tvix/doc/components.md | |
parent | 1fccc23f3cb5bd194310e30ffd9c4376e446251f (diff) |
chore(tvix/docs): move from doc r/2378
Most other docs folders in the repo are called `doc` too, let's make this consistent. Change-Id: Icd712429b51763076548c977321e370f2a77877e Reviewed-on: https://cl.tvl.fyi/c/depot/+/2741 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
Diffstat (limited to 'tvix/doc/components.md')
-rw-r--r-- | tvix/doc/components.md | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/tvix/doc/components.md b/tvix/doc/components.md deleted file mode 100644 index 19e7baa3ec8a..000000000000 --- a/tvix/doc/components.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: "Tvix - Architecture & data flow" -numbersections: true -author: -- adisbladis -- flokli -- tazjin -email: -- adis@blad.is -- mail@tazj.in -lang: en-GB -classoption: -- twocolumn -header-includes: -- \usepackage{caption, graphicx, tikz, aeguill, pdflscape} ---- - -# Background - -We intend for Tvix tooling to be more decoupled than the existing, -monolithic Nix implementation. In practice, we expect to gain several -benefits from this, such as: - -- Ability to use different builders -- Ability to use different store implementations -- No monopolisation of the implementation, allowing users to replace - components that they are unhappy with (up to and including the - language evaluator) -- Less hidden intra-dependencies between tools due to explicit RPC/IPC - boundaries - -Communication between different components of the system will use -gRPC. The rest of this document outlines the components. - -# Components - -## Coordinator - -*Purpose:* The coordinator (in the simplest case, the Tvix CLI tool) -oversees the flow of a build process and delegates tasks to the right -subcomponents. For example, if a user runs the equivalent of -`nix-build` in a folder containing a `default.nix` file, the -coordinator will invoke the evaluator, pass the resulting derivations -to the builder and coordinate any necessary store interactions (for -substitution and other purposes). - -While many users are likely to use the CLI tool as their primary -method of interacting with Tvix, it is not unlikely that alternative -coordinators (e.g. for a distributed, "Nix-native" CI system) would be -implemented. To facilitate this, we are considering implementing the -coordinator on top of a state-machine model that would make it -possible to reuse the FSM logic without tying it to any particular -kind of application. - -## Evaluator - -*Purpose:* Eval takes care of evaluating Nix code. In a typical build -flow it would be responsible for producing derivations. It can also be -used as a standalone tool, for example, in use-cases where Nix is used -to generate configuration without any build or store involvement. - -*Requirements:* For now, it will run on the machine invoking the build -command itself. We give it filesystem access to handle things like -imports or `builtins.readFile`. - -In the future, we might abstract away raw filesystem access by -allowing the evaluator to request files from the coordinator (which -will query the store for it). This might get messy, and the benefits -are questionable. We might be okay with running the evaluator with -filesystem access for now and can extend the interface if the need -arises. - -## Builder - -*Purpose:* A builder receives derivations from the coordinator and -builds them. - -By making builder a standardised interface it's possible to make the -sandboxing mechanism used by the build process pluggable. - -Nix is currently using a hard-coded -[libseccomp](https://github.com/seccomp/libseccomp) based sandboxing -mechanism and another one based on -[sandboxd](https://www.unix.com/man-page/mojave/8/sandboxd/) on macOS. -These are only separated by [compiler preprocessor -macros](https://gcc.gnu.org/onlinedocs/cpp/Ifdef.html) within the same -source files despite having very little in common with each other. - -This makes experimentation with alternative backends difficult and -porting Nix to other platforms harder than it has to be. We want to -write a new Linux builder which uses -[OCI](https://github.com/opencontainers/runtime-spec), the current -dominant Linux containerisation technology, by default. - -With a well-defined builder abstraction, it's also easy to imagine -other backends such as a Kubernetes-based one in the future. - -## Store - -*Purpose:* Store takes care of storing build results. It provides a -unified interface to get file paths and upload new ones. - -Most likely, we will end up with multiple implementations of store, a -few possible ones that come to mind are: - -- Local -- SSH -- GCP -- S3 -- Ceph - -# Figures - -![component flow](./component-flow.svg) |