The NixOS Conflict in Under 5 Minutes
This is my effort to create a short summary of what has caused the Nix community to currently be in conflict. It summarizes some of the earlier history that may be missing from more detailed explanations.
I started in 2022, and wasn't around in the community at the time, but, from my research, the decline in Nix community civility began in mid-2021 after the introduction of RFC 98, a document advocating for a "Community Team." The team would "moderate social norms, mediate interpersonal problems, and make moderation decisions." At the time of its writing, those things were completely ad-hoc. RFC 98 would have given the team broad powers including moderation of communications in official spaces (electronic and physical), the power to ban whomever it saw fit for any reason from community spaces without explanation while also making them softly responsible for mentorship of new and "errant" contributors.
RFC 98 was co-created and championed mostly by a person who has a history of within-organization agitation, first within Google, and now within Nix. They have a history of social activism and labor organization, and as far as I can tell, they are employed or contracted in various capacities that allow them to pursue these goals. By any reading, they are extremely polite and accommodating in the absolutely mind-endingly long RFC 98 doom-shedding.
I don't think the other well-known participants in those discussions — the originators of Nix and other long time contributors — knew much about the champion's activism background at the time. Because they are kind, liberal, thoughtful, reasonable people, and because they really do want to create a maximally welcoming environment, and because Nix really was an exceptionally open, welcoming community in the first place, they were happy to encourage anyone who might come along who might offer work towards such a thing. The eventual champion of RFC 98 seemed like just such a person, despite not having much of a track record in the community.
RFC 98 had as one of its trigger incidents (the only concrete one I could find) a minor argument between two contributors that surfaced in GitHub. One contributor was irritated that a reviewer was terse in communications about a PR, and took the terseness as rudeness. The (prolific) reviewer is terse because he reviews many issues, spending only a few minutes on each. The disagreement was rooted in the contributor feeling garden-variety disrespected by the reviewer, and was not a marginalized person feeling other-ed or anything like that. Cross words were traded.
This argument was brought to the attention of Nix's Discourse by a third well-meaning contributor. He was taken aback by the tension between the other two when he tangentially stepped into code in which the the other two were participating and got caught in some catty cross-fire. He framed a topic as a question on Discourse along the lines of "what can we do, in general, such that I don't need to step into these kind of interpersonal land mines again?" The Discourse topic then mushroomed into a more general debate about civility. (citation needed, I can’t find this Discourse issue again, if anyone knows what I’m talking about, please let me know where it is)
At this point, in a better timeline, some other well-respected community member would have pulled the reviewer, the offended contributor, and the third person who had stepped on the land mine aside, maybe even privately, and heard their cases. They might have said "hey, I appreciate all of you doing what you do. I think I understand why all of you are irritated, and I don't blame any of you. Let's try to work it out." He or she might have then recounted all their positions as he or she understood them, and then asked of the offended parties "what can we do here?" And determine if they could work it out on their own through a short round of continued mediation. If they could not, then at least the irritated contributor, the reviewer, and the hapless reporter would have felt like their cases had been heard, and, though they might have had run-ins in the future, it might have been deescalated enough in the present. And that would have been the end of it.
In the actual timeline, the minor three-party dust-up kicked off a very long, very public, very well-attended Discourse discussion about solving an imaginary civility crisis through the introduction of policy. No one felt empowered to be a final-arbiter mediator between the actual parties involved in the tragically minor dispute. The existing mods could have done some sensible small scale mediation, I guess, but it didn't happen. It's also always more fun to recreationally participate in conversation that promises grand meaning than it is to solve a small but important problem.
At a properly run company, if you are caught eating someone else's sandwich from the fridge, your boss will confront you and say "hey, Bob, don't eat Ted's sandwiches." That will be the end of it. In an organization with weak leadership, however, the entire company will receive an email from HR in the afternoon dictating a company-wide seminar on sandwich theft prevention, a #sandwich-theft chatroom will be created, posters depicting sandwich thieves in an encircled red X will appear on the walls, etc. The latter is more akin to what happened in the Nix case I outlined. There was no leadership in place to deal with an isolated sandwich theft, so it now needed to discuss policies with the goal of ending sandwich theft forever and punishing all sandwich thieves globally.
Nix was largely a power vacuum in this sense.
In the meantime, most labor organizer activists aren't opposed to completely upending whatever organization that they're targeting. They need leverage to enact the changes they want, and they know if they upend an organization, they are more likely to gain that leverage, because those in power will drop out during the chaos and infighting they cause. They're quite happy to see any original participants off, replaced by others who share their goals. This doesn't really need to stop until the organization is modeled perfectly after their values, after which it will not bear much resemblance to the original organization at all. It will, however, bear a resemblance to a labor union or a political advocacy group, always with the labor organizers in positions of considerable power. This is, over enough time, easy to do in a community that is already very open and welcoming. And even easier to do when no one is really in charge.
Thus began RFC 98, which gave its "Community Team" frighteningly broad powers such that no one would ever need to experience anything like sandwich theft again, and also in the background hey maybe we can also turn Nix into some sort of activism group by (I quote) “providing ideological continuity”. It is instructive to read the RFC, if you haven’t already.
Meanwhile, the Nix moderation team became stuffed with ringers from the activism side due to a poorly thought out policy that ensured the majority of the existing moderation staff had to agree to invite each additional moderator added instead of a policy that tried to ensure a more diverse team. The moderation team became quite powerfully aligned with the activists as a result, and it became one of the only identifiable locuses of power that were actually willing to use any. The Nix Foundation board also had power, but they did not use it. They hadn't really wanted any power in the first place, they just wanted to write and talk about code, and facilitate paying the bills that allowed for it. Community interpersonal stuff was left to the community. Whatever that was.
The process of debating RFC 98 flushed out the folks who were likely to become opponents of the activism goals (developers like Jon Ringer and others, several members of the Foundation board). Eventually, the RFC was not accepted because it was pretty incoherent in places and gave far too much power to a very few individuals. But the non-acceptance of the RFC became an excuse to agitate for the activism faction, and they began the process of dividing the community along the lines they had identified. Opponents of the RFC were singled out and accused of various moral failures. Credulous community members were convinced by the activists that the community had fundamental problems due to the continued participation by the “immoral”. The moderation team suppressed dissent heavily, creating an atmosphere of anger and distrust. The opposition to the activists fought back, and civility began to unravel.
Later, a similar pattern repeated itself around sponsorship dealings with the American defense contractor Anduril. North American Nix conference organizers accepted an Anduril sponsorship despite a similar offer having been rejected by the European conference due to an opposition to advertising the military. This was due to the extreme distribution of control and lack of centralized power over the various Nix conference organization teams. It was also red meat for the activists, whom seized on the misstep and lack of centralized power as yet another wedge issue.
And then the pattern repeated itself with issues related to the feelings of members of marginalized groups. Incidents of injustice to the marginalized committed by powerful people in the Nix community were probably identifiable. But no one actually bothered to identify any coherently. Everyone else just assumed everyone else had a legitimate beef and fought bravely on their behalf, too drunk on their own righteousness to check for receipts.
And then the same pattern repeated itself under the guise of Eelco, the creator of Nix and Foundation board president not being sufficiently open and communicative with respect to his technical contributions and preventing others from contributing in repositories he controlled. They went at him too hard in my opinion, and made unconscionable accusations about him to force him out, but this is the issue on which the facts are most on the activists’ side.
And then this grab bag of issues were compiled and mixed up via an open letter. The letter drew support from credulous people whom each maybe took offense to one of the four wedge issues. People who really only cared about Eelco's intransigence found themselves thus accidentally allied with the three other groups, and people who only cared about military sponsorships likewise, etc. It appeared as one group (150 signatories wow!), although it was just an engineered alliance of people riled up about four different issues clueless to the goals of the activists. The letter made sure to blur all those boundaries, mixing them all together into some single seeming big-tent cause.
And so the battle lines became drawn. Either you were with the activist writers of the letter, or you weren't. The activism had done its job.
Four of five board members are now gone, including Eelco. They didn't really have the stomach for conflict. The mod team is still around, though. They do have stomach for conflict, or at least the stomach to suppress it. Thus, no discussion about anything related to any of these topics can be had on Discourse, GitHub, or Matrix, all are tightly policed. The "governance discussions" proposed by the board were policed just as tightly and any dissenters ejected. The "constitutional assembly" created by this process has as a majority of those at least not-unsympathetic to the activists. It will create a governance structure partial to them.
A few true villains and some real heroes were identified during this process, but mostly it's just stupid people doing stupid things. I hope folks will see that we are being played, but I doubt it. We won't toss out the professional dividers because most of us actually secretly enjoy the shallow, faux meaning the conflict confers on us temporarily. And many of us are terrified of them.
Once the dividers have achieved perfect control, they'll do whatever inscrutable thing they want with the ruined shell of what used to be a thriving community for a while, with them at the helm, until they get bored. Eventually, Nix/NixOS forks will appear, and those forks will begin to rebuild actual open source software development communities, hopefully with better immune responses, but probably not. The dividers will always be circling, waiting to end us, advertising themselves as our redemption.