<section xmlns="http://docbook.org/ns/docbook"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:xi="http://www.w3.org/2001/XInclude"
      version="5.0"
      xml:id="ssec-relnotes-1.0">

<title>Release 1.0 (2012-05-11)</title>

<para>There have been numerous improvements and bug fixes since the
previous release.  Here are the most significant:</para>

<itemizedlist>

  <listitem>
    <para>Nix can now optionally use the Boehm garbage collector.
    This significantly reduces the Nix evaluator’s memory footprint,
    especially when evaluating large NixOS system configurations.  It
    can be enabled using the <option>--enable-gc</option> configure
    option.</para>
  </listitem>

  <listitem>
    <para>Nix now uses SQLite for its database.  This is faster and
    more flexible than the old <emphasis>ad hoc</emphasis> format.
    SQLite is also used to cache the manifests in
    <filename>/nix/var/nix/manifests</filename>, resulting in a
    significant speedup.</para>
  </listitem>

  <listitem>
    <para>Nix now has an search path for expressions.  The search path
    is set using the environment variable <envar>NIX_PATH</envar> and
    the <option>-I</option> command line option.  In Nix expressions,
    paths between angle brackets are used to specify files that must
    be looked up in the search path.  For instance, the expression
    <literal>&lt;nixpkgs/default.nix></literal> looks for a file
    <filename>nixpkgs/default.nix</filename> relative to every element
    in the search path.</para>
  </listitem>

  <listitem>
    <para>The new command <command>nix-build --run-env</command>
    builds all dependencies of a derivation, then starts a shell in an
    environment containing all variables from the derivation.  This is
    useful for reproducing the environment of a derivation for
    development.</para>
  </listitem>

  <listitem>
    <para>The new command <command>nix-store --verify-path</command>
    verifies that the contents of a store path have not
    changed.</para>
  </listitem>

  <listitem>
    <para>The new command <command>nix-store --print-env</command>
    prints out the environment of a derivation in a format that can be
    evaluated by a shell.</para>
  </listitem>

  <listitem>
    <para>Attribute names can now be arbitrary strings.  For instance,
    you can write <literal>{ "foo-1.2" = …; "bla bla" = …; }."bla
    bla"</literal>.</para>
  </listitem>

  <listitem>
    <para>Attribute selection can now provide a default value using
    the <literal>or</literal> operator.  For instance, the expression
    <literal>x.y.z or e</literal> evaluates to the attribute
    <literal>x.y.z</literal> if it exists, and <literal>e</literal>
    otherwise.</para>
  </listitem>

  <listitem>
    <para>The right-hand side of the <literal>?</literal> operator can
    now be an attribute path, e.g., <literal>attrs ?
    a.b.c</literal>.</para>
  </listitem>

  <listitem>
    <para>On Linux, Nix will now make files in the Nix store immutable
    on filesystems that support it.  This prevents accidental
    modification of files in the store by the root user.</para>
  </listitem>

  <listitem>
    <para>Nix has preliminary support for derivations with multiple
    outputs.  This is useful because it allows parts of a package to
    be deployed and garbage-collected separately.  For instance,
    development parts of a package such as header files or static
    libraries would typically not be part of the closure of an
    application, resulting in reduced disk usage and installation
    time.</para>
  </listitem>

  <listitem>
    <para>The Nix store garbage collector is faster and holds the
    global lock for a shorter amount of time.</para>
  </listitem>

  <listitem>
    <para>The option <option>--timeout</option> (corresponding to the
    configuration setting <literal>build-timeout</literal>) allows you
    to set an absolute timeout on builds — if a build runs for more than
    the given number of seconds, it is terminated.  This is useful for
    recovering automatically from builds that are stuck in an infinite
    loop but keep producing output, and for which
    <literal>--max-silent-time</literal> is ineffective.</para>
  </listitem>

  <listitem>
    <para>Nix development has moved to GitHub (<link
    xlink:href="https://github.com/NixOS/nix" />).</para>
  </listitem>

</itemizedlist>

</section>
