I’m not one prone to knee-jerk reactions, but I’m also not one to sit about idly without considering alternatives. So the first thing I did after the Apple keynote was to download a copy of Elementary and burn it to an SD card.
An hour or so later, after checking that my Chromebook would work OK with it1, I installed from the live image to the SSD and began the process of figuring out whether, three years after I first tried it, Elementary is finally good enough for me as a development environment.
Like last time, this isn’t a review per se, but rather a smattering of my impressions while trying to assess whether it suits me.
I’m being realistic here – I know it’s not macOS, I don’t expect it to be macOS, it will not be a magical replacement for macOS for most people who share my current disenchantment with Apple, but I am very familiar with Linux, and most definitely need to consider moving to it in the long term given the way Apple has been neglecting Mac hardware and software over the past few years.
Scenario and Use Cases
Over the past couple of years my iPad has become my personal computer in most regards – I do my email, shopping and budgeting on it, as well as a non-trivial amount of writing and even some coding (this despite Apple‘s myopic take on some things, like application switching and peripherals). I obviously rely on having a Mac nearby as a direct “upgrade” whenever I’m handling personal stuff that the iPad can’t cope with and would prefer to use a Mac for work as well, but the nature of my work has also changed over time.
These days the technical side of it revolves a lot around building cloud infrastructure and machine learning solutions on top, and my leisure time riffs somewhat off that – most of it is done on remote machines and requires little except a working RDP client and a browser. But I develop a fair bit in Python and Go (alas, not much Clojure these days) locally, build Docker containers with the results and, when things are moderately quiet, still dabble in photography.
I have little expectations towards the Mac in terms of photo management (although I do use Pixelmator on occasion for minor touch-ups, and other graphics apps like Sketch for vector editing), but even less for Linux (don’t get me started on GIMP), so I’m not going to even think about the latter in earnest yet.
Taking things to the extreme, I would be fine with my iPad plus a thin terminal were it not for all the niceties that come bundled with a Mac and the occasional need for graphics handling and some form of office suite (for work I can always run Office via a remote desktop connection to my work laptop, or fire up an Azure image with it preinstalled, but for personal stuff that requires putting ink to paper that’s overkill).
I’d like to reach that stage where I don’t actually need a beefy computer sometime, really, but for now I need a good enough desktop environment and UNIX underneath it3.
My Acer C720 started life as a Chromebook, and its otherwise pathetic 2GB of RAM and dual-core 1.4GHz Celeron CPU make a good proving ground. I added an aftermarket SSD (actually two, by now), and have been running Lubuntu and LXDE on it for a while; so Elementary is essentially the same OS I’ve been running on it already, but with a significantly tweaked UX.
On this relatively modest (and three-year old) hardware, Elementary flies. Other than the usual minor hiccups characteristic of Linux I/O during the initial (massive) Dropbox sync and every time I let Chrome get its grubby paws on too much RAM and kick off swapping, it’s all buttery smooth2.
Visual effects like window switching and Éxposé-like window overviews (which are the main difference between Elementary and LXDE for me on this hardware) work without any glitches or any kind of delay (even with a second monitor attached).
The Shameless macOS rip-off thing
It’s a thing many people point out in Elementary, and I, for one, don’t care, be it cloning, inspiration or whatever.
I have no real expectation of it working anything like macOS, but I do like that it looks close enough from an aesthetics and functional perspective because I abhore most other approaches at desktop UX (of which Linux has become a junkyard of sorts).
It has polish and care that the stereotypical raging neckbeards who espouse the mantra of Linux on the desktop are unable to appreciate (or, apparently, build), and it has to exist, even if merely as a counterpoint to all the ugliness.
So I hope that Elementary keeps looking and working the way it does, and would not use it if it were any different (but neither would I use a plain Gnome, KDE or Unity desktop, because I find them tasteless and cluttered).
There’s a dock, and a status bar on the top of the screen (menus go on app windows, as everywhere else but on macOS), but the application menu/launcher (summoned by
Cmd+Space) hangs off the top left corner.
Elementary ships with a few built-in apps (as well as a “store” that acts as front-end to the package manager). They’re not as polished as I’d like, but mostly work and are worthy of a few notes.
Epiphany is good enough of a browser to use and keep as the default – you’ll always need Chrome to tackle trendy websites these days (and I rely a lot on it for development), but it’s fast and lightweight, and that greatly offsets any quirks and limitations it might have (such as the lack of extensions and full-blown ad blocking).
It ships with the wrong privacy defaults as far as I’m concerned, but as a nice bonus it lets you save a web site as a “Web Application”, much like Fluid (which I use extensively).
Update: Epiphany’s upstream maintainer wrote in explaining that Elementary, for some reason, actually disables the privacy settings – the upstream defaults for Epiphany have Do Not Track and the ad blocker enabled by default, and third-party cookies disabled by default, which is precisely what I wanted it to be. Future upstream versions will have even more security features.
That is subtly broken (I was unable to set up a web application for OneNote, partially because you need to jump through a few different domains to authenticate and that confuses Epiphany hopelessly), but mostly works (Slack and Tweetdeck, for instance, were painless to set up).
It’s nice enough that I can run multiple Epiphany web apps in less RAM than Chrome tabs. But it’s not as thrifty as Firefox, so I might resort to switching to that in the long run – if using Mozilla software on a long term basis becomes a credible proposition again, that is; I’m still sore about their orphaning Thunderbird.
The Mail app (a touched-up build of Geary) feels a lot like Mail.app, but is simpler and speedier. I’ve been trying it out over the years, and can now consider it borderline serviceable, although it renders HTML rather poorly and has effectively zero configurable features (no signature, no filters, nothing).
The Calendar (which is spartan to the point where it only displays a combined month/detail view) now supports
CalDAV, so getting a Google shared calendar on it was a piece of cake (I haven’t tried iCloud, since I’m assuming I’ll have to migrate away from it in due time).
Oddly enough, there is no built-in Contacts app, which I find baffling.
Photos (Shotwell) is… cute. It provides basic image editing functionality (which appears to be non-destructive), which includes simple EXIF manipulation (including my usual nemesis, which is offsetting dates and times slightly to compensate for differences across multiple cameras).
It can also publish to Flickr (although who knows how long they’ll still be around), and appears to have some support for RAW (which I haven’t tested).
And, in what I can only call a tremendously good example of how not to copy Apple‘s mistakes, the built-in Music app looks a lot like iTunes, but without any of the bloat. It does, however, include the nice bits like equalizer presets:
Finally, the file browser is quite serviceable and has a multi-column view – something I’ve long found to be the most efficient way for me to browse a filesystem (ever since my NeXT days).
I’d probably have to install Thunderbird for wrangling my mailing-list traffic, but for casual use most of the built-in applications now appear to be serviceable.
I installed Dropbox from the App Center, which went mostly OK except that I had to change the launcher stub to get the tray icon to display properly:
Exec=env XDG_CURRENT_DESKTOP=Unity QT_STYLE_OVERRIDE='' dropbox start -i
Other than that, downloading and installing Infinality (without which I refuse to use any Linux system), Chrome and Visual Studio Code worked like any other machine – it is Ubuntu 16.04, after all, and everything I regularly use on my servers is readily available (like Docker).
I stopped short of installing an Office suite because (even though I easily spend more hours on PowerPoint and Outlook than in anything else these days) I don’t consider it an essential (actual) work tool and prefer to do without the distraction, plus (again) I can just remote to my laptop and use it whenever I need to.
The very first thing I noticed was that the terminal emits a desktop notification whenever it detects that a long-running process (like
apt dist-upgrade) has finished.
Then I got IME set up with a couple of clicks (I am constantly switching between a Portuguese keyboard layout for chat and local correspondence and a US layout for coding), which was a bit of a chore in LXDE.
The touchpad (primitive as it is on this machine) also worked great out of the box. No gestures, alas, but natural scrolling and two-finger touch (the bare essentials) are available in the settings app.
The built-in text editor (Scratch) is good enough to code in in a pinch – it has syntax highligthing, brace matching, a folder pane and a mini-map – and that is before you realize it has extensions, which add
vim keybindings, a built-in terminal and a web preview.
Elementary ships with the Orca screen reader (something that I did not expect, and which I found welcome considering my long-standing interest in assistive tech). You can also switch off UI animations (to an extent, some seem to stay on regardless) if they annoy you.
And, for the other third-worlders in the audience, you’d be glad to know that my AirPrint proxy was just there. Not that I print much of anything these days except official docs – the kids are the primary users – but it worked.
Even more amazing, the built-in scanner app detected and worked with my OfficeJet without any configuration.
Besides the expected differences in UX and some difficulty in setting up some hotkeys (I have no idea why I can’t map a “raw” function key to a system function), there is very, very little to configure via the GUI.
Even the terminal (which is usually one of the most configurable things in a Linux environment) is not configurable in any way by default (other than being able to zoom the font size on the fly). I can hack it, sure, but the default aesthetics are pleasing enough that I don’t feel a real need for it – much like the rest of the system, really.
Incomplete, yes, but what there is largely works and does what it says on the tin – and the UI affordances are clear, at least to me.
Although I can’t switch wholesale just yet, I see no real reason why I can’t use Elementary for around 80% of the stuff I do – probably even more with a few adjustments on my part.
And that, in and by itself, should tell you how much Apple has dropped the ball here.
I do know that I will be keeping it on this machine as a daily driver, and that I am much more confident that I can survive on a PC running Elementary.
A very likely scenario is my investing on a Skull Canyon NUC or something with a similar form factor (one of the reasons I have held on to my current Mac mini for six years is that I prefer small, compact computers) and maxing out its RAM and SSD.
It would be painful, though. I still hope Apple will do something about their desktop line before the holiday season.
Let’s wait and see – at least now I have the makings of a solid Plan B.
Update: just after this went up, I had absolutely massive traffic from Hacker News - hundreds of gigabytes of traffic in a single day. The day after, someone on the Elementary team with a good sense of timing posted a Switching from macOS article that is nice, but glosses over a bunch of the missing bits I’ve found. Since I haven’t committed to switching (this is still a Plan B), I’m going to use the existence (or not) of any follow-ups to that blog post to tackle the (still rather wide) functional gap as added inputs down the road.
Linux hardware support is less of a crapshoot these days, but the C720 has a few peculiarities that forced me to recompile a couple of kernel modules up until kernel 4.1 or so, and still has power management issues, so I wanted to check if anything else would come up. ↩︎
Mind you, I’m an old hand at this low-resource stuff, so I usually install
zram-configand (very occasionally) tweak swapping to keep this sort of thing under control. ↩︎
Bash for Windows (aka Windows Subsystem for Linux) is not a solution for me in many regards, but even if it was I would not run Windows as my personal environment – out of the reasons that originally brought me to the Mac, one that definitely still holds is the need to run something else other than what I have at work, if only to keep having first-hand experience of other things and an open mind. ↩︎
I’ll need to check the specs on Intel’s integrated graphics, but I think it’s perfectly doable as long as I don’t plan on going beyond 60Hz. Since I don’t game, there’s no need to look much farther. ↩︎