In late February, we were exhibiting at Mobile World Congress, and I had to fly to Barcelona. I really don’t like to travel — not only because air travel is an environmental disaster, but I also just because I find it annoying and stressful. Especially when it comes to international travel.

You never know what can happen at the border — you can get searched, you can get your device mishandled, or you can just mess it up yourself. My friend once forgot his laptop on the other side of the Atlantic — not too surprising in the chaos of the security check area.

So, I really didn’t want to take my main latop with me. My daily driver is an HP Envy x360. I run Fedora on it and my preferred desktop environment is MATE Desktop. It’s a great machine, but it’s not easy to just replace if it’s lost — I snatched the last one from the store.

Coincidentally, I also needed to bring a MacBook Air (that belonged to someone else) to someone in Barcelona. I got it in the factory reset state, so I thought I could as well use it for a week, with two purposes: to have a laptop to work on during the trip, and to see what recent macOS versions are like.

I had used macOS on and off (in parallel with Linux and Windows) when it was still spelled MacOS back in the early to mid 2000s and I found the UI improvements they made in Leopard really impressive.

In particular, 10.6/Leopard supported virtual desktops — a feature that every UNIX desktop environment supported for over a decade by then. Then they went on to unify the desktop and the mobile UIs and removed every improvement they made earlier, so I gave up on it and installed Linux on my MacBook Pro — at the time that worked like a charm. From about 2010, Linux was my sole desktop OS, on various hardware.

So, I was in a funny position: I could give macOS a fresh look and compare it to my Linux desktop experience.

The outcome is: I can’t imagine using macOS on my desktop. To me it feels very clunky and limited compared to any open-source UNIX-like OS with any desktop environment on it.

General UI

Very few built-in widgets have tooltips.

To see which network you are connected to, you need to click on the “chain link” icon. To see the numeric battery percentage, you need to click the battery icon. You see the pattern.

I suppose it’s an effect of the “unification” with mobile UI. A pointing device is a desktop superpower — precise and versatile. I really don’t know why would UI designers and developers want to limit UI affordances to that of a system without a pointing device rather than provide a graceful degradation path.

In MATE, I can either hover over most things for a quick look or click on it for details.

Input

One thing that clashed with my muscle memory really hard was that the leftmost key in the bottom row on MacBooks is now the “globe/function key” rather than the Control key. At least macOS allows you to re-map some special keys, so I swapped Globe and Control.

I think that placing something else than Control in that place violates the principle of least surprise, even if you can change it back. Even compared to Apple’s own older keyboards. But I’m sure people wrote a lot about that already, and it’s just me who was out of touch with the Apple hardware world.

There are things you can’t configure, though. One “unusual” need that isn’t at all unusual worldwide at all is keyboard layouts for typing in non-Latin scripts. On Linux, I always have the layout switch key set to CapsLock (you can set it to pretty much any key combination, and I like to have it on the CapsLock key that I DON’T USE OTHERWISE ANYWAY ;).

On macOS, that isn’t possible — I set it to the Globe key instead.

Entering non-ASCII characters

One thing I forgot after using Linux systems for so long: compose key is a superpower.

For the uninitiated: a compose key is a mechanism that allows you to input characters by pressing two or more keys while holding a certain key.

Many UNIX workstation keyboards had a dedicated key for that purpose — none of the mainstream computer keyboards have it anymore because neither Windows nor macOS have that functionality, but you can map it on any key (I set it to the right Alt key because every keyboard has it).

Now, if you only ever type in English: there are two approaches for allowing the user to enter characters that don’t have their own individual keys on the keyboard.

Suppose there is a Ruritanian script that differs from the English script in two ways: there is a letter “Q with two tails” If you need to imagine a sound to go with that letter, let’s suppose it stands for the aspirated and palatalized voiceless velar plosive, contrasting with the non-palatalized Q and non-aspirated K. and there is no Y. There are basically three ways one could allow users to write in that script.

