QIAOPANG.COM · SELECTED ESSAYS (2013–2026) · 260 ESSAYSBrowse Chronologically (2013 → 2026) ↗
QiaoPang · Programmers LifeSelected Essays · Systems, Craft & Agentic Era
Timeline ↗

The Programmer's Meltdown

The Programmer's Meltdown

Today, an article titled ‘a sad day for rust’ shot to the top of Hacker News. Unable to endure the ‘unsafe shitstorm’ any longer, fafhrd91, the author of actix-web, decisively took down this web framework—ranked first across major benchmark sites. The community immediately erupted in complaint, and every project that depended on actix-web was affected. Though not as consequential as the left-pad incident that once crippled half the internet, it was still enough to leave the open-source community badly shaken.

Let me first give the onlookers a quick rundown of the cause and effect.

actix-web is an influential open-source web framework in Rust, long perched atop the TechEmpower rankings (the author has now removed actix-web):

The Programmer’s Meltdown

It is fast for a reason—fafhrd91 used vast amounts of unsafe (a Rust keyword marking code that bypasses compiler checks, with the author personally guaranteeing memory safety) to squeeze out every last drop of performance. This heavy use of unsafe sparked round after round of debate among users who used actix-web yet despised unsafe code—what the author called the ‘unsafe shitstorm’—and ultimately crushed him mentally. After removing actix-web, fafhrd91 wrote a ‘postmortem,’ saying with no small sorrow:

Each of this projects was rewritten from scratch at least 4-5 time. I hope I expanded some boundaries and found few new patterns, I hope other developers will check source code and find inspiration to move even further. Nowadays supporting actix project is not fun, and be part of rust community is not fun as well.

I am done with open source.

fafhrd91 has a point. He wanted to ‘push to its limit’ the use of Rust and see just how far performance could go. On that count, he was unquestionably successful. Yet if he had been building something lower-level—an operating system, say—people might have understood him. But deploying arcane tricks that ordinary programmers have not mastered, and which fill them with dread, in a web project always leaves a knot in people’s minds. Humans are always afraid of what they cannot understand. The author of ‘a sad day for rust’ wrote:

Someone went through actix-web’s source and found it used a great deal of unsafe code. That alone was not a big deal—but the problem was that much of the unsafe code was unnecessary. So things started to go in a bad direction.

The author of actix-web replied bluntly that the unsafe code was fine. This is practically the perfect model of programmers’ ‘unsafe code anxiety’: a large, important, influential library containing a great deal of unsafe code, with an author who was defensive about it.

Note that these people are programmers. They do not just complain; they write code. Whether under the banner of open-source spirit or out of a genuine desire to contribute, they responded with code. Unfortunately, their patches were rejected by the author. That in itself was no big deal: maintainers have the right to decide whether to accept submitted patches.

Then Reddit erupted into heated argument. The rhetoric began to misfire and slide toward ugliness. More issues were filed, closed, and locked. In the end, the author accepted some patches and greatly reduced the unsafe code.

People were still not satisfied: more arguments, more patches, more flame wars, and bad blood.

I have always felt that the keyword unsafe is poorly chosen. ‘unchecked’ would be more apt and would sound less extreme. Look: ‘unsafe code’—just seeing the phrase immediately makes you feel unsafe, does it not?

I flipped through a few of actix-web’s issue threads and found the arguments fairly mild, mostly focused on the matter at hand—compared with the mudslinging on domestic forums, this kind of flame war is kindergarten level. But it still wounded the author: writing code had originally been for fun; now it had become a burden. Caught between sticking to his own philosophy and the public’s censure, he pleased no one. So, like Wei Xiaobao, he simply roared: I quit!

What he left the open-source world was a mess of scattered feathers.

Maintaining an open-source project over the long term with enormous effort depends on passion. That passion needs to be continually replenished. Open-source software has always emphasized no warranty, as is. If you do not like it, you are free not to use it, or to choose another project, or even fork it and run it as you see fit. But there is always a small faction in this world: dissatisfied with the status quo, they pressure you to change to match the shape they expect. If you compromise, they call it a victory for ‘justice’; if you do not, they keep closing in until you do.

A long time ago there was a Reddit post (I can no longer find the original) calling on people not to use ring (a Rust cryptography library built on Google’s BoringSSL), on the grounds that its author would not accept pull requests unless he was paid. Following the link in the post, I found the author’s demand entirely reasonable: he did not intend to support certain niche platforms, and if someone urgently needed that support, they could sponsor it. What a perfectly normal request. They enjoy software someone else provides for free, yet resent the author for wanting to make money from it—are open-source authors somehow obliged to work themselves into poverty?

I am not a person who much enjoys community discussions, and in recent years it has become especially pronounced. In earlier years I answered questions widely on Zhihu, serialized articles in a column, and argued with keyboard warriors. Later I gradually stopped answering questions. Occasionally I would be foolish enough to answer one or two, and I would not even look at the comments. There were, in fact, nourishing comments among them, but they were drowned out by meaningless cleverness, showing off superiority, nitpicking, and contempt-laced trolling. What is the point? I write to enjoy myself, and a keyboard warrior can spend a few minutes of effort to belittle hours or more of my work—like a SYN flood attack. My response is not to respond: why should I let keyboard warriors use my unhappiness as the source of their amusement?

So morally I side with fafhrd91—even though I do not much like actix-web’s code myself—I still support the author’s right to exercise his own prerogative. Compared with the reckless author of left-pad, fafhrd91 did not unpublish the package he created; the repository was merely moved under his personal name, leaving room for those who truly need access to fork it.

The greatest sorrow is a heart that has died. That is what I saw in a programmer who went off the rails.

MORE IN Leadership & Career

Further Reading in This Column

View all essays in “Leadership & Career” →

Nana the Intern

When it comes to interns, beyond learning ability, I ask for one thing: a long enough runway. By "long enough" I mean at least two or three months — anything shorter and they leave before contributing anything of value, clutching a glowing evaluation form. Nana's story is an exception worth studying.

程序人生 (2015–2019)4,528 chars · 10 min read

ArcBlock at One Year

One year since trading the Bay Area for Washington State: a reflection on the winding road that built ArcBlock — its Forge framework, its bet on application chains, and the choices that led here.

Book Next Chronicles (2013–2020)6,593 chars · 15 min read

Arcblock’s Beijing Hackathon: Are You In?

Arcblock’s Beijing hackathon invites developers to explore blockchain, OCAP APIs, GraphQL, and Elixir through demos, talks, prizes, and a full day of building with our engineering team. Come hack, ask questions, and see how we’re simplifying blockchain app development.

程序人生 (2015–2019)4,161 chars · 9 min read