<?xml version="1.0" encoding="UTF-8"?>

<rdf:RDF 
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns="http://purl.org/rss/1.0/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
>

  <channel rdf:about="http://lwn.net/headlines/337677/">
    <title>LWN: Comments on "NixOS: purely functional system configuration management"</title>
    <link>http://lwn.net/Articles/337677/</link>
    <description>
This is a special feed containing comments posted
to the individual LWN article titled &quot;NixOS: purely functional system configuration management&quot;.

    </description>

    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>2</syn:updateFrequency>
    <items>
      <rdf:Seq>
	<rdf:li resource="http://lwn.net/Articles/380991/rss" />
	<rdf:li resource="http://lwn.net/Articles/340003/rss" />
	<rdf:li resource="http://lwn.net/Articles/339985/rss" />
	<rdf:li resource="http://lwn.net/Articles/339983/rss" />
	<rdf:li resource="http://lwn.net/Articles/339982/rss" />
	<rdf:li resource="http://lwn.net/Articles/338861/rss" />
	<rdf:li resource="http://lwn.net/Articles/338808/rss" />
	<rdf:li resource="http://lwn.net/Articles/338046/rss" />
	<rdf:li resource="http://lwn.net/Articles/337991/rss" />
	<rdf:li resource="http://lwn.net/Articles/337947/rss" />
	<rdf:li resource="http://lwn.net/Articles/337890/rss" />
	<rdf:li resource="http://lwn.net/Articles/337840/rss" />
	<rdf:li resource="http://lwn.net/Articles/337836/rss" />
	<rdf:li resource="http://lwn.net/Articles/337797/rss" />
	<rdf:li resource="http://lwn.net/Articles/337800/rss" />
      
      </rdf:Seq>
    </items>

  </channel>
    <item rdf:about="http://lwn.net/Articles/380991/rss">
      <title>Dispelling some misconceptions</title>
      <link>http://lwn.net/Articles/380991/rss</link>
      <dc:date>2010-03-30T06:54:58+00:00</dc:date>
      <dc:creator>rpwoodbu</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
