[Nix-dev] Separating free and non-free packages, again

Eelco Dolstra e.dolstra at tudelft.nl
Thu Nov 19 14:20:25 CET 2009


Hi,

A while back we had a discussion about separating free and non-free packages in
Nixpkgs.  The main motivation is that it allows people to make completely free
Nixpkgs / NixOS installations.  For instance, last week at the GNU Hackers
Meeting we discussed doing continuous integration builds of the various GNU
packages.  Obviously, you don't want an accidental dependency on a non-free
package in such builds.

After talking with Ludovic at the GHM, we came up with the following plan:

- Create a directory pkgs/non-free.

- Separate all-packages.nix into free-packages.nix and non-free-packages.nix,
with all-packages.nix defined (more or less) like this:

    import ./free-packages.nix
    //
    (if pathExists ./non-free-packages.nix
     then import ./non-free-packages.nix
     else {})

- Move the non-free packages to pkgs/non-free incrementally.  This includes
firmware packages (e.g. pkgs/non-free/firmware).  Nixpkgs contains only a
relatively small number of non-free packages, so it shouldn't be too hard.

This allows people who want to do so to remove pkgs/non-free and
non-free-packages.nix to obtain an entirely free version of Nixpkgs (and to use
it to build NixOS).  On the other hand, everybody else is unaffected.  In
particular, normal NixOS users will still have access to non-free packages like
the NVIDIA drivers.

In the previous thread there were some other proposals:

- Make a branch of Nixpkgs containing only free packages.  However, this would
be a lot of work to maintain.

- Make sure that all packages have an appropriate meta.license attribute, and
automatically warn if the user tries to build an non-free package.  This is
still a good idea, but it takes much more work, and it doesn't actually allow
you to easily *remove* the non-free packages from Nixpkgs.

- Ludovic originally proposed a gnu-packages.nix, but that's "vendor-specific"
so it doesn't seem a good idea.  A free/non-free separation like in Debian
should be sufficient.

Another objection raised was that we have some language-specific composition
expressions, like perl-packages.nix and haskell-packages.nix, which might also
need to be split up.  However, as far as I know they're all free software, so
this is not a big issue.

There's still the policy issue of what constitutes a free or non-free package,
but for most it should be fairly obvious.

-- 
Eelco Dolstra | http://www.st.ewi.tudelft.nl/~dolstra/



More information about the nix-dev mailing list