[Nix-dev] Anarchy

Michael Weiss wm at borasi.de
Wed Jun 27 14:02:47 CEST 2012


Greetings,

I'd like to derail the discussion about policy and focus on the parts 
about how to reduce the need to agree on policy. As others have pointed 
out, nix is great for having your own cake and I want to know how to 
make the most of it. Unfortunately, I'm incapable of really grasping nix 
as a language and nixpkgs in particular, so all I can do at this point 
is sketch some visions. As Helmut Schimidt said, people with visions 
should go see a doctor and given that many among you have a doctorate 
degree, I think this list is a valid place to turn to.

Packaging software with nix can be easy. Pick a name, point to the 
source, define the dependencies, done. The difficult part is that I'm 
not really done at this point. Ignorant of nix, I then try to find out 
how others have done before me and insert a line in haskell-packages.nix 
and maybe in all-packages.nix, too. This works out until somebody 
upstream adds a package with an adjacent name in the lexicographic 
order, that I chose to respect. Now that's a strange conflict. 
Intuitively, adding something to a collection should never break what's 
already there.

Is it possible to define package names only once by placing the 
expression in the filesystem hierarchy? It would then be impossible to 
have null bytes or slashes in names but I could live with that. Having 
to deal with different hierarchies (attributes, filesystem, a flat 
namespace of names?) and naming restrictions at once is somewhat 
challenging, invites misconfiguration and requires more agreement.

Let's talk about names. The most advanced naming system I know of is 
Content Centric Networking (http://www.ccnx.org/). The basic principle 
is that publishers assign hierarchically structured names to content and 
secure that binding by signing it. Consumers retrieve content by asking 
the network for its name and may optionally specify restrictions on what 
content is acceptable. For example I might ask for enumeration of names 
and subsequently content under ccnx:/nixos.org/pkgs/stdenv signed by 
Eelco and ccnx:/cryp.to/pkgs/haskell signed by Peter or 
ccnx:/InFactWeDon'tRelyOnDNS/home encrypted and signed by me.

The protocol itself does not assign any meaning to names but there are 
naming conventions 
(http://www.ccnx.org/releases/latest/doc/technical/NameConventions.html)
that are useful to follow to get versioning out of the box. It is not to 
be confused with a source control system as it is not concerned with 
merging, just with naming and getting stuff.

Executive summary: Punk works best with pull semantics and preferably 
only one hierarchy.

Cheers,
michi


More information about the nix-dev mailing list