Upgrading the standard initial environment For Nix on i686-linux we make use of an environment of statically linked tools (see $nixpkgs/stdenv/linux). The first version of these tools were compiled outside of Nix, in an impure environment. They are used as some magical ingredient to make everything work. To keep these tools more in synchronization with the rest of nixpkgs and to make porting of nixpkgs to other platforms easier the static versions are now also built with Nix and nixpkgs. The tools can be found in nixpkgs in: - shells/bash-static - tools/networking/curl-diet - tools/archivers/gnutar-diet - tools/compression/gzip-diet - tools/compression/bzip2-static - tools/text/gnused-diet - tools/text/diffutils-diet - tools/text/gnupatch-diet - tools/misc/findutils-static Most packages are compiled with dietlibc, an alternate C library, apart from bash and findutils, which are statically linked to glibc. The reason we chose dietlibc has various reasons. First of all, curl cannot be built statically with glibc. If we do, we get a static binary, but it cannot resolve hostnames to IP addresses. glibc dynamically loads functionality at runtime to do resolving. When linking with dietlibc this doesn't happen. The static tools are not used as part of the input hashing (see Eelco's PhD thesis, paragraph 5.4.1), so changing them does not change anything and will not force a massive rebuild.