Epistemic Status: seedling Sprouting — This is an ongoing developing situation, so things may change in the coming weeks that change my take on this. I just thought I’d write something about it for when someone inevitably asks me what I think about it all.

Something of a TLDR would be that things in the Nix world are in flux and I feel reticent to push for adoption of Nix until these problems are resolved one way or another.

Updates: See below


As I’ve mentioned several times, I started using Nix, NixOS really, in 2017-18 and I’ve been using it ever since, to manage all my Linux machines as well as my dotfiles. I also use it via Nix Darwin to manage my MacOS machines.

On New Year’s Day of 2021, I switched to using Flakes to unify my system configurations into a single shared Git repository.

First commit in my new repository
Date:   Fri Jan 1 12:12:20 2021 -0600
 
    Switching to using flake based configuration
    
    Initial set up for `indigo-sun`. Copied over `satyrine`'s config, but
    need to compare with what is live on that system before using it.
First commit in my new repository
Date:   Fri Jan 1 12:12:20 2021 -0600
 
    Switching to using flake based configuration
    
    Initial set up for `indigo-sun`. Copied over `satyrine`'s config, but
    need to compare with what is live on that system before using it.

As of today, the repository consists of over 6800 lines of Nix code1 along with a variety of other snippets here and there, managing five systems (4 NixOS, 1 MacOS).

Code metrics for my NixOS config repository
==========================================================================
 Language       Files        Lines         Code     Comments       Blanks
==========================================================================
 BASH               1           24           17            4            3
 CSS                3          442          339           11           92
 Emacs Lisp         6         1394          837          376          181
 Fish               1           38           25            9            4
 GLSL               1          198           98           68           32
 Haskell            1          440          216          150           74
 INI                1          110           96           14            0
 JSON               1          843          843            0            0
 Nix              132         8891         6880         1194          817
 Python             1          198          150            6           42
 Shell             12          556          385           84           87
 TOML              12          175          155           12            8
 XSL                3           89           63           21            5
 YAML               3          604          542           48           14
--------------------------------------------------------------------------
 Rust              13         1159         1014           30          115
 |- Markdown        6          100           19           70           11
 (Total)                      1259         1033          100          126
==========================================================================
 Total            191        15161        11660         2027         1474
==========================================================================
Code metrics for my NixOS config repository
==========================================================================
 Language       Files        Lines         Code     Comments       Blanks
==========================================================================
 BASH               1           24           17            4            3
 CSS                3          442          339           11           92
 Emacs Lisp         6         1394          837          376          181
 Fish               1           38           25            9            4
 GLSL               1          198           98           68           32
 Haskell            1          440          216          150           74
 INI                1          110           96           14            0
 JSON               1          843          843            0            0
 Nix              132         8891         6880         1194          817
 Python             1          198          150            6           42
 Shell             12          556          385           84           87
 TOML              12          175          155           12            8
 XSL                3           89           63           21            5
 YAML               3          604          542           48           14
--------------------------------------------------------------------------
 Rust              13         1159         1014           30          115
 |- Markdown        6          100           19           70           11
 (Total)                      1259         1033          100          126
==========================================================================
 Total            191        15161        11660         2027         1474
==========================================================================

I consider it a decent investment of time and thought, and one that has been well worth it for me. The structure also means I haven’t felt the need to declare the equivalent of Dot Emacs Bankruptcy.

It’s worked pretty well for me, but in the majority of that time I hadn’t really engaged with the Nix community. My first attempt to interact with the community on Matrix wasn’t great. I asked a simple question about trying to install Python’s black formatter at the system level and got a very terse response from one of the main members of the community that basically amounted to RTFM, and ask in this other channel. Neither of which were helpful.

Asking my question on the Discourse forum got better results and I started lurking there off and on. That couldn’t have really prepared me for the dumpster fire that erupted into view in the past few weeks.

The Elephant in the Room

Some people have probably already heard some of the controversy that has hit the Nix community (this is a summary, though I can’t speak to its accuracy), but it seems to have been a long time coming.

Even I, sitting on the periphery, noticed some of the issues. The tension between Determinant Systems and the rest of the community in posts on Discourse. The weirdness of seeing Eelco Dolstra, the creator of Nix, being at odds with the rest of the community in a lot of those discussions. It took me a while to realize he was with DetSys.