This article is beginning to show its age, but since it is one of the top &lt;br&gt;
hits for Nix, I thought it is worth dispelling some misconceptions some of &lt;br&gt;
the comments on this article might convey, as people eager to learn about &lt;br&gt;
Nix may find themselves here.&lt;br&gt;
&lt;p&gt;
Misconception #1: NixOS is a source-based OS.&lt;br&gt;
&lt;p&gt;
Yes and no.  Nix offers an elegant approach to building, installing, and &lt;br&gt;
distributing software.  The elegance stems from all install having the &lt;br&gt;
_ability_ to build from source, but enjoying the _optimization_ of &lt;br&gt;
downloading prebuilt binaries if they are available.  User tweaks can be &lt;br&gt;
made to some packages at install time (perhaps to include or remove a &lt;br&gt;
compile-time feature), and if a prebuilt binary doesn't exist with exactly &lt;br&gt;
those same tweaks, Nix will necessarily build it from source.  In most  &lt;br&gt;
cases, though, the optimization kicks in and prebuilt binaries are &lt;br&gt;
efficiently downloaded and installed, just like with a binary-based &lt;br&gt;
distribution.  It is the best of both worlds.&lt;br&gt;
&lt;p&gt;
Misconception #2: Nix eliminates the benefit of shared libraries.&lt;br&gt;
&lt;p&gt;
Nix still uses shared libraries extensively.  Programs are not ordinarily &lt;br&gt;
built statically.  If two programs are built against exactly the same &lt;br&gt;
version of a library, they will share it, conserving disk and memory &lt;br&gt;
resources.  But in the interests of full reproducibility, you are not meant &lt;br&gt;
to modify the shared library in-place.  If a library needs to be repaired &lt;br&gt;
(perhaps to close a security hole), all packages that depend on it must be &lt;br&gt;
rebuilt to enjoy the use of the new library.  Nix makes this quite simple: &lt;br&gt;
after a library package is updated, an ordinary &quot;upgrade&quot; action will &lt;br&gt;
rebuild everything necessary.  After that, you can run a garbage collection &lt;br&gt;
operation to free the disk space used by all the old software.  And, &lt;br&gt;
perhaps more importantly, you can roll back to the old software easily &lt;br&gt;
(assuming you haven't run the garbage collector) should you find the update &lt;br&gt;
to be unsatisfactory.  Yes, it takes more time to effect an upgrade if you &lt;br&gt;
have to rebuild a lot of software.  There are usually binaries available, &lt;br&gt;
which automatically speeds up the process considerably.&lt;br&gt;
&lt;p&gt;
The best part is that you can have both minor versions of the library &lt;br&gt;
installed simultaneously, and choose to have some programs use one and &lt;br&gt;
others use another.  This can be especially useful if a security fix breaks &lt;br&gt;
some security-insensitive software; for instance, a libpng exploit means &lt;br&gt;
needing a new browser, but perhaps not needing a new version of a game that &lt;br&gt;
doesn't read &quot;wild&quot; files.&lt;br&gt;
&lt;p&gt;
Misconception #3: System X can already do something Nix can do.&lt;br&gt;
&lt;p&gt;
Yes, there are other systems, like Store, like Gentoo, that can do _some_ &lt;br&gt;
of the things Nix can do.  But Nix can only really be understood if you &lt;br&gt;
look at the arc of functionality it provides: functional build expressions, &lt;br&gt;
identification of builds by a cryptographic hash of its build inputs, &lt;br&gt;
suppression of spurious (i.e. external) dependencies, binary distribution &lt;br&gt;
as an optimization of building, etc.  What emerges is a packaging system &lt;br&gt;
(and ultimately a distribution) that is hard to sum up succinctly, and is a &lt;br&gt;
different way of thinking about maintaining a computer system, but which &lt;br&gt;
has properties of stability, reproducibility, and operational guarantees &lt;br&gt;
that are hard to match.&lt;br&gt;
&lt;p&gt;
Final thoughts:&lt;br&gt;
&lt;p&gt;
Give it a go.  It is easy.  You don't have to use the whole distro; just &lt;br&gt;
install the Nix package manager on whatever Linux distro you're running.  &lt;br&gt;
Except for the package manager code itself, which is conveniently available &lt;br&gt;
in several popular package formats, the entirety of it installs by default &lt;br&gt;
in /nix (you can install it anywhere you like, but you need to use /nix to &lt;br&gt;
enjoy prebuilt binaries), so it is not going to interfere with anything.  &lt;br&gt;
Because it is fully contained, it is distro-agnostic.  It is a great tool &lt;br&gt;
to have in your back pocket when dealing with older installations that just &lt;br&gt;
don't have the libs you need to run the code you want.  My favorite example &lt;br&gt;
was a situation where I was running a newer kernel on an old RHEL 4 box, &lt;br&gt;
where upgrading wasn't an option, but I really needed online ext3 resizing.  &lt;br&gt;
The userspace tool resize2fs didn't support it on RHEL 4, because Linux &lt;br&gt;
2.6.9 didn't have it anyway, and that was the official kernel version for &lt;br&gt;
RHEL 4.  The newer resize2fs depended on a library that wasn't available &lt;br&gt;
for RHEL 4.  I couldn't upgrade or reboot the box.  But I was able to throw &lt;br&gt;
Nix on there quickly (I installed it in /tmp to avoid any mishaps) and &lt;br&gt;
installed its resize2fs, which had the feature I needed (and the right &lt;br&gt;
libs).  It saved me the huge trouble of trying to get the new resize2fs &lt;br&gt;
built on this crusty old machine, and I didn't have any downtime.&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/340003/rss">
      <title>NixOS: purely functional system configuration management</title>
      <link>http://lwn.net/Articles/340003/rss</link>
      <dc:date>2009-07-05T03:33:53+00:00</dc:date>
      <dc:creator>njs</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
That could mean two things: either there's a tool to check that whenever you depend on the existence of a symbol _FOO, there is indeed a symbol _FOO. Or, whenever you used to depend on the existence of a symbol _FOO, not only does _FOO still exist but that it refers to the &quot;same thing&quot;. (E.g., if it points to a function, that that function's assembly is unmodified. And all the functions that it calls are, in turn, unmodified.)&lt;br&gt;
&lt;p&gt;
I assume you mean the former. Such functionality is handy, but it's exactly what I'm referring to by &quot;assumed&quot; compatibility -- hey, the names are right, it must work! If the library author and the application author did their jobs perfectly then of course this is true, and often it works out well enough in practice, but... the value you see in something like NixOS will depend on how willing you are to assume that's the case.&lt;br&gt;
&lt;p&gt;
Personally, I consider our present approach to be a lamentable imperfection imposed by a world of constant security updates, limited bandwidth, and awful QA capabilities. I'm not sure when or if I'll be able to switch to a NixOS-style system, but I'm glad someone is reminding us of this fact.&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/339985/rss">
      <title>NixOS: purely functional system configuration management</title>
      <link>http://lwn.net/Articles/339985/rss</link>
      <dc:date>2009-07-04T15:48:33+00:00</dc:date>
      <dc:creator>astrashe</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
