Skip to content

Latest commit

 

History

History
73 lines (45 loc) · 1.58 KB

10-why-nix.org

File metadata and controls

73 lines (45 loc) · 1.58 KB

Why Nix?

There are a lot of package managers


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

How about system dependencies?


  • Setup a build environment?
  • Install dependencies?
  • Find and link against the right version of a library

file:imgs/fix-ci.png

… and that’s just at dev time!

It gets even trickier at deploy time


docker, ansible, chef, puppet, …

Software is hard


  • 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

What do we depend on?

Assorted other issues


  • 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