diff options
author | Vincent Ambo <mail@tazj.in> | 2021-11-30T10·44+0300 |
---|---|---|
committer | Vincent Ambo <mail@tazj.in> | 2021-11-30T15·45+0300 |
commit | 8133fed255aba4975a3c933962091b46826d8c05 (patch) | |
tree | 348bacd50a6a0ea76caffdeba743a40c5a5706a9 /web/tvl | |
parent | 68d1f834a3db6b3ce1068a24750efa04125c9db9 (diff) |
feat(web/tvl/blog): Write Tvix introduction blog post r/3119
This post is intended to just let people know about the existence of Tvix, tell them a bit about the background and how to follow along. Change-Id: Ib5194d3aa385a0e30b4768ba28cb063784f6e0a3
Diffstat (limited to 'web/tvl')
-rw-r--r-- | web/tvl/blog/default.nix | 6 | ||||
-rw-r--r-- | web/tvl/blog/kicking-off-tvix.md | 1 | ||||
-rw-r--r-- | web/tvl/blog/rewriting-nix.md | 79 |
3 files changed, 82 insertions, 4 deletions
diff --git a/web/tvl/blog/default.nix b/web/tvl/blog/default.nix index cedfc6b41787..2455dbbdf728 100644 --- a/web/tvl/blog/default.nix +++ b/web/tvl/blog/default.nix @@ -9,10 +9,10 @@ posts = [ { - key = "kicking-off-tvix"; - title = "Kicking off Tvix"; + key = "rewriting-nix"; + title = "Tvix: We are rewriting Nix"; date = 1636038556; - content = ./kicking-off-tvix.md; + content = ./rewriting-nix.md; draft = true; } ]; diff --git a/web/tvl/blog/kicking-off-tvix.md b/web/tvl/blog/kicking-off-tvix.md deleted file mode 100644 index 295c1bb9c6cd..000000000000 --- a/web/tvl/blog/kicking-off-tvix.md +++ /dev/null @@ -1 +0,0 @@ -To be written. diff --git a/web/tvl/blog/rewriting-nix.md b/web/tvl/blog/rewriting-nix.md new file mode 100644 index 000000000000..9c62fc496f83 --- /dev/null +++ b/web/tvl/blog/rewriting-nix.md @@ -0,0 +1,79 @@ +Evaluating the Nix programming language, used by the Nix package +manager, is currently very slow. This becomes apparent in all projects +written in Nix that are not just simple package definitions, for +example: + +* the NixOS module system +* TVL projects like + [`//nix/yants`](https://at.tvl.fyi/?q=%2F%2Fnix%2Fyants) and + [`//web/bubblegum`](https://at.tvl.fyi/?q=%2F%2Fweb%2Fbubblegum). +* the code that [generates build + instructions](https://at.tvl.fyi/?q=%2F%2Fops%2Fpipelines) for TVL's + [CI setup](https://tvl.fyi/builds) + +Whichever project you pick, they all suffer from issues with the +language implementation. At TVL, it takes us close to a minute to +create the CI instructions for our monorepo at the moment - despite it +being a plain Nix evaluation. Running our Nix-native build systems for +[Go](https://code.tvl.fyi/about/nix/buildGo) and [Common +Lisp](https://code.tvl.fyi/about/nix/buildLisp) takes much more time +than we would like. + +Some time last year a few of us got together and started investigating +ways to modernise the current architecture of Nix and figure out how +to improve the speed of some of the components. We created over [250 +commits](https://cl.tvl.fyi/q/topic:tvix) in our fork of the Nix 2.3 +codebase at the time, tried [performance +experiments](https://cl.tvl.fyi/c/depot/+/1123/) aimed at improving +the current evaluator and fought [gnarly +bugs](https://cl.tvl.fyi/c/depot/+/1504). + +After a while we realised that we are treading water: Some of our +ideas are too architecturally divergent from Nix to be done on top of +the existing codebase, and the memory model of Nix causes significant +headaches when trying to do any kind of larger change. + +We needed an alternative approach and started brainstorming on a bent +whiteboard in a small flat in Hurghada, Egypt. + +![flokli & tazjin brainstorming](https://static.tvl.fyi/latest/flokli_tazjin_tvix.webp) + +<!-- TODO(tazjin): Wait for adisbladis approval to use this picture +![adisbladis & tazjin brainstorming](https://static.tvl.fyi/latest/adisbladis_tazjin_tvix.webp) +--> + +Half a year later we are now ready to announce our new project: +**Tvix**, a re-imagined Nix with full nixpkgs compatibility. Tvix is +generously funded [by NLNet](https://nlnet.nl/project/Tvix/) (thanks!) +and we are ready to start implementing it. + +The [Tvix +architecture](https://code.tvl.fyi/about/tvix/docs/components.md) is +designed to be modular: It should be possible to write an evaluator +that plugs in the Guix language, to use arbitrary builders, and to +replace the store implementation. + +Tvix has these high-level goals: + +* Creating an alternative implementation of Nix that is **fully + compatible with nixpkgs**, as we believe that most of the value of + Nix currently lives in the massive amount of community contributions + to nixpkgs. +* A new Nix language implementation with a more efficient interpreter, + and without the strict separation between evaluation and build + phases +* Well-defined interaction protocols for how the three different + components (evaluator, builder, store) interact. +* A builder implementation using OCI instead of custom sandboxing + code. + +Tvix is not intended to *replace* Nix, instead we want to improve the +ecosystem by offering a diversity of implementations. However, we do +not intend to support experimental features. + +As things ramp up we will be posting more information on this blog, +for now you can keep an eye on +[`//tvix`](https://cs.tvl.fyi/depot/-/tree/tvix) in the TVL monorepo, +subscribe to [our feed](https://tvl.fyi/feed.atom). + +Stay tuned! |