Software package managers



Before the current trend to distribute containerised and/or sandboxed apps, our platform maintainers worked out how to install dependencies and such via package managers.

Installing necessities?

Homebrew

TBD

Nix

The Nixos dependency/build system works by isolating dependencies which accomplishes many of the same things in its own elegant way; somewhere between a version manager and a package manager.

It is a packaging system that builds unique combinations of dependencies for particular software in a functional language style (i.e. no side-effects). Works on linux or OSX. Nixos is a whole linux distribution built on it which sounds like it is wonderful when it works, but it might occasionally be a crusade. The pills are a series of essays in how the system works.

In their words:

Nix is a purely functional package manager. This means that it treats packages like values in purely functional programming languages such as Haskell — they are built by functions that don’t have side-effects, and they never change after they have been built. Nix stores packages in the Nix store, usually the directory /nix/store, where each package has its own unique subdirectory such as/nix/store/b6gvzjyb2pg0kjfwrjmg1vfhh54ad73z-firefox-33.1/. where b6gvzjyb2pg0… is a unique identifier for the package that captures all its dependencies (it’s a cryptographic hash of the package’s build dependency graph). This enables many powerful features:

Multiple versions, Complete dependencies, Multi-user support, Garbage collection …

Chocolatey

TBD

Macports

TBD

Conda

Designed for python, but somewhat generic. I am not a massive fan of this in practice; it has seemed a little glitchy.

Generic dependency managers

You want to have specific versions of the supporting libraries for specific purposes. This is extremely common, and systems exits to do it. NB that Nix, above, does this automatically. Homebrew can be made to do it with careful configuration — possibly dotenv would help do it better. See dependency management.

Containerize everything

That is an emphatic kind of package/version management, I suppose. See containerization.

AUR

TBD


Warning! Experimental comments system! If is does not work for you, let me know via the contact form.

No comments yet!

GitHub-flavored Markdown & a sane subset of HTML is supported.