DEV Community

Cover image for Why GNU/Linux Isn't for Everyone - and That's a Good Thing
Toni Angelchovski
Toni Angelchovski

Posted on • Originally published at dtgarage.eu

Why GNU/Linux Isn't for Everyone - and That's a Good Thing

We have been hearing "Linux is ready for the desktop" for twenty years. Maybe the question is the wrong one.

1. The myth of mass adoption

Every year somebody announces the year of Linux on the desktop. Ubuntu was going to deliver it. Then Mint. Then the Steam Deck. Every wave ends the same way: noise, articles, enthusiasm, and six months later the market share is roughly where it was.

The reason is not the quality of the code. The reason is that Linux is not a product. It is a philosophy, and philosophies do not sell to a mass market.

The average user wants to double-click and have things work. They want Adobe Creative Suite behind one installer. They do not want to know what a dependency is, what permissions are, or why the video plays without sound.

Linux wants the opposite. It wants you to think. That is precisely why it stays "hard" for most people.

Linux is not hard. It just refuses to pretend that a computer is magic.

2. Control is responsibility

Linux gives you control over everything. That is both its strength and the price you pay for it.

On Windows, when something breaks, Microsoft is at fault. On Linux the person at fault has a name and it is yours. Installed a driver from a questionable PPA? Your problem. Edited a config without a backup? Your problem. Wiped a partition because you were in a hurry? Your problem.

sudo rm -rf /
Enter fullscreen mode Exit fullscreen mode

This is one of the few places a modern distribution will actually stop you. GNU coreutils refuses to run that without an explicit --no-preserve-root. It is close to the only safety catch the system puts in your way. Everywhere else it assumes you know what you are doing.

That is a form of respect for your intelligence. And a test of it.

3. The Unix philosophy

Linux inherits three rules older than most of the people using it:

  • Do one thing and do it well
  • Everything is a file
  • Small tools that compose

This is a philosophy written by engineers, not by a marketing department. It produces systems that are powerful, flexible and occasionally infuriating.

find /var/log -name "*.log" -mtime +7 -print0 | xargs -0 rm --
Enter fullscreen mode Exit fullscreen mode

The command does exactly what it says: finds log files older than a week and deletes them. Clear, short, predictable.

Notice the -print0 and the -0. Without them, any filename containing a space splits into two arguments and the command starts deleting things you never asked about. There is no "Delete old files" button here that already thought this through on your behalf.

That is the difference in one sentence. A graphical interface hands you a finished solution. A terminal hands you components and expects you to assemble them.

4. Self-selection, not superiority

Linux filters people out. Not deliberately, not maliciously. By design.

It tends to lose people who want the shortest path and nothing else, and to keep people who would rather understand the machine than be shielded from it. Understanding costs time up front and pays back later, and not everybody wants that trade.

I want to be careful here, because this is where essays like this usually go wrong. The filter is not a measure of anyone's worth. Not everybody wants to know how their car works. Most people want to drive it to the shop and back, and that is a completely reasonable way to own a car. The plumber who does not care about init systems is not a lesser person than the sysadmin who does. They just have a different relationship with the tool.

The point is not that Linux users are better. It is that Linux does not try to be for everyone, and stops being itself when it tries.

5. Why that is a good thing

Suppose the wish came true and Linux really did go mainstream. What arrives in the box with mass adoption?

  • Bloated distributions optimized for "easy" rather than for work
  • Proprietary additions in the name of "compatibility"
  • Vendor lock-in packaged as a Linux Experience
  • Telemetry on by default, because it "improves the user experience"

The community today is small but dense. The people in it chose to be there rather than finding it preinstalled. You can see it in the code, in the documentation, and in the answers on forums.

A thousand people who read man pages beat a million waiting for someone else to fix it.

6. The barrier as a filter

Bitcoin works on the same mechanism. To use it meaningfully you have to understand private keys, seed phrases and transaction fees. That repels the casual user, and that is part of why the network stays robust. Its population is self-selected.

Linux is the same story with different syntax. The difficulty is not a bug. It is a characteristic.

7. The honest part

This is where I argue with myself, because manifestos love to skip the uncomfortable bit.

Not every difficulty in Linux is philosophy. A good part of it is just poor work. Documentation written by someone who already knows the answer. Error messages that tell you nothing. Projects that change the config format every other release. Calling that a "filter" is a convenient excuse.

The barrier that means something is the one that makes you understand the system. The barrier that means nothing is the one that costs you three hours because of a missing line in a README.

The first is a feature. The second is a debt the community owes itself.

8. From the garage: sync under fire

A concrete example, because theory does not save data at three in the morning.

I was in an SSH session on one of my own nodes. Just me, a black screen and a terminal. Then htop went red, load average climbing in a shape normal traffic does not make. Someone was working the box deliberately: an aggressive SSH brute force filling auth.log with thousands of lines per second, plus a SYN flood eating the connection tracking table and leaving the kernel with no room for legitimate connections.

And right then, under the load, one of the disks in the software RAID 5 array died.

Not because of the attack. The attack simply exposed it. The drive was already sick and had been hiding behind low traffic. dmesg filled with I/O errors, the kernel marked the device faulty, the array dropped to degraded.

A polished commercial OS would have frozen, or produced a beautiful popup that nobody would see at three in the morning. Debian just kept writing to /var/log/auth.log and dmesg and left me alone in the console to decide what to save first: the network or the data.

The network, as it turned out, and for a specific reason. Every log line the brute force generated was another write competing for the same I/O the array needed. Fix the storage first and the attack keeps feeding the problem. A few iptables rules dropped the malicious traffic at kernel level, and the machine got quiet enough to work on.

Then the corpse. cat /proc/mdstat showed the ugly truth: [_UU]. Fail and remove the dead member with mdadm --manage /dev/md0 --fail /dev/sdX --remove /dev/sdX, partition the replacement in the dark, add it back, and then the longest part of the night: watching a rebuild crawl and hoping the second disk holds.

That last part is not paranoia. During a rebuild the surviving disks work hardest and get read end to end. A single unrecoverable read error anywhere in that pass takes the whole array with it. It is the main argument for RAID 6 or RAID 10 on anything large.

I lost four hours to man pages and commands the whole project depended on. But I came out knowing how to juggle packet filtering and broken storage at the same time, with no interface holding my hand.

That is the trade. You pay once in lost sleep so you do not pay repeatedly in lost data.

Since the story of what it cost is only half a story, here is what I bought with it. Key-based SSH only, password authentication disabled. fail2ban cutting the brute force before it reaches the logs. SYN cookies and new-connection limits in the kernel, made permanent in /etc/sysctl.d/ rather than living in RAM until the next reboot. smartd alerting on rising Reallocated_Sector_Ct, which had almost certainly been climbing for weeks while nobody read it. Monthly array scrubs, so weak sectors surface while there is still redundancy to repair them. And a spare disk on the shelf, already partitioned, instead of a browser tab at three in the morning.

9. Conclusion

Linux does not need mass adoption. It needs the right people: the ones who see a computer as an instrument for thinking rather than an appliance for consuming.

If you want a system that does what you tell it instead of what a corporation decided on your behalf, Linux is waiting. Just keep two things open: the terminal and your mind.

# the barrier is the feature
Enter fullscreen mode Exit fullscreen mode

Originally published in Bulgarian on my own forum, linked as the canonical source above. I run the whole thing on my own hardware, which is how I ended up with the story in section 8.

Top comments (0)