virtualenv brew poetry pyenv pipenv rbenv rvm docker npm yarn composer cabal stack cargo rebar enot evm hex bower spago wasmer svm swivm jdk_switcher docker vms update-alternatives chroot luarocks luadist berrybrew ppm apt lein yum asdf ports winget chocolatey nvm pnpm rustup nuget cake paket
- Setup a build environment?
- Install dependencies?
- Find and link against the right version of a library
file:imgs/fix-ci.png
docker, ansible, chef, puppet, …
- Our deploy targets are varied and numerous
- No two systems are the same
- How to keep track of dependencies?
❤ (theia) ~/smol> cat Cargo.lock | grep -F "[[package]]" | wc -l
263
❤ (theia) ~/big> cat Cargo.lock | grep -F "[[package]]" | wc -l
418
- Distribution package managers can’t package every library
- Libraries that are packaged can easily go out of date
- Distribution stability guarantees are not always great for software development (and also misunderstood!)
- Package managers keep track of symbolic names
Most package managers are failing us, and so are most build tools!
Nix solves the fundamental problem of dependencies
file:imgs/deps.png