Nixpkgs is an interesting beast. It is massive and sprawling. The barrier to entry to contributing is quite low compared to many distros, just open a PR on GitHub. I drive multiple NixOS machines every day at work and home. I also contribute to Nixpkgs quite frequently. I review PRs, add packages, clean packages up, remove packages, add new tooling, and so on. Nearly every day.
The experience of contributing to Nixpkgs is probably most like Sisyphus pushing his boulder. Once you open a PR, it is up to you to get anyone to look at it. Beg. Plead. Bargain. Scream. I donât know. Getting anyone to even glance at a PR is a task that is the first hurdle. And it is truly one of the hardest.
Nixpkgs has zero systems for ensuring anyone actually looks at PRs, nor any incentives at all to do even do so. If someone does it is because of luck, your PR is an âeasy oneâ, or because it aligns with someone elseâs goals. There are about 5 people who regularly look at PRs from the unwashed masses. Sandro is the most obvious one, and most likely one to look at a given PR. It is truly thankless work.
There are several issues with this.
- Very few people actually look at PRs, this is quite obvious if youâve spent time here. âVery fewâ is relative to the number of maintainers.
- If a PR is not an âeasy oneâ, good luck getting nearly anyone to look at it. Easy is: updating a version & hash, or adding a new package. If you add a new Nix function, modify one, touch any Bash GOOD LUCK.
I have experienced this many times. You just have to beg, and beg, and beg, and beg, and beg, and beg, and beg, and beg, and beg, and beg, and beg for someone to look at your PR. For months, or even years! Then someone will come along, say âyou misspelled the word âattributeâ,â or âthat doesnât match how I would do it,â and there it is. Your review. Nothing of substance said about the content.
Ok so you begged for a few months, and someone reviewed your PR. Congrats. Whatâs next? Well next is getting it merged. This is the other barrier. Nixpkgs has this funny system where the final say on a PR is often up to âcommitters.â This is a group of people whom have been deemed âthe best of Nixpkgs maintainers.â And are allowed to dictate what goes in. I hope you havenât gotten tired of begging. Get on your knees and make sure they hear you! If a committer requests a change, good luck getting it merged. The nominal policy is âno reviews are blocking reviews,â but Iâve not seen a single instance where that was followed.
Committers are an in-group that get to decide which nitpick you get today. âYour function name is not what I wouldâve written,â âI think thereâs a better way to do this [I will not tell you].â And also you get a single review every few weeks. That addresses one thing. Then another review about a completely separate thing the next month. Why not all at once? Well committers are too busy to interact with you. Or something. Iâm sure itâs important. I do recommend looking at what the average committer actually does, it is quite interesting. The best way to get their attention is to do something with their pet project. But almost many of them just self-merge their own PRs and not much else. Maybe merge a fellow maintainerâs PR on a package they maintain. A large amount of Nixpkgs processes are contingent upon committers actually looking at PRs, yet it is very similar to pulling fingernails to actually get that to happen. If you were to ask me how many committers there were, I would guess like 30-50. Instead thereâs over 200. What are they doing? Iâm sure its too important to give time to look at the PRs people have written. Or at least I hope it is, since that is what they have shown is the case, regardless of what is said.
This is not necessarily their fault, as annoying as it is. Nixpkgs is a volunteer project and you cannot force people to do so. But there is also negative incentive for any other above to occur. Why review anything when you can just not? Why merge anything when you can just not? Thereâs absolutely no reason some Jane Commit should every look at anyonesâ PR. In fact it sounds quite annoying to do so when she has been at work all day. Luckily to keep her commit bit all she has to do is merge one PR a year. So she merges an update for a tool she uses at work. âGreat, I did my part for the year. See you next.â
Taking a good look at projects that are quite nice to contribute to, what do they do? They have accountability and responsibility for PRs. Nixpkgs already has some in terms of meta.maintainers. How to make someone feel accountable or responsible for PRs from the peanut gallery? Take a good look at the Rust Project.
And then thereâs just the attitude. Iâm not going to call the moderators every time someone is rude to me, thatâs a waste of everyoneâs time. But wow. I spent hours building something to try and make a process easier. But sorry for wasting your time for asking you to look at it.
Overall I really want to help Nixpkgs. I think itâs a really cool project. But what is the point of doing anything for Nixpkgs if it is just a stalled PR generator. âOops your PR went over the limit, and is now deemed to be too hard since I cannot click on it, scan it, and say âwell that looks right.â You are now sentenced to six months of begging.â What a nice experience I really wish everyone had the chance to live it.