March 9th, 2020

Hard Stare

Cargo cult software design [blog post, by me]

[Repurposed mailing list reply]

I mentioned that I still don't use GNOME even though there are extensions to fix a lof of the things I don't like. (My latest attempted ended in failure just yesterday.) Someone asked what functionality was still missing. It's a reasonable question, so I tried to answer.

It is not (only) a case of missing functionality, it is a case of badly-implemented or non-working functionality.

I can go into a lot of depth on this, if you like, but it is not very relevant to this list and it is probably not a good place.

A better place, if you have an OpenID of some form, might be over on my blog.

This post lays out some of my objections:

"Why I don't use GNOME Shell"

& is followed up here:

"On GNOME 3 and design simplicity"

Here's what I found using the extensions was like:

A quick re-assessment of Ubuntu GNOME now it's got its 2nd release

For me, Ubuntu Unity worked very well as a Mac OS X-like desktop, with actual improvements over Mac OS X (which I use daily.) I used it from the version when it was first released -- 11.04 I think? -- and still do. In fact I just installed it on 19.04 this weekend after my latest efforts to tame GNOME 3 failed.

I don't particularly like Win95-style desktops -- I'm old, I predate them -- but I'm perfectly comfortable using them. I have some tests I apply to see if they are good enough imitations of the real thing to satisfy me. Notable elements of these tests: does it handle a vertical taskbar? Is it broadly keystroke-compatible with Win9x?

Windows-like desktops which pass to some degree, in order of success: Xfce; LXDE; LXQt
Windows-like desktops which fail: MATE; Cinnamon; KDE 5

If I was pressed to summarise, I guess I'd say that some key factors are:
• Do the elements integrate together?
• Does it make efficient use of screen space, or does it gratuitously waste it?
(Failed badly by GNOME Shell and Elementary)
• Does it offer anything unique or is it something readily achieved by reconfiguring an existing desktop?
(Failed badly by Budgie & arguably Elementary)
• Do standard keystrokes work by default?
(Failed badly by KDE)
• Can it be customised in fairly standard, discoverable ways?
• Is the result robust?
E.g. will it survive an OS upgrade (e.g. Unity), or degrade gracefully so you can fix it (Unity with Nemo desktop/file manager), or will it break badly enough to prevent login (GNOME 3 + multiple extensions)?

If, say, you find that Arc Menu gives GNOME 3 an menu and what more can you want, or if you are happy with something as minimal as Fluxbox, then my objections to many existing desktops are probably things that have never even occurred to you and will probably seem trivial, frivolous, and totally unimportant. It may be very hard to discuss them, unless you're willing to accept that, as an opening position, stuff that you don't even notice is critically, crucially important to other people.

Elementary is quite a good example, because it seems to me that the team trying to copy the look and feel of Mac OS X in Elementary OS do not actually understand how Mac OS X works.

Elementary presents a cosmetic imitation of Mac OS X, but it is skin-deep. Its developers seem not to understand how Mac OS X works and how the elements of the desktop function. So, they have implemented things that look quite Mac-like, but don't work. Not "don't work in a Mac-like way". I mean, don't work at all.

It is what I call "cargo cult" software: when you see something, think it looks good, so you make something that looks like it and then you take it very seriously and go through the motions of using it and say it's great.

Actually, your aeroplane is made of grass and rope. It doesn't roll let alone fly. Your radio is a wooden fruit box. Your headphones are woven from reeds. They don't do anything. They're a hat.

You're wearing a hat but you think you're a radio operator.

As an example: Mac OS X is based on a design that predates Windows 3. Programs do not have a menu bar in their windows. Menus are elsewhere on the screen. On the Mac, they're always in a bar at the top. On NeXTstep, which is what Mac OS X is based on, they're vertically stacked at the top left of the screen.

If you don't know that, and you hear that these OSes were very simple to use, and you look at screenshots, then you might think "look at those apps! They have no menu bars! No menus at all! Wow, what a simple, clean  design! Right, I will write apps with no menus!"

That is a laudable goal in its way -- but it can mean that the result is a rather broken, braindead app, with no advanced options, no customisation, no real power. Or you have to stick a hamburger menu in the title bar with a dozen unrelated options that you couldn't fit anywhere else.

What's worse is that you didn't realise that that's the purpose of that panel across the top of the desktop in all the screenshots. You don't know that that's where the menus go. All you see is that it has a clock in it.

You don't know your history, so you think that it's there for the clock.  You don't know that 5 or 6 years after the OS was launched with that bar for the menus, someone wrote an add-on that put a clock on the end, and the vendor went "that's a good idea" and built it in.

But you don't care about history, you never knew and you don't want to... So you put in a big panel that doesn't do anything, with a clock in it, and waste a ton of valuable space...

Cargo cult desktops.

Big dock thing because the Mac has a dock but they don't know that the Dock has about 4 different roles (app launcher and app switcher and holds minimised windows and is a shortcut for useful folders and is a place for status monitors. But they didn't know that so their docks can't do all this.

Menu bar with no menus because the Mac has a menu bar and it looks nice and people like Macs so we'll copy it but we didn't know about the menus, but we listened to Windows users who tried Macs and didn't like the menu bar.
Copying without understanding is a waste. A waste of programmer time and effort, a waste of user time and effort, a waste of screen space, and a waste of code.

You must understand first and only then copy.

If you do not have time or desire to understand, then do not try to copy. Do something else while you learn.