1 <?xml version="1.0" encoding="UTF-8"?>
2 <article xmlns="http://docbook.org/ns/docbook"
3 xmlns:xlink="http://www.w3.org/1999/xlink">
5 <title>Nixpkgs Release Notes</title>
8 <section><title>Release 0.12 (TBA)</title>
10 <para>This release has the following improvements:
14 <listitem><para>TODO: simplified and expanded stdenv hook
15 handling.</para></listitem>
17 <listitem><para>Important updates:
21 <listitem><para>Glibc 2.7.</para></listitem>
23 <listitem><para>GCC 4.2.4.</para></listitem>
25 <listitem><para>Linux 2.6.25.</para></listitem>
38 <section><title>Release 0.11 (September 11, 2007)</title>
40 <para>This release has the following improvements:
45 <listitem><para>The standard build environment
46 (<literal>stdenv</literal>) is now pure on the
47 <literal>x86_64-linux</literal> and <literal>powerpc-linux</literal>
48 platforms, just as on <literal>i686-linux</literal>. (Purity means
49 that building and using the standard environment has no dependencies
50 outside of the Nix store. For instance, it doesn’t require an
51 external C compiler such as <filename>/usr/bin/gcc</filename>.)
52 Also, the statically linked binaries used in the bootstrap process
53 are now automatically reproducible, making it easy to update the
54 bootstrap tools and to add support for other Linux platforms. See
55 <filename>pkgs/stdenv/linux/make-bootstrap-tools.nix</filename> for
56 details.</para></listitem>
59 <listitem><para>Hook variables in the generic builder are now
60 executed using the <function>eval</function> shell command. This
61 has a major advantage: you can write hooks directly in Nix
62 expressions. For instance, rather than writing a builder like this:
67 postInstall=postInstall
69 ln -sf gzip $out/bin/gunzip
70 ln -sf gzip $out/bin/zcat
73 genericBuild</programlisting>
75 (the <literal>gzip</literal> builder), you can just add this
76 attribute to the derivation:
79 postInstall = "ln -sf gzip $out/bin/gunzip; ln -sf gzip $out/bin/zcat";</programlisting>
81 and so a separate build script becomes unnecessary. This should
82 allow us to get rid of most builders in Nixpkgs.</para></listitem>
85 <listitem><para>It is now possible to have the generic builder pass
86 arguments to <command>configure</command> and
87 <command>make</command> that contain whitespace. Previously, for
88 example, you could say in a builder,
91 configureFlags="CFLAGS=-O0"</programlisting>
96 configureFlags="CFLAGS=-O0 -g"</programlisting>
98 since the <literal>-g</literal> would be interpreted as a separate
99 argument to <command>configure</command>. Now you can say
102 configureFlagsArray=("CFLAGS=-O0 -g")</programlisting>
107 configureFlagsArray=("CFLAGS=-O0 -g" "LDFLAGS=-L/foo -L/bar")</programlisting>
109 which does the right thing. Idem for <literal>makeFlags</literal>,
110 <literal>installFlags</literal>, <literal>checkFlags</literal> and
111 <literal>distFlags</literal>.</para>
113 <para>Unfortunately you can't pass arrays to Bash through the
114 environment, so you can't put the array above in a Nix expression,
118 configureFlagsArray = ["CFLAGS=-O0 -g"];</programlisting>
120 since it would just be flattened to a since string. However, you
121 <emphasis>can</emphasis> use the inline hooks described above:
124 preConfigure = "configureFlagsArray=(\"CFLAGS=-O0 -g\")";</programlisting>
129 <listitem><para>The function <function>fetchurl</function> now has
130 support for two different kinds of mirroring of files. First, it
131 has support for <emphasis>content-addressable mirrors</emphasis>.
132 For example, given the <function>fetchurl</function> call
136 url = http://releases.mozilla.org/<replaceable>...</replaceable>/firefox-2.0.0.6-source.tar.bz2;
137 sha1 = "eb72f55e4a8bf08e8c6ef227c0ade3d068ba1082";
140 <function>fetchurl</function> will first try to download this file
142 xlink:href="http://nixos.org/tarballs/sha1/eb72f55e4a8bf08e8c6ef227c0ade3d068ba1082"/>.
143 If that file doesn’t exist, it will try the original URL. In
144 general, the “content-addressed” location is
145 <replaceable>mirror</replaceable><literal>/</literal><replaceable>hash-type</replaceable><literal>/</literal><replaceable>hash</replaceable>.
146 There is currently only one content-addressable mirror (<link
147 xlink:href="http://nixos.org/tarballs"/>), but more can be
148 specified in the <varname>hashedMirrors</varname> attribute in
149 <filename>pkgs/build-support/fetchurl/mirrors.nix</filename>, or by
150 setting the <envar>NIX_HASHED_MIRRORS</envar> environment variable
151 to a whitespace-separated list of URLs.</para>
153 <para>Second, <function>fetchurl</function> has support for
154 widely-mirrored distribution sites such as SourceForge or the Linux
155 kernel archives. Given a URL of the form
156 <literal>mirror://<replaceable>site</replaceable>/<replaceable>path</replaceable></literal>,
157 it will try to download <replaceable>path</replaceable> from a
158 configurable list of mirrors for <replaceable>site</replaceable>.
159 (This idea was borrowed from Gentoo Linux.) Example:
162 url = mirror://gnu/gcc/gcc-4.2.0/gcc-core-4.2.0.tar.bz2;
163 sha256 = "0ykhzxhr8857dr97z0j9wyybfz1kjr71xk457cfapfw5fjas4ny1";
165 Currently <replaceable>site</replaceable> can be
166 <literal>sourceforge</literal>, <literal>gnu</literal> and
167 <literal>kernel</literal>. The list of mirrors is defined in
168 <filename>pkgs/build-support/fetchurl/mirrors.nix</filename>. You
169 can override the list of mirrors for a particular site by setting
170 the environment variable
171 <envar>NIX_MIRRORS_<replaceable>site</replaceable></envar>, e.g.
173 export NIX_MIRRORS_sourceforge=http://osdn.dl.sourceforge.net/sourceforge/</programlisting>
179 <listitem><para>Important updates:
183 <listitem><para>Glibc 2.5.</para></listitem>
185 <listitem><para>GCC 4.1.2.</para></listitem>
187 <listitem><para>Gnome 2.16.3.</para></listitem>
189 <listitem><para>X11R7.2.</para></listitem>
191 <listitem><para>Linux 2.6.21.7 and 2.6.22.6.</para></listitem>
193 <listitem><para>Emacs 22.1.</para></listitem>
200 <listitem><para>Major new packages:
204 <listitem><para>KDE 3.5.6 Base.</para></listitem>
206 <listitem><para>Wine 0.9.43.</para></listitem>
208 <listitem><para>OpenOffice 2.2.1.</para></listitem>
210 <listitem><para>Many Linux system packages to support
211 NixOS.</para></listitem>
221 <para>The following people contributed to this release:
231 Wouter den Breejen and
239 <section><title>Release 0.10 (October 12, 2006)</title>
241 <note><para>This release of Nixpkgs requires <link
242 xlink:href='http://nixos.org/releases/nix/nix-0.10/'>Nix
243 0.10</link> or higher.</para></note>
245 <para>This release has the following improvements:</para>
249 <listitem><para><filename>pkgs/system/all-packages-generic.nix</filename>
250 is gone, we now just have
251 <filename>pkgs/top-level/all-packages.nix</filename> that contains
252 all available packages. This should cause much less confusion with
253 users. <filename>all-packages.nix</filename> is a function that by
254 default returns packages for the current platform, but you can
255 override this by specifying a different <varname>system</varname>
256 argument.</para></listitem>
258 <listitem><para>Certain packages in Nixpkgs are now
259 user-configurable through a configuration file, i.e., without having
260 to edit the Nix expressions in Nixpkgs. For instance, the Firefox
261 provided in the Nixpkgs channel is built without the RealPlayer
262 plugin (for legal reasons). Previously, you could easily enable
263 RealPlayer support by editing the call to the Firefox function in
264 <filename>all-packages.nix</filename>, but such changes are not
265 respected when Firefox is subsequently updated through the Nixpkgs
268 <para>The Nixpkgs configuration file (found in
269 <filename>~/.nixpkgs/config.nix</filename> or through the
270 <envar>NIXPKGS_CONFIG</envar> environment variable) is an attribute
271 set that contains configuration options that
272 <filename>all-packages.nix</filename> reads and uses for certain
273 packages. For instance, the following configuration file:
278 enableRealPlayer = true;
282 persistently enables RealPlayer support in the Firefox
285 <para>(Actually, <literal>firefox.enableRealPlayer</literal> is the
286 <emphasis>only</emphasis> configuration option currently available,
287 but more are sure to be added.)</para></listitem>
289 <listitem><para>Support for new platforms:
293 <listitem><para><literal>i686-cygwin</literal>, i.e., Windows
294 (using <link xlink:href="http://www.cygwin.com/">Cygwin</link>).
295 The standard environment on <literal>i686-cygwin</literal> by
296 default builds binaries for the Cygwin environment (i.e., it
297 uses Cygwin tools and produces executables that use the Cygwin
298 library). However, there is also a standard environment that
299 produces binaries that use <link
300 xlink:href="http://www.mingw.org/">MinGW</link>. You can use it
301 by calling <filename>all-package.nix</filename> with the
302 <varname>stdenvType</varname> argument set to
303 <literal>"i686-mingw"</literal>.</para></listitem>
305 <listitem><para><literal>i686-darwin</literal>, i.e., Mac OS X
306 on Intel CPUs.</para></listitem>
308 <listitem><para><literal>powerpc-linux</literal>.</para></listitem>
310 <listitem><para><literal>x86_64-linux</literal>, i.e., Linux on
311 64-bit AMD/Intel CPUs. Unlike <literal>i686-linux</literal>,
312 this platform doesn’t have a pure <literal>stdenv</literal>
313 yet.</para></listitem>
321 <listitem><para>The default compiler is now GCC 4.1.1.</para></listitem>
323 <listitem><para>X11 updated to X.org’s X11R7.1.</para></listitem>
325 <listitem><para>Notable new packages:
329 <listitem><para>Opera.</para></listitem>
331 <listitem><para>Microsoft Visual C++ 2005 Express Edition and
332 the Windows SDK.</para></listitem>
336 In total there are now around 809 packages in Nixpkgs.</para>
341 <listitem><para>It is now <emphasis>much</emphasis> easier to
342 override the default C compiler and other tools in
343 <literal>stdenv</literal> for specific packages.
344 <filename>all-packages.nix</filename> provides two utility
345 functions for this purpose: <function>overrideGCC</function> and
346 <function>overrideInStdenv</function>. Both take a
347 <literal>stdenv</literal> and return an augmented
348 <literal>stdenv</literal>; the formed changes the C compiler, and
349 the latter adds additional packages to the front of
350 <literal>stdenv</literal>’s initial <envar>PATH</envar>, allowing
351 tools to be overriden.</para>
353 <para>For instance, the package <varname>strategoxt</varname>
354 doesn’t build with the GNU Make in <literal>stdenv</literal>
355 (version 3.81), so we call it with an augmented
356 <literal>stdenv</literal> that uses GNU Make 3.80:
359 strategoxt = (import ../development/compilers/strategoxt) {
360 inherit fetchurl pkgconfig sdf aterm;
361 stdenv = overrideInStdenv stdenv [gnumake380];
364 gnumake380 = <replaceable>...</replaceable>;</programlisting>
366 Likewise, there are many packages that don’t compile with the
367 default GCC (4.1.1), but that’s easily fixed:
370 exult = import ../games/exult {
371 inherit fetchurl SDL SDL_mixer zlib libpng unzip;
372 stdenv = overrideGCC stdenv gcc34;
378 <listitem><para>It has also become much easier to experiment with
379 changes to the <literal>stdenv</literal> setup script (which notably
380 contains the generic builder). Since edits to
381 <filename>pkgs/stdenv/generic/setup.sh</filename> trigger a rebuild
382 of <emphasis>everything</emphasis>, this was formerly quite painful.
383 But now <literal>stdenv</literal> contains a function to
384 “regenerate” <literal>stdenv</literal> with a different setup
385 script, allowing the use of a different setup script for specific
389 pkg = import <replaceable>...</replaceable> {
390 stdenv = stdenv.regenerate ./my-setup.sh;
391 <replaceable>...</replaceable>
397 <listitem><para>Packages can now have a human-readable
398 <emphasis>description</emphasis> field. Package descriptions are
399 shown by <literal>nix-env -qa --description</literal>. In addition,
400 they’re shown on the Nixpkgs release page. A description can be
401 added to a package as follows:
404 stdenv.mkDerivation {
406 <replaceable>...</replaceable>
408 description = "A reimplementation of the Ultima VII game engine";
412 The <varname>meta</varname> attribute is not passed to the builder,
413 so changes to the description do not trigger a rebuild. Additional
414 <varname>meta</varname> attributes may be defined in the future
415 (such as the URL of the package’s homepage, the license,
416 etc.).</para></listitem>
421 <para>The following people contributed to this release:
439 <section><title>Release 0.9 (January 31, 2006)</title>
441 <para>There have been zillions of changes since the last release of
442 Nixpkgs. Many packages have been added or updated. The following are
443 some of the more notable changes:</para>
447 <listitem><para>Distribution files have been moved to <link
448 xlink:href="http://nixos.org/" />.</para></listitem>
450 <listitem><para>The C library on Linux, Glibc, has been updated to
451 version 2.3.6.</para></listitem>
453 <listitem><para>The default compiler is now GCC 3.4.5. GCC 4.0.2 is
454 also available.</para></listitem>
456 <listitem><para>The old, unofficial Xlibs has been replaced by the
457 official modularised X11 distribution from X.org, i.e., X11R7.0.
458 X11R7.0 consists of 287 (!) packages, all of which are in Nixpkgs
459 though not all have been tested. It is now possible to build a
460 working X server (previously we only had X client libraries). We
461 use a fully Nixified X server on NixOS.</para></listitem>
463 <listitem><para>The Sun JDK 5 has been purified, i.e., it doesn’t
464 require any non-Nix components such as
465 <filename>/lib/ld-linux.so.2</filename>. This means that Java
466 applications such as Eclipse and Azureus can run on
467 NixOS.</para></listitem>
469 <listitem><para>Hardware-accelerated OpenGL support, used by games
470 like Quake 3 (which is now built from source).</para></listitem>
472 <listitem><para>Improved support for FreeBSD on
473 x86.</para></listitem>
475 <listitem><para>Improved Haskell support; e.g., the GHC build is now
476 pure.</para></listitem>
478 <listitem><para>Some support for cross-compilation: cross-compiling
479 builds of GCC and Binutils, and cross-compiled builds of the C
480 library uClibc.</para></listitem>
482 <listitem><para>Notable new packages:
486 <listitem><para>teTeX, including support for building LaTeX
487 documents using Nix (with automatic dependency
488 determination).</para></listitem>
490 <listitem><para>Ruby.</para></listitem>
492 <listitem><para>System-level packages to support NixOS,
493 e.g. Grub, GNU <literal>parted</literal> and so
494 on.</para></listitem>
496 <listitem><para><literal>ecj</literal>, the Eclipse Compiler for
497 Java, so we finally have a freely distributable compiler that
498 supports Java 5.0.</para></listitem>
500 <listitem><para><literal>php</literal>.</para></listitem>
502 <listitem><para>The GIMP.</para></listitem>
504 <listitem><para>Inkscape.</para></listitem>
506 <listitem><para>GAIM.</para></listitem>
508 <listitem><para><literal>kdelibs</literal>. This allows us to
509 add KDE-based packages (such as
510 <literal>kcachegrind</literal>).</para></listitem>
518 <para>The following people contributed to this release:
536 <section><title>Release 0.8 (April 11, 2005)</title>
538 <para>This release is mostly to remain synchronised with the changed
539 hashing scheme in Nix 0.8.</para>
541 <para>Notable updates:
545 <listitem><para>Adobe Reader 7.0</para></listitem>
547 <listitem><para>Various security updates (zlib 1.2.2, etc.)</para></listitem>
556 <section><title>Release 0.7 (March 14, 2005)</title>
562 <para>The bootstrap process for the standard build
563 environment on Linux (stdenv-linux) has been improved. It is no
564 longer dependent in its initial bootstrap stages on the system
565 Glibc, GCC, and other tools. Rather, Nixpkgs contains a statically
566 linked bash and curl, and uses that to download other statically
567 linked tools. These are then used to build a Glibc and dynamically
568 linked versions of all other tools.</para>
570 <para>This change also makes the bootstrap process faster. For
571 instance, GCC is built only once instead of three times.</para>
573 <para>(Contributed by Armijn Hemel.)</para>
579 <para>Tarballs used by Nixpkgs are now obtained from the same server
580 that hosts Nixpkgs (<link
581 xlink:href="http://catamaran.labs.cs.uu.nl/" />). This reduces the
582 risk of packages being unbuildable due to moved or deleted files on
583 various servers.</para>
589 <para>There now is a generic mechanism for building Perl modules.
590 See the various Perl modules defined in
591 pkgs/system/all-packages-generic.nix.</para>
597 <para>Notable new packages:
601 <listitem><para>Qt 3</para></listitem>
602 <listitem><para>MySQL</para></listitem>
603 <listitem><para>MythTV</para></listitem>
604 <listitem><para>Mono</para></listitem>
605 <listitem><para>MonoDevelop (alpha)</para></listitem>
606 <listitem><para>Xine</para></listitem>
616 <para>Notable updates:
620 <listitem><para>GCC 3.4.3</para></listitem>
621 <listitem><para>Glibc 2.3.4</para></listitem>
622 <listitem><para>GTK 2.6</para></listitem>