For a long time by now, I had a conflicting view of my ideal computer system. On the one hand, I strive for minimal, clean abstractions, without the legacy code plaguing most modern software. On the other hand, modern software gives me a huge boost in creativity and makes software more approachable than ever. This contrast between modern software that is focused on productivity and conservative software that is focused on beauty sadly prevents me from enjoying computers.
First, let’s have a look at the brutalist, minimalist side of the spectrum. The main camp here is the UNIX greybeards which see Linux as a blasphemy towards UNIX. Unlike modernist programmers who had settled down on Linux, here we have several operating systems with different levels of use. I believe the reason for the abundance of operating systems here, is that without a proper beautiful operating system, how can you create a beautiful system on top? Bryan Cantrill had a great talk about his startup’s ongoing journey of creating a holistic system.
The problem with this approach is that we are mainly stuck in the past. Sure, there is some progress but by and large, people here resist change. Rust might be bloated and not the solution, but we do need a safer system programming language. UNIX was minimal in the 70s but we have a lot of outdated decisions in operating systems like Solaris, OpenBSD and even Plan 91! Some decisions are outright hostile towards less technical people, like configuring programs with a C header file.
What I call futurism is actually what most of us use, but the people on this side of the spectrum are always looking forward. Because of this approach, we have a lot of productive, easy-to-use software in here. Programs like Fish and fzf are ridiculous in how much they boost my productivity. The cloud also, let me abstract away the machine and focus on what I care about.
But just like with the minimalistic side, not everything is perfect here. I think the main problem here is that we are progressing linearly and never stop to think of the system as a whole. There are a few examples that really pain me because they are really close to the sweet spot:
- Erlang is a great language, running on top of the BEAM. But why not take it a step further and make it the operating system? A minor nitpicking, maybe, but one that prevents it from being a holistic system.
- Containers are another way, like the BEAM, to abstract the machine away, at least partially. But the solution is full of broken abstractions, mostly because Linux was not built for this and because it tries to fix problems at the wrong level.
- Fish is a great improvement to the shell, and is a great trade-offbetween familiarity and modernism. But we must ask ourselves, is this the best we are going to get? Some shells like PowerShell and Nushell are proposing interesting ideas but we are stuck with a text-based shell.
Somewhere in between
There is no correct solution for this, I mostly wanted to lay out my inner constant conflict. I think there is a place for something in between, a holistic system that is not stuck in the 80s. Sadly, the tech sector is looking vastly different and it’s hard to see how an organization with the same goals would form.
the radical approach to UI was not as successful and it’s very hard to find a proper mouse for it. ↩︎