The most common approaches are:

  • Custom layout: when you switch to the Ruritanian layout, pressing the key that has Y in the US layout enters a “Q with two tails”. Pressing the Q key still enters ‘Q’. It’s ok because Ruritanian script doesn’t have Y in it.
  • Dead keys: In the Ruritanian layout, pressing Q enters a ‘Q’, but pressing a special key (Option, AltGr…) together with Q enters a “Q with two tails”. Other letters work like in the US keyboard.

If “Q with two tails” is a frequent character in the Ruritanian language, the user will certainly need a way to enter it in as few keys strokes as possible.

However, for entering infrequent characters, there’s a third approach: to “compose” them from building blocks.

For example, to enter an A with an accent (“Á”), you press Compose + A + '. To enter a C with a tail (Ç), it’s Compose + C +,. One advantage over “dead keys” is that you can guess the combination: to enter anything with an accent, you press that letter and the apostrophe; to add a tail you press ‘,’; to add a tilde (like in “ñ”) you add, well, a ‘~’.

The other advantage is that the mechanism is infinitely extensible: you can configure it to produce a sickle and hammer on Compose + U + S + S + R or whatever — your imagination is the limit.

With some practice, it only takes a tiny bit longer than the dead key approach. On Linux, I use it all the time to enter occasional foreign words or names; and I use the same mechanism to write in Irish, which uses accents to mark long vowels, like in “mór” (“big”).

When I realized that macOS had no built-in compose key, I felt as if my hands were tied. I couldn’t just enter any character I wanted. I couldn’t find an app that would implement a compose key, either.

Window management

Window management on macOS is a mess.

The “maximize” button in the window menu is actually “switch to full-screen mode”. I don’t use full-screen mode much, other than presenting, because I want to see the system panel more often than not: current time, battery, network status… You can maximize a window by double clicking on its title, but that’s two clicks instead of one. There’s also no keyboard shortcut for maximizing a window, and seems to be no way to configure it. Some say there’s an app to compensate for it — I don’t know how well it works, but I hope Apple will not remove the APIs required for such apps to work…

Cycling between open “apps” always changes the top menu to that of the app. I’m not a fan of the app menu shown in the system panel rather than in the app window, but that’s highly subjective — different ≠ bad. What I found annoying is that cycling with Cmd-Tab doesn’t always bring the app window to the foreground.

If the purpose of Cmd-Tab is not to bring the window to the foreground so that I could start using it, I honestly don’t know what it is. A “Cheshire Cat” app with a visible menu without a visible window isn’t very useful, and you have to bring the window up in a different way.

Worse yet, maximization behavior is not consistent for all applications. For example, Safari cannot be fully maximized. It’s either minimized, full screen (the top panel hidden), or it’s large but smaller than the screen, until you resize it by hand.

Misc Operating system annoyances

There seems to be no way to make the system reconnect to a WiFi network if that network disappears and reappears. That was a real annoyance when I used it with a mobile hotspot on my iPhone, since iOS likes to shut down the hotspot after some time to save energy. When you can’t tell the phone “just keep the damn thing on” and also can’t tell the laptop “just reconnect to the same damn network”, that’s a perfect combination for productivity.

Applications

Terminal

All Linux terminal emulators can detect URLs and allow opening them simply by clicking on them. For example, when I push to a repository fork on GitHub and the server shows a “make a pull request” link in the message, I just click on that message to open GitHub in Firefox and make a pull request. I was really surprised that Apple’s Terminal app can’t do that.

The other observation has little to do with the Terminal app as such, but shows that the permissions model is fundamentally broken. When did something like ls ~/Downloads, I got a dialog window that said “Terminal wants to access your Downloads folder”.

It’s not the Terminal, it’s /bin/ls! I certainly want /bin/ls (that comes with the OS) to access any directory. I may not want

WireGuard

To get the WireGuard client app, you need to install it from the AppStore, and you cannot download even free (as in price or as in freedom) apps from there without logging in.

Safari

Safari doesn’t display the full URL of the page you are at until you click the address bar to edit it — only the second-level domain. That’s annoying at any time and can be outright dangerous if you have tabs with different instances of the same web application (say, a staging version and a production version).

One could argue that staging versions should be made to look different from production, but it’s not the point — the point is that hiding important information when it’s present and can be easily displayed is a questionable decision in general.