Migrating a developer’s desktop from macOS to Linux
As Linux continues to inch towards its famous yet tantalisingly out of reach “year of the desktop“, it’s inevitable that web and software development professionals in increasing numbers are moving away from using macOS or Windows in order to make Linux their main ‘daily driver’.
As owner of ZigPress I’ve recently made the switch from macOS to Linux (having switched from Windows to macOS several years ago – anything to avoid Windows 8). Using macOS (and interacting with Linux hosting servers) gave me some command line experience which has definitely proved beneficial.
This post isn’t about hardware, or even the distro I chose, but rather the software tools that I use every day as a web developer: which Linux apps I selected to replace macOS ones, and how well they do the job.
But first, let’s at least acknowledge which distro I chose.
From research, I knew I wanted a Debian or Ubuntu based distro, and I knew that (for now) I wanted a desktop environment based on Gnome. I wanted speed and stability, a reasonable degree of customisability, and an easy installer (not being a disk partition expert).
When I read about Pop!_OS Linux, the STEM-centric Ubuntu derivative Linux distribution developed by US computer maker System76, I decided I had to try it, and I found that it was a pleasure to use, even on a spare Celeron laptop which ran Windows 10 like a tortoise wading through setting concrete. It’s reasonably fast, looks good (apart from the default system font), is highly configurable, has a good installer, and it generally gets out of the way and lets you do what you need to do.
I had been looking for a way out of Apple’s walled garden without taking the retrograde step of reverting to Windows, and here, finally, was a Linux distro I felt I could live with.
Other advantages of Pop!_OS stem from its Ubuntu base. This means there is a huge amount of supportive content on the web, in Reddit and various forum sites, giving useful answers to almost any problem you’re likely to encounter. It also means that there are packages of almost every Linux app available, since Ubuntu’s user base is so large.
When the time came to upgrade from my old MacBook to new (non-Apple) hardware, there was no question that Pop!_OS would be my distro, and the 20.10 version was duly installed as soon as the new laptop was unpacked. After installing Gnome Tweaks, adding some fonts, playing with the settings and connecting to the office server (Daisy the Diskstation), I was ready to start installing apps.
The Web Server
There are many ways you can get Linux to run a web server (and associated services like a database). For developers like me who need PHP and MySQL, you’ll want a fairly traditional LAMP stack, which you can achieve in these ways:
- Command-line install and configure each package manually (Apache, MySQL, etc)
- Command-line install a combined ‘meta’ package containing all the necessary packages
- Install an integrated environment manager such as XAMPP
- Install a commercial specialist package like Flywheel Local.
You could also take the virtual machine route with Vagrant but that’s not how I roll.
On the Mac I had always used an integrated environment – first MAMP, then XAMPP – but I wanted more flexibility. In the end I chose number 2 and did a sudo apt install lamp-server^ at the command line. A few moments later my Apache web server was installed and running, with PHP 7.4 and MySQL 8.
I then tweaked the configuration so that its main websites directory moved to my home directory (for ease of taking backups). I also had to install a couple of PHP extensions before WordPress and Grav would work, but this was easily done from the command line.
Since installing the server I’ve found it to be absolutely rock-solid stable, which is more than I can say for MAMP and XAMPP on the Mac.
The Desktop Apps
The Code Editor
When I switched from Windows to Mac a long while back, I took a long time to settle on a coding environment. I would try a different editor every few months and swear it was the next best thing. Until another one came along, which I would try and then promptly fall in love with.
Eventually I did settle, and it was Sublime Text that persuaded me to stop editor-hopping. At the time it was better than Brackets, VS Code, and Atom, and I find a snappy, lightweight editor is always preferable to a lumbering behemoth like Eclipse or Idea.
So I installed Sublime Text onto Pop!_OS, pasted my license code, and prepared to just work normally. But I couldn’t. On Linux, Sublime has some shortcomings compared to its Mac version. For instance, the context menu on the folder tree is missing most of its items.
It kept irritating me, to the point where I knew I had to find something else. A load of searching and experimentation later and I’m now using Atom, which is now far better than when I first tried it, and which gives me everything I need and am accustomed to. And file operations (rename, move, delete, etc) are instant (on Sublime on the Mac, they were dreadfully slow).
The downside is that Atom is owned by Github, which is in turn owned by Microsoft, but since it’s open source, any hidden telemetry would be quickly exposed.
Miscellaneous Coding Aids
I found I had to install Composer, NPM, SASS and Compass as they weren’t pre-installed. Easy job though. Oh, and I had to set up new keys for Gitlab.
The Database Manager
This was perhaps the most problematic app to replace.
On the Mac I used Sequel Pro, which is one of the nicest database tools I have ever used. In fact it’s one of the nicest desktop apps I’ve ever used, period. After using it for years I still can’t believe it’s free software.
On my Linux desktop I wanted something with the same simplicity but a similar range of features. When trying SQL Workbench, DBeaver and Valentina, the phrase “lumbering behemoth” again sprang irresistably to mind. That was not the type of solution I wanted.
What Beekeeper doesn’t have (yet) are various administrative features like create/drop database, add user, etc. You have to do it with SQL statements, rather than just clicking a button as with Sequel Pro. But to be honest this limitation is simply reinforcing my SQL language skills. So I’m happy with Beekeeper Studio and am looking forward to seeing how it evolves.
The Mockup Design Tool
On the Mac I used to use Balsamiq Mockups to produce wireframes for projects. Balsamiq is a really nice tool and I wondered if I would find anything like it for Linux. After a bit of searching I came across Evolus Pencil, an open source app from Vietnam, which is actually even easier to use than Balsamiq. And it’s free.
The Vector Image Editor
This was very easy. I’ve never been willing to pay the Adobe tax in order to use Illustrator, and have used Inkscape for as long as I can remember. The Linux version of Inkscape runs even more smoothly than the Mac version.
The Raster Image Editor
As with Inkscape, I was already using GIMP on the Mac (it feels similar to my old Windows favourite, Paint Shop Pro, and I’ve always hated Photoshop). GIMP on Linux is even better since Mac releases are usually a couple of versions behind.
Please note that it’s physically impossible for me to mention GIMP in an article without also including the words “bring out the gimp”.
The FTP Client
Another easy one: I used FileZilla on the Mac, and FileZilla on Linux is (as far as I can tell) absolutely identical. You can even copy across your config file so it remembers your connections.
The Daily Browser
A couple of months ago I was wrestling with this issue on the old Mac. I ended up with Firefox Developer Edition for various reasons.
Pop!_OS comes with Firefox installed, and since a non-Chromium browser is always my preference, Firefox is now my daily browser on Linux. That was easy.
Of course, as a web developer I have to test on Chromium-based browsers as well, and my choice for that is Brave. On Linux you have to install Brave via the command line but it’s only a couple of copy-pastes.
The Office Suite
Since Pop!_OS comes with LibreOffice, and since I’ve used LibreOffice happily for as long as I can remember, there’s nothing more to say here.
The Information Manager
Along with what seems like half the world (judging by their Twitter feed), last year I became a convert to Notion, a versatile information management app that lets me manage freeform notes, tables and other data in a structured and visual way. It has a “block editor” approach (Gutenberg done right?!) and is a wonderfully intuitive tool to use.
So when setting up my Linux machine I went to Notion’s website to download the Linux version I felt sure would be there. But what’s this? No Linux version! Only the web version! Oh no!
When I did a search for “notion desktop linux” to see if there was a roadmap for a Linux version, I found that someone had already built a Linux port using the Notion for Windows source code. Fantastic. So now I have Notion Desktop running on Pop!_OS and all is right with the world.
The Cloud Sync
When I ditched Dropbox, Google Drive and Microsoft OneDrive in favour of Mega last year, I did it after checking that Mega had a Linux desktop sync app as well as its Mac and Windows apps. So this wasn’t a problem. I installed the Mega Desktop Sync app on Pop!_OS and within minutes all the synced folders I had on my Mac started to appear on my Pop!_OS machine and gradually filled themselves with all my files. Nice easy way to migrate 100Gb+ of data without lifting a finger. Mega on Linux seems rock solid and has given me no problems whatsoever.
The Email & Calendar Client
By the time I got to email and calendar, I was quite tired, and I knew that I could simply migrate my Mozilla Thunderbird profile from Mac to Linux, so that’s what I did. And Thunderbird looks better on Linux than it does on Mac. A word of warning: if you install Thunderbird on Linux using the Flatpak, your profile folder won’t be where you expect it and migrating profiles becomes problematic due to permissions issues. Installing with the .deb installer solves this problem.
The Communication Tools
On my Mac I ran Skype (because it’s the only video calling app with decent echo cancellation), Signal, and Element. Happily all three of these have a perfectly good Linux implementation and they were installed without issue.
On my Mac I used the OpenVPN client to connect to my own private VPN which sits on a Digital Ocean droplet somewhere in Europe. I use this VPN to connect to client systems when their security requires a known static IP.
I tried the command line version of OpenVPN on Pop!_OS but found it fiddly. Then I found this article which integrates the Linux OpenVPN client with the Gnome Settings app and lets me control my VPN tunnel from the top menu bar, just like I did on the Mac. Perfect.
The Password Manager
I’ve used Bitwarden on my Mac for the last couple of years, and the Linux desktop version is identical to the Mac version. No issues.
The Leisure Apps
A good music player is essential for any developer. On the Mac I used Clementine, which was one of the few Mac players that allowed you to sort your albums chronologically within Artist. Vital if you’re a music lover with a large collection. So I tried Clementine’s Linux build but couldn’t make it work properly. The Pop!_OS app store recommended Lollypop (which is designed for Gnome), and sure enough this has proved to be a really great app, with flexible navigation options and simple controls. It also handles my bluetooth headphones perfectly.
So there you go. A an macOS web developer’s desktop rebuilt on Linux with very few problems or compromises.
The one thing I miss from my Mac? Column view in Finder. That’s all.
The choices described in this article represent a few days of researching, installing, testing, migrating data, but it really wasn’t too onerous. There are some apps that I’d like to install and configure differently with the benefit of hindsight, and I’ll do that when I have time.
I’d also like to change the “title bar brown” colour that Pop!_OS uses, but it seems that needs a custom theme.
A word to the wise: there are often a number of ways to install a Linux app – the command line package manager (apt in the case of Ubuntu-based distros), the graphical package manager (Synaptic for Ubuntu-based distros), a .deb package, a Flatpak, or a Snap if you’re using Ubuntu itself.
My preference is always to use apt on the command line if I can (often you have to add an extra repository – PPA – to the package manager first but app sites usually give good instructions). If I can’t use apt, then I’ll look for a .deb package which Pop!_OS will install for me using the delightfully named Eddy. I try to avoid Flatpaks because they waste so much space and sometimes put their settings and data in unexpected places, and Pop!_OS doesn’t offer Snap (though if it did, I’d avoid it for the same reasons I avoid Flatpaks).
A final word: if you’re moving to Linux as a software developer, the biggest issue you’ll face (probably every day) is file and folder permissions and ownership. Initially it will seem as if Linux is going out of its way to be obstructive, but as you search for and find answers, the pieces of the puzzle will fall into place and dealing with it will become second nature.