about summary refs log tree commit diff
path: root/users/flokli/presentations
diff options
context:
space:
mode:
authorFlorian Klink <flokli@flokli.de>2024-10-24T11ยท37+0200
committerclbot <clbot@tvl.fyi>2024-10-26T08ยท44+0000
commit85132ec6068a16e1df3f7d6e0e8daa200fdf96be (patch)
tree0db47439efa077d3be561faeec1885b18df2abd9 /users/flokli/presentations
parent2225b52cb54eb917c025eceb447b96d06c23dd99 (diff)
feat(users/flokli/nixon-2024): init r/8856
Change-Id: I547a5504f6782169dd7280c0b5c21cbe66068a2e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/12682
Tested-by: BuildkiteCI
Reviewed-by: flokli <flokli@flokli.de>
Autosubmit: flokli <flokli@flokli.de>
Diffstat (limited to 'users/flokli/presentations')
-rw-r--r--users/flokli/presentations/2024-10-25-nixcon-tvix/.gitignore1
-rw-r--r--users/flokli/presentations/2024-10-25-nixcon-tvix/default.nix35
-rw-r--r--users/flokli/presentations/2024-10-25-nixcon-tvix/nar-bridge.pngbin0 -> 277384 bytes
-rw-r--r--users/flokli/presentations/2024-10-25-nixcon-tvix/nix-compat.pngbin0 -> 380478 bytes
-rw-r--r--users/flokli/presentations/2024-10-25-nixcon-tvix/presentation.md261
-rw-r--r--users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-build.pngbin0 -> 216565 bytes
-rw-r--r--users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-castore.pngbin0 -> 409980 bytes
-rw-r--r--users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-eval.pngbin0 -> 248106 bytes
-rw-r--r--users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-glue.pngbin0 -> 201091 bytes
-rw-r--r--users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-store.pngbin0 -> 229777 bytes
-rw-r--r--users/flokli/presentations/2024-10-25-nixcon-tvix/tvix_solves_this.jpgbin0 -> 97147 bytes
11 files changed, 297 insertions, 0 deletions
diff --git a/users/flokli/presentations/2024-10-25-nixcon-tvix/.gitignore b/users/flokli/presentations/2024-10-25-nixcon-tvix/.gitignore
new file mode 100644
index 000000000000..397b4a7624e3
--- /dev/null
+++ b/users/flokli/presentations/2024-10-25-nixcon-tvix/.gitignore
@@ -0,0 +1 @@
+*.log
diff --git a/users/flokli/presentations/2024-10-25-nixcon-tvix/default.nix b/users/flokli/presentations/2024-10-25-nixcon-tvix/default.nix
new file mode 100644
index 000000000000..88417a4a896a
--- /dev/null
+++ b/users/flokli/presentations/2024-10-25-nixcon-tvix/default.nix
@@ -0,0 +1,35 @@
+{ depot, pkgs, ... }:
+
+let
+  inherit (pkgs)
+    fontconfig qrencode runCommand stdenv;
+  mkQr = url: runCommand "qrcode.png" { } ''
+    ${qrencode}/bin/qrencode -o $out -t SVG -s 5 \
+      --background=fafafa \
+      --foreground=000000 \
+      ${url}
+  '';
+in
+stdenv.mkDerivation {
+  name = "2024-nixcon-tvix";
+  src = ./.;
+
+  FONTCONFIG_FILE = pkgs.makeFontsConf {
+    fontDirectories = with pkgs; [ jetbrains-mono fira fira-code fira-mono lato ];
+  };
+
+  PUPPETEER_EXECUTABLE_PATH = "${pkgs.chromium}/bin/chromium";
+  PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = "1";
+
+  nativeBuildInputs = [ pkgs.reveal-md pkgs.graphviz ];
+
+  buildPhase = ''
+    cp ${depot.tvix.logo}/logo.png tvix-logo.png
+    cp ${mkQr "https://flokli.de"} qrcode-flokli.svg
+    cp ${mkQr "https://tvix.dev"} qrcode-tvix.svg
+
+    mkdir -p $out
+    reveal-md --static $out presentation.md
+    reveal-md --print $out/slides.pdf presentation.md
+  '';
+}
diff --git a/users/flokli/presentations/2024-10-25-nixcon-tvix/nar-bridge.png b/users/flokli/presentations/2024-10-25-nixcon-tvix/nar-bridge.png
new file mode 100644
index 000000000000..1cf449a999cc
--- /dev/null
+++ b/users/flokli/presentations/2024-10-25-nixcon-tvix/nar-bridge.png
Binary files differdiff --git a/users/flokli/presentations/2024-10-25-nixcon-tvix/nix-compat.png b/users/flokli/presentations/2024-10-25-nixcon-tvix/nix-compat.png
new file mode 100644
index 000000000000..958ce1bf8dcf
--- /dev/null
+++ b/users/flokli/presentations/2024-10-25-nixcon-tvix/nix-compat.png
Binary files differdiff --git a/users/flokli/presentations/2024-10-25-nixcon-tvix/presentation.md b/users/flokli/presentations/2024-10-25-nixcon-tvix/presentation.md
new file mode 100644
index 000000000000..ca636e0a86b2
--- /dev/null
+++ b/users/flokli/presentations/2024-10-25-nixcon-tvix/presentation.md
@@ -0,0 +1,261 @@
+---
+author:
+- Florian Klink
+date: 2024-10-25
+title: "Tvix: Status update"
+theme: solarized
+revealOptions:
+  transition: 'fade'
+---
+
+# Tvix: Status update
+
+![Tvix Logo](tvix-logo.png)
+
+2023-10-25
+
+Florian Klink (flokli)
+
+---
+
+## Whoami
+
+- flokli<!-- .element: class="fragment" -->
+- nixpkgs contributor since 2018, maintaining systemd, nsncd and more<!-- .element: class="fragment" -->
+- Freelance Nix/DevOps consultant<!-- .element: class="fragment" -->
+
+---
+
+## What is Tvix?
+
+---
+
+![tvix solves this](./tvix_solves_this.jpg)
+<!-- .element: class="r-stretch" -->
+
+---
+
+## What is Tvix?
+
+- A Rust re-implementation of the components of the Nix package manager<!-- .element: class="fragment" -->
+- Uses different underlying approaches while retaining Nix compatibility "on the surface"<!-- .element: class="fragment" -->
+- modular architecture, allowing to recombine aspects to solve your usecase<!-- .element: class="fragment" -->
+- No "end-user CLI" for now, focus on getting the foundational architecture right and 100% correctness with Nix<!-- .element: class="fragment" -->
+
+---
+
+## Topics
+- Component overview<!-- .element: class="fragment" -->
+- Recent developments<!-- .element: class="fragment" -->
+- Next steps<!-- .element: class="fragment" -->
+
+Note: Component overview, to understand a bit better how it's different / updates since the last talk / outlook on roadmap
+
+---
+
+## Structure
+
+  - <!-- .element: class="fragment" -->
+    **tvix-castore**, the granular data storage/syncing engine.
+  - <!-- .element: class="fragment" -->
+    **tvix-store**, the "Nix store implementation" on top of tvix-castore
+  - <!-- .element: class="fragment" -->
+    **nix-compat**, a library providing access to data formats, protocols and concepts
+  - <!-- .element: class="fragment" -->
+    **tvix-eval**, a bytecode interpreter evaluator and core Nix *language* concepts and builtins
+  - <!-- .element: class="fragment" -->
+    **tvix-build**, a generic builder interface
+  - <!-- .element: class="fragment" -->
+    **tvix-glue**, combines tvix-eval with tvix-[ca]store and tvix-build
+
+
+Note: one big cargo workspace / go into detail later! / nix-compat: concepts like output path calculation, doesn't depend on tvix crates
+tvix-eval: language concepts being Scopes, Thunks, Nix values, "core builtins"
+
+----
+
+![tvix-castore](./tvix-castore.png)
+<!-- .element: class="r-stretch" -->
+
+Note: Nix does do content addressing on a store path level, we're on a per-file/chunk in file. That model allows granular syncing and reuse of parts, which will  speedup substitution/copying. Because everything is ca, it'll also allow decentralization and local p2p substitution. Think about everyone in the same room serving chunks. verified streaming.
+
+----
+
+![tvix-store](./tvix-store.png)
+<!-- .element: class="r-stretch" -->
+
+Note: track all metadata about store paths (think about the sqlite db), and link to castore instead of storing NAR. NarCalculation: this computation, is super nice to cache, as this info
+never needs to expire, and is reconstructable in a pure CA manner.
+
+----
+
+![tvix-store](./nix-compat.png)
+<!-- .element: class="r-stretch" -->
+
+Note: kept as a somewhat separate library, Tvix "first consumer". But use from your code, it doesn't depend on Tvix bits. Regularly factoring out Nix concepts into this library
+
+----
+
+![tvix-eval](./tvix-eval.png)
+<!-- .element: class="r-stretch" -->
+
+Note: only includes basic builtins, like string manipulation, math, โ€ฆ. Other crates can bring their own builtins
+
+----
+
+![tvix-build](./tvix-build.png)
+<!-- .element: class="r-stretch" -->
+
+Note: Not aware of Nix, store paths etc. just flexible enough to express everything in there. Use it for your own build system!
+
+----
+
+![tvix-glue](./tvix-glue.png)
+<!-- .element: class="r-stretch" -->
+
+Note: connects the evaluator to store and builders
+
+----
+
+![nar-bridge](./nar-bridge.png)
+<!-- .element: class="r-stretch" -->
+
+Note: Example on how to use this: Nix HTTP binary cache lens into tvix-[ca]store, allows Nix to download from and push into. It renders NARs on-the-fly
+
+---
+
+## Updates
+Rough overview. Check blog posts and `git log` for details!
+
+----
+
+## Updates (#1)
+
+ - <!-- .element: class="fragment" -->
+   Fixes on error catchability and context behaviour
+ - <!-- .element: class="fragment" -->
+   More compact Nix Value types (memory-wise)
+ - <!-- .element: class="fragment" -->
+   `tvix-cli` REPL global scope manipulation (assign variables and use them in next command)
+ - <!-- .element: class="fragment" -->
+   `firefox.outPath` and `pkgsCross.aarch64-multiplatform.firefox.outPath` correct and added to CI ๐ŸŽ‰
+
+Notes: catchability/context to align behaviour with nix / โ€ฆ / assign variables and use them in the next REPL command
+
+----
+
+## Updates (#2)
+
+ - <!-- .element: class="fragment" -->
+   OpenTelemetry integration, trace propagation throughout the entire stack
+ - <!-- .element: class="fragment" -->
+   more backends in tvix-[ca]store (`object_store`/`local fs`/`redb`/`bigtable`/โ€ฆ)
+ - <!-- .element: class="fragment" -->
+   nar-bridge RIIR, was deployed as a fetch-through cache for cache.nixos.org at Bornhack
+ - <!-- .element: class="fragment" -->
+   store composition/combinators
+ - <!-- .element: class="fragment" -->
+   wiring up of builds (without reference propagation yet, but reference scanning)
+
+Notes: o11y already proven super helpful for debugging where time is spent / first version of composition / builds waiting on reference propagation
+
+----
+
+## Other Updates
+
+ - <!-- .element: class="fragment" -->
+   A lot of the tooling for `cache.nixos.org` usage / closure analysis making use of and contributing to `nix-compat` (`@edef`) ๐ŸŽ‰
+ - <!-- .element: class="fragment" -->
+   "Replit using `tvix-[ca]store` and reporting 10x storage reduction" (`@cbrewster`) ๐ŸŽ‰
+ - <!-- .element: class="fragment" -->
+   "Devenv is switching to Tvix" (Talk on Saturday 12:55, `@domenkozar`) ๐ŸŽ‰
+
+---
+
+## Next steps (in no specific order):
+
+ - <!-- .element: class="fragment" -->
+   Test suite classification system, to decouple test cases from test runner and share with other Nix impls
+ - <!-- .element: class="fragment" -->
+   (Continuous) Docs deployment, website restructuring
+ - <!-- .element: class="fragment" -->
+   Interactions with the evaluator (LSP, DAP)
+ - <!-- .element: class="fragment" -->
+   Persistent deployment of nar-bridge, as fetch-through cache for `cache.nixos.org`
+ - <!-- .element: class="fragment" -->
+   Blob / Chunking protocol improvements (use local chunks where possible, allow readahead)
+
+Note: Allows filtering, reusing test cases in Nixcpp and Lix.
+      Mention some behavorial changes found.
+      Mention fetchTree
+      Make it easier for new contributors to get started
+      LSP / Debug adapter protocol / tvix-eval jobs
+      / โ€ฆ / is gonna improve performance for IO into store paths
+
+----
+
+## Next steps (in no specific order) (cont.):
+
+ - <!-- .element: class="fragment" -->
+   "Build/Fetch realization goal engine" (tradeoff network bandwidth and CPU time) 
+ - <!-- .element: class="fragment" -->
+   More per-store metrics and instance names
+ - <!-- .element: class="fragment" -->
+   More backends (p2p discovery, ipfs, โ€ฆ)
+
+Note: needed for builds / to get better insights into cache hit ratios etc.
+
+---
+
+## Contributing
+
+- <!-- .element: class="fragment" -->
+  Join the IRC channel (`#tvix-dev` on `hackint`), bridged to Matrix and XMPP
+- <!-- .element: class="fragment" -->
+  Check our issue tracker (b.tvl.fyi), as well as `tvix/docs/src/TODO.md` (but ask!)
+- <!-- .element: class="fragment" -->
+  Try to use it and tell us how you broke it!
+- <!-- .element: class="fragment" -->
+  Sponsoring
+
+Note: make sure to ask in the channel to ensure noone is already working on this
+
+---
+
+# Thanks to...
+
+- <!-- .element: class="fragment" -->
+  all Tvix contributors
+- <!-- .element: class="fragment" -->
+  Nix community members for their input on the architecture
+- <!-- .element: class="fragment" -->
+  Sponsors
+
+Note: some drive-by, some sticking around longer / NLNET / Clan
+
+----
+
+# Questions?
+
+<style>
+.container{
+    display: flex;
+}
+.col{
+    flex: 1;
+}
+</style>
+
+<div class="container">
+
+<div class="col">
+Florian Klink / <a href="https://flokli.de">flokli.de</a><br />
+<img src="qrcode-flokli.svg" />
+</div>
+
+<div class="col">
+Tvix / <a href="https://tvix.dev">tvix.dev</a><br />
+<img src="qrcode-tvix.svg" />
+</div>
+
+</div>
diff --git a/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-build.png b/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-build.png
new file mode 100644
index 000000000000..5d11e73f7f12
--- /dev/null
+++ b/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-build.png
Binary files differdiff --git a/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-castore.png b/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-castore.png
new file mode 100644
index 000000000000..c1f42e1112b6
--- /dev/null
+++ b/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-castore.png
Binary files differdiff --git a/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-eval.png b/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-eval.png
new file mode 100644
index 000000000000..e7c034e6795d
--- /dev/null
+++ b/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-eval.png
Binary files differdiff --git a/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-glue.png b/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-glue.png
new file mode 100644
index 000000000000..00427aa143c7
--- /dev/null
+++ b/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-glue.png
Binary files differdiff --git a/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-store.png b/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-store.png
new file mode 100644
index 000000000000..c35723afc9ab
--- /dev/null
+++ b/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix-store.png
Binary files differdiff --git a/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix_solves_this.jpg b/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix_solves_this.jpg
new file mode 100644
index 000000000000..d5494b1ec507
--- /dev/null
+++ b/users/flokli/presentations/2024-10-25-nixcon-tvix/tvix_solves_this.jpg
Binary files differ