This strikes me as being really useful, especially for clouds or large server farms.  There's a lot of value in having a server be in a known state.&lt;br&gt;
&lt;p&gt;
It also seems to me that it fits in to some other changes that seem to be taking place.  We used to think of computers as things, physical objects.  But to a certain extent, &quot;a computer&quot; is becoming a blob of data that exists in some sort of container (ie., hardware).&lt;br&gt;
&lt;p&gt;
My main desktop, for example, is a blob of data that lives at a VPS hosting company.  Some people carry around their systems on USB sticks, and boot them wherever they happen to be.  Etc.&lt;br&gt;
&lt;p&gt;
If a computer is a blob of data, then having better tools with which we can  describe and build these blobs is a really good thing.&lt;br&gt;
&lt;p&gt;
&lt;p&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/339983/rss">
      <title>NixOS: purely functional system configuration management</title>
      <link>http://lwn.net/Articles/339983/rss</link>
      <dc:date>2009-07-04T12:40:00+00:00</dc:date>
      <dc:creator>oak</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
&lt;font class=&quot;QuotedText&quot;&gt;&amp;gt; By not storing components such as libraries, header files or programs in &lt;/font&gt;&lt;br&gt;
global locations, all packages are forced at build time to use a specific &lt;br&gt;
version of their dependencies, located in the Nix store. To make this &lt;br&gt;
happen, the developers have patched Glibc, GCC and the dynamic linker ld &lt;br&gt;
to not search files in any default locations.&lt;br&gt;
&lt;p&gt;
Something similar can be done also with scratchbox2 without a need to &lt;br&gt;
patch Glibc, GCC &amp;amp; ld: &lt;a rel=&quot;nofollow&quot; href=&quot;http://packages.debian.org/squeeze/scratchbox2&quot;&gt;http://packages.debian.org/squeeze/scratchbox2&lt;/a&gt;&lt;br&gt;
&lt;p&gt;
(As it uses LD_PRELOAD, it works only for dynamically linked binaries or &lt;br&gt;
scripts having dynamically linked interpreters.)&lt;br&gt;
&lt;p&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/339982/rss">
      <title>NixOS: purely functional system configuration management</title>
      <link>http://lwn.net/Articles/339982/rss</link>
      <dc:date>2009-07-04T12:36:08+00:00</dc:date>
      <dc:creator>oak</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
&lt;font class=&quot;QuotedText&quot;&gt;&amp;gt; Of course, that only works in the first place if you assume that the new &lt;/font&gt;&lt;br&gt;
library *really is* compatible with your old binaries, which is often &lt;br&gt;
assumed but rarely guaranteed.&lt;br&gt;
&lt;p&gt;
Nowadays Debian provides some support for this.  You can easily check &lt;br&gt;
whether any of the symbols changes at build time and build will fail if &lt;br&gt;
they changed, but the library version didn't.&lt;br&gt;
&lt;p&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/338861/rss">
      <title>NixOS: purely functional system configuration management</title>
      <link>http://lwn.net/Articles/338861/rss</link>
      <dc:date>2009-06-26T12:30:45+00:00</dc:date>
      <dc:creator>Duncan</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
