declarative-talk/presentation.md

3.4 KiB

marp title description theme class transition paginate
true Declarative Distrbutions Declarative Distrbutions uncover
invert
fade true

Declarative Distros

bg right 80% bg right 80%


Quick Disclamer

We are both GNU Guix Users

While we will try to talk about generalities of declarative operating system paradigms, Guix and Nix specific things, etc, we may get some Nix (and even Guix) things wrong.


What is a Declarative Distro?

What does it mean?


  • A operating system defined by configuration
  • Without state
  • System is reproducible

Declarative v. Imperative

  • Most distros are imperative
    • You give them commands to get a result
  • Nix and Guix are declarative
    • You define a wanted end state and Guix/Nix gets you there its way

Reproducible

  • Systems have a given configuration
  • Configuration can duplicate systems
    • If you pin versions, you can make your system completely reproducible
  • Everything is isolated

Reproducible

w:25em


Isolation

  • Packages are built in isolated packages
  • No random spare files in file system
    • Anything not being used by a profile is eligible for garbage-collection
  • All state is containted
    • Preserves state-less root

Stability

  • Reproducibility and Isolation ensure the ability to rollback
  • Always have some working system state
  • Since any transaction is atomic, it either works or doesn't
    • Your system will never be left in a half updated state that is difficult to recover

NixOS

  • Released Jun 2003
    • Eelco Dolstra
  • Nix package manager (nix)
  • Nix language
  • Systemd
  • Wrote like an entire research paper on the theory behind Nix

bg left 40%


Guix

  • Released 2012
    • Forked from Nix
  • Guix package manager (guix)
  • GNU Guile (scheme/lisp)
  • GNU Shepherd
    • Not GNU/Herd

bg left 40%


Declarative Package Management

nix and guix commands


Declarative Package Management

  • Update system repositories
  • Build and/or install packages
  • Manage the store

Distro Store

  • Guix /gnu/store
  • Nix /nix/store
  • Stores all package and system files
  • Partially based off of configuration

Distro Profile

  • Guix ~/.guix-profile
  • Nix ~/.nix-profile
  • Symlink Read only system
    • Links store to current profile
    • Based off configuration

  • Store hold system and package files
  • Profile links to those files

Multidirection

$ which gcc
/home/tylerm/.guix-home/profile/bin/gcc # profile

$ readlink /home/tylerm/.guix-home/profile/bin/gcc
/gnu/store/spxcaq8gnmckhzz9a1wm3qc9dmz5bvsd-gcc-toolchain-12.3.0/bin/gcc # store

Multiple Profiles

  • System Profile (All users)
    • Good to contain system needed pacakges
    • Graphics drivers
    • Zsh
  • User Profile (Specific user)
    • Good to contain all user data
    • Browser
    • Applications
    • DE/WM

To Build The System

  • Package manager takes in user and system configuration
  • Downloads needed data into store
    • Prebuilt, signed binaries are called "substitutes"
  • Build any needed packages
  • Symlinks the user and system profiles

Temporary Packages

  • Nix and Guix allow installing packages temporarily
  • Uses contained environment
  • guix shell <package>
  • nix shell -p <package>

test

Test content in a slide