| title | NixOS and Computational Reproducibility |
|---|---|
| subtitle | WHY YOU WON'T NEED TO INSTALL SOFTWARE ANYMORE SOON |
| author | Matthias Meschede |
| save_diagrams | true |
We need to interpret messages. The action depends on the interpreter as much as on the message.
print "Hello World"- interpret with a text editor and the code appears.
- interpret with Python 2 and "Hello World" appears.
- interpret with Python 3 and an error appears.
We need
- the program
- the interpreter of the program
- the interpreter of the interpreter of the program
- the interpreter of the interpreter of the interpreter of the program
- ...
- code
- code of all dependencies
- code of compilers/interpreters
- code/description of the operating system
- hardware description
- the physical environment in which the hardware is running
- description of the physical laws
- ?
print "Hello World"- ship code + build/run instructions for Python2 + all its dependencies
- ship code for gcc and all its dependencies to compile Python
- ship code/binaries for the Linux on which this should run
- ship exact description of the Laptop you are using
- ship exact description of the environment in which you use the Laptop (plugged in, connected to nuclear power plant)
- ship exact description of the physical laws ...
- ...
- code (least)
- ecosystem dependencies
- system dependencies
- OS kernel
- hardware (most)
- code 🗸
- ecosystem dependencies
- system dependencies
- OS kernel
- hardware
- code 🗸
- ecosystem dependencies 🗸
- system dependencies (some)
- OS kernel
- hardware
- code 🗸
- ecosystem dependencies 🗸
- system dependencies 🗸
- OS kernel
- hardware
- code 🗸
- ecosystem dependencies 🗸
- system dependencies 🗸
- OS kernel (optional)
- hardware (optional)
- external files are used
- user input is required
- sensor data is captured
- random numbers are generated
- order is determined by hardware (race condition)
- timestamps can be used
- Perfect Reproducibility is a dream
- High levels of reproducibility are possible. Alignment on stable standards and hermeticity are key.
- the content of every accessed external file/internet has to be declared
- timestamps are reset to 01-01-1970
- no user input
- limited hardware access
- unlike just shipping one big blob (Docker) Nix keeps dependencies in isolated building blocks from which new environments can be generated.
- building blocks are gathered in a huge online library called nixpkgs with 80000+ packages.
- Every program comes as a highly reproducible closure that includes everything (source code, source code of all dependencies, all build commands, ...) required to build and run it.
- Every closure has a unique name that is derived from its content.
- closure building blocks are stored in a database (local or remote)
Run code from 10 years ago
Take file from colleague and run it instantly
Use code from colleagues and build something on top
Use esoteric scripts/tools and be sure that they will still work tomorrow
Design a whole reproducible development environment in a text file
Describe your whole system in a file with detailed configuration and instantly get it on reinstall
Configure a whole reproducible system with multiple servers that talk to each other in a single text file