In addition, there seems no provision for the customizability that is the &lt;br&gt;
forte of Gentoo and a good portion of the benefit of building from source &lt;br&gt;
in the first place.  Either that, or that aspect simply wasn't covered.&lt;br&gt;
&lt;p&gt;
Where's the system default CFLAGS/CXXFLAGS (Gentoo's make.conf settings), &lt;br&gt;
with the ability to override them per-package (Gentoo's /etc/portage/env), &lt;br&gt;
without having to edit the pre-packaged nix expressions (Gentoo ebuilds)?  &lt;br&gt;
Where's the ability to specify compile-time dependencies (Gentoo USE &lt;br&gt;
flags, both make.conf and package.use), again without having to edit the &lt;br&gt;
pre-packaged nix expressions?&lt;br&gt;
&lt;p&gt;
Maybe nix has that and it simply wasn't covered, as customizing to that &lt;br&gt;
degree isn't something the binary distributions could do.  But it's a &lt;br&gt;
major benefit to building from source, which nix does, so it'd have been &lt;br&gt;
nice to have a description of how that's handled, or a definite no, it &lt;br&gt;
doesn't handle that.  Without it, tho, I don't know as I'd consider it &lt;br&gt;
worth the trouble to run compile-from-source, as that really is one of the &lt;br&gt;
biggest benefits of doing so.&lt;br&gt;
&lt;p&gt;
Meanwhile, Gentoo has config-protect functionality, with rollback if &lt;br&gt;
desired, depending on one's choice of config reconciliation tool.  And &lt;br&gt;
binpkgs allow reasonably easy no-recompile rollback to previous package &lt;br&gt;
versions for the binaries, while keeping them in a centralized location.  &lt;br&gt;
While centralized does mean everything uses the same library version, &lt;br&gt;
there are tools to resolve breakage, automating the recompiles, and &lt;br&gt;
it /does/ eliminate the security updates issue others mentioned for NixOS.&lt;br&gt;
&lt;p&gt;
Now Gentoo does not have per-user installations and user installable &lt;br&gt;
packages by default, but the Gentoo/prefix project addresses that, &lt;br&gt;
allowing package installation at arbitrary prefixes, including home dirs, &lt;br&gt;
for various Linux and non-Linux (FreeBSD, etc) installations.&lt;br&gt;
&lt;p&gt;
Still, NixOS is using a very interesting idea, and as it matures, it could &lt;br&gt;
well give Gentoo and other build-from-source distributions a run for their &lt;br&gt;
money.  If the (currently) much more mature Gentoo wasn't around filling &lt;br&gt;
my needs better, I could certainly see giving NixOS a try, and who knows &lt;br&gt;
what'll happen over a few years?  As I said, I could see it giving Gentoo &lt;br&gt;
a run for its money.  Its devs definitely have the guts it takes to go &lt;br&gt;
against the flow and develop something that really does fill a niche &lt;br&gt;
filled imperfectly if at all by others, and as such, certainly has the &lt;br&gt;
potential to become the leading from-source distribution, a position &lt;br&gt;
Gentoo has filled for most of this century so far.&lt;br&gt;
&lt;p&gt;
Duncan&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/338808/rss">
      <title>NixOS: purely functional system configuration management</title>
      <link>http://lwn.net/Articles/338808/rss</link>
      <dc:date>2009-06-26T01:12:38+00:00</dc:date>
      <dc:creator>TRauMa</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
