App installer design: click packages

Jos van den Oever jos at
Wed May 8 18:11:25 UTC 2013

Hello Colin,

I read you ubuntu-devel mail about research into packaging. You asked for pointers, so I'm mailing you one.

Many of the points you are looking for in a package manager are covered by Nix.
Nix is a distro independent package manager that is very different from the standard package managers.

Instead of putting all applications in /usr, each version of each package is stored in a dedicated folder. It is possible to have many versions of packages and different users can use different versions.

Nix works on ubuntu and many other operating systems today. (Also, there is an OS that uses Nix as the main package manager, NixOS.)

Packages are built from Nix expressions, which is a simple functional language. A Nix expression describes everything that goes into a package build action (a “derivation”): other packages, sources, the build script, environment variables for the build script, etc. Nix tries very hard to ensure that Nix expressions are deterministic: building a Nix expression twice should yield the same result.

The Nix community on #nix is very active and helpful.

To avoid dependencies between apps, you can group nix expressions into one package.

Installing a package means unpacking and setting some symlinks. Switching between versions is just a matter of setting symlinks once both versions are unpacked.

Any user can install any package for themselves.

A huge amount of research including PhD thesis went into creating Nix.


More information about the ubuntu-devel mailing list