Rust maintainer perfectionism, or, the tragedy of Alacritty
I did not submit this to Hacker News and did not intend that this post would have high circulation but have no real problem with it being there or with it having such. I have more recent comments below. This post is from January 2020 and predates the Modular Font Editor K (MFEK) project.
I have not worked on Rust projects in quite a while, and don't know if I ever will again. I feel many crate maintainers are way too perfectionist, for example, despite all the developer hours that went into this PR, it took the effort within years to be (halfway) merged.
There's always a reason not to merge, isn't there? It would be better done with a new nightly language feature, or the function signature should have a where clause, or the documentation is not perfect. There's always a new nit to pick in the world of Rust crates, it seems. There's always a new pseudo-problem to tackle. Eventually, developers give up, which suits these maintainers just fine: after all, their baby goes on unchanged, and should they find the feature necessary, or the bug bothersome, they can fix it much better than any outside contributor. (Or so they tell themselves.)
So, here we are in 2020, and nix#864 remains unmerged. Fred, you say, you overreact. It's just
nix, not a larger problem in Rust crates. Or, worse, you're the problem. No.
Let's look at another project,
alacritty. Don't we all remember it? It was supposed to bring Rust to the mainstream Linux desktop. It was supposed to be the new standard tty. It was supposed to be a revolution, shaking the foundations of the Earth! And, for a time, it was: Alacritty is a wonderful little program. But perfectionism came too for Alacritty. @kovidgoyal's
kitty launched around the same time and had similar goals: modern OpenGL terminal, high performance.
So what stopped the revolution? Simple: Perfectionism. Reading through the Alacritty pinned issues is like reading through a book of sorrows. So many reasons not to merge. So many reasons we can't do it. And if the code is not perfect, God forbid we make it optional. Why even try, if it will not be perfect? I commented on the Alacritty ligature issue, and the theme of my comment is now a regular one on their tracker: just use Kitty. Even its maintainer says, "If you feel like the goals of Kitty are more aligned with your personal preferences, why not support Kitty, it's a great terminal emulator."
Indeed. So while Alacritty celebrates getting scrollback, Kitty is no longer a toy TTY: it is ready for serious use. And that's why I decided to take the time to contribute to it, adding, pending PR acceptance, background images. (A similar Alacritty issue exists, and it looks just how you imagine: moaning about how hard the problem is and how much we'd need to ruin our perfect code to support it. Quoth @i30817, "depressingly conservative." Depressingly!)
(Note: This blog post reflects my opinions only and not those of anyone else—not any other developer mentioned here, but mine alone.)