What I don't quite get is how this helps with the kind of upgrades we are actually doing - security upgrades mostly. In those cases we never want to roll back, we don't want to switch over gradually, we basically want to apply a single well-contained change (that comes pre-tested and hopefully doesn't break anything) globally and right now. All the things NixOS provides you can have with a modern Gentoo installation and careful snapshotting, except the possibility to have a system where every step of the upgrade is atomic and the system as a whole is still in a well defined state. But in critical setups you'll have two systems anyway, one where you test the change and one in production. And with security updates you are in a &quot;bad state&quot; as soon as the security issue goes full disclosure (ok, you learn that you were in a bad state all the time) and no intermediary step is interesting until you upgraded all consumers/dependencies of the packet in question. From this view a half-upgraded NixOS is working, but insecure, while a half-upgraded Gentoo is perhaps not working and insecure. But how does &quot;working, insecure&quot; help I wonder.&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/338046/rss">
      <title>NixOS: purely functional system configuration management</title>
      <link>http://lwn.net/Articles/338046/rss</link>
      <dc:date>2009-06-20T21:07:56+00:00</dc:date>
      <dc:creator>njs</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
Yes, that's exactly what it does. Whether this is good or bad depends on the situation. You lose the ability to drop an upgraded library into place and have everything start using it immediately. Of course, that only works in the first place if you assume that the new library *really is* compatible with your old binaries, which is often assumed but rarely guaranteed. With the NixOS approach you gain the ability to test and switch programs over to the new library one at a time in a controlled fashion, keep some particular critical program using a fixed version of a library while the rest of the system upgrades, etc. Win some lose some.&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/337991/rss">
      <title>NixOS: purely functional system configuration management</title>
      <link>http://lwn.net/Articles/337991/rss</link>
      <dc:date>2009-06-19T16:42:26+00:00</dc:date>
      <dc:creator>Darkmere</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
Please correct me if I'm wrong, but doesn't this approach completely remove the win to be had by dynamic linking in favour of static binaries (over time) until you have rebuilt everything in a boostrap manner to reduce the duplications and have a single set of base+libraries?&lt;br&gt;
&lt;p&gt;
In one way it strikes me as a step forwards, and in another a huge step back.  The question is if it's a net move forwards. &lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/337947/rss">
      <title>NixOS: purely functional system configuration management</title>
      <link>http://lwn.net/Articles/337947/rss</link>
      <dc:date>2009-06-19T07:43:14+00:00</dc:date>
      <dc:creator>sasha</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
I failed to understand how this distro helps with managing configuration files. &quot;upgrading a configuration is as safe as installing from scratch&quot; makes me think that it is completely my responsibility to copy all my configuration files to the new version of a program being upgraded. I'm not sure it is correct understanding... Does this distro have any helpers to merge my changes in the config file with the upstream ones? Is it managed in &quot;functional way&quot;?&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/337890/rss">
      <title>NixOS: purely functional system configuration management</title>
      <link>http://lwn.net/Articles/337890/rss</link>
      <dc:date>2009-06-18T16:39:21+00:00</dc:date>
      <dc:creator>ajb</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
A similar system is vesta: www.vestasys.org&lt;br&gt;
&lt;p&gt;
That's a purely functional build system, but under the hood it's also a package manager of a kind. You can actually import rpm-s and debs into it. &lt;br&gt;
I don't think anyone has actually made a distribution using it, but it could be done.&lt;br&gt;
&lt;p&gt;
It seems to me that nix is not so well engineered as vesta underneath. vesta has its own filesystem, and can present multiple views of the world in their own chrooted environments. &lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/337840/rss">
      <title>NixOS: purely functional system configuration management</title>
      <link>http://lwn.net/Articles/337840/rss</link>
      <dc:date>2009-06-18T12:54:38+00:00</dc:date>
      <dc:creator>Cyberax</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
Neat project!&lt;br&gt;
&lt;p&gt;
However, some things strike me as unnecessary. Building packages from sources can be avoided with the help of retargetable binary packets.&lt;br&gt;
&lt;p&gt;
It can also allow slow migration of existing packets (first, make deb/rpm packages retargetable, then move to Nix).&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/337836/rss">
      <title>NixOS: purely functional system configuration management</title>
      <link>http://lwn.net/Articles/337836/rss</link>
      <dc:date>2009-06-18T12:27:36+00:00</dc:date>
      <dc:creator>skvidal</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
&quot;System administrators update them in-place with various administration commands, e.g. a RPM or APT package manager or a configuration tool such as Cfengine.&quot;&lt;br&gt;
&lt;p&gt;
&lt;p&gt;
Just to keep this particular meme from continuing:&lt;br&gt;
&lt;p&gt;
rpm and dpkg are comparable commands, not rpm and apt.&lt;br&gt;
&lt;p&gt;
&lt;p&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/337797/rss">
      <title>NixOS: purely functional system configuration management</title>
      <link>http://lwn.net/Articles/337797/rss</link>
      <dc:date>2009-06-18T07:57:16+00:00</dc:date>
      <dc:creator>michaeljt</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
My personal feeling is that it would be easier to achieve a reproducible setup with existing distributions if packaging practices were less messy.  The current practice of running scripts as root when a package is installed, as well as messing with /etc, which should actually be reserved for configuration by the system owner/administrator (possibly using tools of course) is not good for reproducibility.  OpenSolaris for instance now forbids postinstall scripts.  Packages which really need to do things post-install must install a service or similar to handle that.  I would love it if say Debian adjusted their policy to discourage installation scripts and files dropped into/changed in /etc at install time.  I am sure this would be manageable on a medium term basis.&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
    <item rdf:about="http://lwn.net/Articles/337800/rss">
      <title>NixOS: purely functional system configuration management</title>
      <link>http://lwn.net/Articles/337800/rss</link>
      <dc:date>2009-06-18T07:43:12+00:00</dc:date>
      <dc:creator>cyperpunks</dc:creator>
      <description>
      &lt;div class=&quot;FormattedComment&quot;&gt;
store has some of the same features: &lt;a href=&quot;http://www.pvv.ntnu.no/~arnej/store/&quot;&gt;http://www.pvv.ntnu.no/~arnej/store/&lt;/a&gt;&lt;br&gt;
&lt;/div&gt;

      
      </description>
    </item>
</rdf:RDF>