Then there was the issue of the controversial defence contractor being a sponsor for the NixCon NA 2024 conference. There’s a difference between contributing to a project, donating to a project, and sponsoring a conference for said project, and that seems to be lost on the pro-military-industrial-complex side in these arguments. Never mind this was a US defence contractor and there are a lot more non-US citizens in the world, people who might find themselves on the receiving end of that defence contractor’s weapons.

My feelings on this are mixed and a topic for another time, but suffice to say, I struggle with balancing my pacifist beliefs2 with the reality of living in a world where reacting and defending against the use of violence is a thing.

In the last few days, things have taken a turn for the worse. An open letter was circulated calling for Eelco to step down from the project, Eelco posted a response on his company’s blog which came off as tone deaf and seemed to catch the rest of the Nix Foundation board off guard, and then a slew of contributors started leaving the Nixpkgs project.

Good tech sidelined by social ineptness

This seems to be part of a recurring trend in the tech world. People in tech seem to think that tech can solve social problems or you can just focus on the tech and ignore the social problems, but only social interactions (aka politics) can solve social problems. Ignoring it doesn’t make it go away. There’s a quote from the Sociocracy book “Many Voices One Song” that feels relevant here.

Power is everywhere all the time, and it does not appear or disappear - someone will be holding it. We have to be intentional about how we want to distribute it. Power is like water: it will go somewhere and it tends to accumulate in clusters: the more power a group has, the more resources they will have to aggregate more power. The only way to counterbalance the concentration of power is intentionality and thoughtful implementation.

Eelco talks about not having any formal authority3, but he seems to be overlooking the implied authority that he holds as the creator and original steward of the project.

I don’t expect others to hold my beliefs about property. I get Eelco feeling like this project is his baby. I don’t have a problem with a company stewarding the development of a piece of tech I use or even paying for it. It depends on the company though. And it sounds like a vocal part of the community isn’t too happy about how this company has come to dominate the development process.

I don’t know if the project will survive this in a form that I’d be willing to contribute to or associated with. Only time will tell.

I’m definitely less willing to advocate for Nix’s use now given the instability that exists. I don’t know yet if, or when, I’ll stop using Nix. It solves a lot of problems for me, and I don’t want to give it up just yet. It really does feel like a ”tool-assisted yak-shaving speedrun bot”. Guix doesn’t seem like a good alternative. The GNU Project’s ideology gets in the way of getting things done too often, and I’m also not interested in learning GNU Shepherd for init since no one else uses it.

I hope all the people leaving or taking a break get the rest they need. These things can really burn you out fast and take a toll on mental health.


Updates

May 1

There’s been a lot of activity in the past day or so.

A soft fork was started, Aux, that seems to be off to a good start (at least from an enthusiasm perspective), and then the Nix Foundation board released a statement saying that Eelco was stepping down from the board and the board is looking to call a “constitutional assembly” in the next two weeks to work towards a new governance structure since they never intended to be the leadership structure.

There’s still a lot of work to do, in either community, but I hope it leads somewhere better.

May 6

Things seem to be in flux all over. There was an announcement of a fork of NixCpp, the CLI tool underlying all of Nix, called Lix. It sounds like they’re planning to collaborate with Aux, with Lix handling the NixCpp fork and Aux handling the Nixpkgs and NixOS forks.

There also seems to be a lot of positive discussions in the Nix Zulip instance set up to discuss the constitutional assembly. I haven’t been able to follow it all closely, so I could be reading the room wrong.

I haven’t switched to using any of these forks yet. I worry a bit about fragmentation happening. We’ll have to see how things go in the months ahead.

Footnotes

  1. Granted a lot of the “Nix” lines of code are actually embedded shell scripts and other snippets not extracted into separate files

  2. As a Soto Zen Buddhist, I have the framework of “vowing not to kill” and the concept of “right livelihood” (livelihood that avoids causing suffering to sentient beings by cheating, harming, or killing them in any way) on the one hand, and on the other hand, there’s this unresolved question I have that comes from reading about anarchism, specifically from Noam Chomsky, around when is the use of force or violence justified because people with power will use force and violence to protect that power. I haven’t resolved this conflict myself so I can’t advocate a particular position to others.

  3. “Second, I am just one member of the five-member Nix team and hold no more formal authority than the others in determining the direction of the team.” From Eelco’s blog post