Skip to main content

Just Works For Me

·1640 words

If there would be some absurd world where I would be able to choose two pieces of the common vocabulary that should just vanish, it would be “just” and “works for me.” We, folks in tech, got way too comfortable throwing these around. There is so much complexity that these two try to magically wave away. While using “just” and “works for me” we often forget that people who use our products, read our instructions, or try to follow our advice are not perfect clones of us. They don’t have the same context, they don’t necessarily have the same background and experiences, and most importantly - they likely don’t have the same mental models as us.

Allow me to demonstrate this phenomenon with a relatively recent example. With the growth in popularity of the Steam Deck (I really enjoy using mine) I got curious as to what it would be like to run Linux on the desktop. After all, the year of this OS on the desktop is right around the corner, every year. I am not the one to shy away from trying different technologies for curiosity’s sake, so why not? As Jeff Atwood mentioned in one of his posts:

[…] I’m a fan of Unix. And I’m also a fan of Windows. I think it’s worth studying what both are getting right and wrong, because as a programmer, I’m a fan of whatever the heck works.

I use Windows as a daily driver. I also use macOS and a Linux for development, but this was the first time when I decided to try out Linux on a custom-built desktop computer. As expected, I started running into some issues. Some reared their head right away, others cropped up over time. A lot of them, to be fair, are not trivial to solve. These included:

  • Running games and some Windows apps (I know, I know) through Wine and Proton is a pain, especially if you’re trying to play some of the newer titles. The problems compound if the application used a custom UI toolkit, but again - I expected that to not work well at all.
  • Some Linux versions of popular software like DaVinci Resolve had a noticeable performance hit between running them on the exactly same machine configuration. It works well on Windows.
  • HDR is not supported.
  • Audio hardware that I use to record my podcast would not work at all. Output from my mixer would be choppy, and no matter what magical command incantations I would use, it would not change anything.
  • Connecting my capture device to OBS Studio would not produce proper 60FPS output, no matter how I would tweak the configuration. Video would be choppy and delayed. Same configuration works on macOS and Windows.
  • Dual GPU setup was funky, especially to get one GPU delegated to a VM for pass-through, or when having two displays connected to separate cards.

And a long list of papercuts that I won’t bother boring you, dear reader, with. The experience was best encapsulated in a recent comment made by a user on a technologist forum:

[…] many games require command line tweaks to start or work properly, including but not limited to; overriding binary paths to skip launchers designed for Windows, changing your GPU driver (RADV vs AMDVK), enabling features like DXVK_ASYNC (might make an unplayable game playable)

OK, this all sounds somewhat terrible for a common user. I don’t necessarily want to do all this to play games (or do much of anything else basic, to be honest). But that’s fine. I get it. Games designed for Windows are unpredictable on Linux, no matter how advanced Proton gets over time (I am really hoping they do well - Steam Deck is great). I can’t say I expected smooth sailing and I also am a fairly technical person who is comfortable tinkering with commands, configs, and whatever is needed to see things up and running. I knew what I am getting into and I was prepared to roll up my sleeves and try to get things in the state they need to be.

In the process of researching my issues, I’ve ran into a blog post that kind of captured quite a few of my experiences. Which, again - is fine, I don’t necessarily expect the same level of polish I get from Windows and macOS when using a community-driven OS. At least folks are open to admitting that these issues exist. The hilarious part to me became the “advice” from the community when it comes to acknowledging the challenges and their future solutions.

Some gems that I came across:

Yes just browsing quickly I see almost nothing that applies to my computers, and I have used Linux on all my laptops and desktops for about 20 years.

NVIDIA can be a pain, but most of the wrinkles are ironed out, unless you have very old (or very new) cards

The issue was never that Linux wasn’t ready for the desktop. It’s that the average user was never ready for the desktop.

You only need to use it on regular HW that isn’t too brand new that the kernel doesn’t support it. For most folks it probably covers about 80% of what they need to do with minimum of fuss.

It sucks to have to use a terminal and read a manual so you can listen to music while your brother is on YouTube (somehow), but at least you may learn a useful skill.

While Linux have had its issues, things are vastly improved nowadays, to the point I suspect it’s better than Windows on most hardware (but I have no personal experience).

Regarding nic and graphics drivers it is possible to find hardware with good hardware support it is probably impossible for volunteers to fix all possible issues with closed source or proprietary software/hardware. Consider choosing accordingly.

None of these have ever happened to me, and I started with slackware.

Expecting Linux to work flawlessly on any random junk is a feat you’re not expecting of any other OS.

Just buy a Desktop/Laptop certified for GNU/Linux and stop complaining.

Cool. None of this stuff I care about. Linux on the desktop works for me; I just use my computer. It’s all I need or want. So, I’m happy.

No high level, stable, sane (truly forward and backward compatible) and standardized API for developing GUI applications? So just install the previous version of those toolkits with the application (or use your package manager which will do that for you).

I’m sure there are hardware configurations that don’t work as nicely, because Linux supports a ton of weird hardware. But it’s easy to buy high-quality Linux systems.

Notice a pattern about all of these? It will all just magically work if I:

  1. Just pick the right hardware designed specifically for Linux. When it comes to computers, I don’t necessarily expect a Mac Book to run Windows perfectly, but what about the peripherals? My mixer doesn’t work. My capture device that I connect the DSLR through doesn’t work. Wacom tablets have a myriad of issues. Shifting the blame as the user “picked the wrong hardware” is a silly argument given that most of the time I don’t think about hardware compat matrices. I look online for a mixer or whatever other piece of hardware there is that gets the job done and I can guarantee that it will just work on my Windows and macOS boxes.
  2. Just stop complaining and learn the command line. Who doesn’t want to spend hours trying to figure out why their audio stopped working by tweaking config files? You need to know how to manually build an internal combustion engine before going to the nearby grocery store, so why not apply the same mindset to your computer.
  3. Just not buy very old (or very new) hardware. This one is self-explanatory.

Mix that in with the sentiment that I just don’t understand how to properly disambiguate UI toolkits and whatever application needs them and just suck it up because it works for everyone else. Nothing, and I don’t say that lightly, nothing turns a potential customer off more from your product, whatever product that may be, than dismissing their concerns and assuming that they have the time and resources to go and fiddle with things that are not the core value prop of what they are trying to accomplish. My goal when turning on a computer is using it to accomplish a specific task not spend most of my time diagnosing issues, trying to break through cryptic half-documented settings, and ponder on whether the hardware I bought will actually work or whether I made some poor choices along the way.

This doesn’t take away from the merits of Linux as an operating system - I use it, lots (lots) of servers use it, it runs on IoT and mobile devices. It has a lot of hard work put in it from a lot of smart people. But not everyone is a C compiler PhD, and neither does my grandma have time to figure out why the sound for her 720p Netflix stream is not coming through when it was yesterday. It may be more helpful to approach problem-solving and engaging with the community in a more collaborative and empathetic manner. Instead of suggesting a solution with “just,” why not ask questions and understand the problem before offering a solution? Start being interested in understanding the problem and working together to find a solution that, in turn, makes your product and your ecosystem better.

Pump the brakes on dismissing your customers’ concerns, be it your regular run-of-the-mill computer users or developers, by saying that they just need to do a bunch of convoluted stuff or worry about things they did not need to worry about before. Just stop it.