Mac Apps and their Linux alternatives - Part I: Web Development
- Choosing a Linux distro
- Finding apps to get your work done
- Taking stock and choosing replacements
The biggest challenge of switching from the Mac to Linux is of course finding the right apps to get your work done. Some applications are cross-platform, so the switch is virtually effortless. But for most Mac software you'll find alternatives at best, and sometimes those alternatives will be a far cry from what you're used to on the Mac in terms of features and polish. Finally, in some edge cases, there will be no suitable equivalent or alternative to the software you're using on the Mac, so you'll have to find a way to make do without a particular app, which might mean changing some of your workflows.
This first part of what will eventually become a series of posts is about switching my web development over to Linux. Switching over other areas of work, like writing, running my business, graphic design, screencasting and video editing, etc., will eventually follow in later posts.
That said, before you start looking for Linux apps to replace your favorite Mac apps, you need to decide which Linux you're actually going to install. Because there's not just one Linux, there are dozens.
Choosing a Linux distro
Linux comes in many different flavors, called distributions, or distros. A distro is, to quote Wikipedia, "made from a software collection, which is based upon the Linux kernel and, often, a package management system". For a user, the most differentiating and most important parts of a distro will likely be the desktop environment and the software that comes bundled with it.
In my case, I've been running Ubuntu on my server(s) for a long time, so I'm already quite familiar with this particular distro. Therefore Ubuntu will be the distro for my Linux PC, although I might swap some parts out for something a bit more powerful, like the window manager, for example. But that's for a future post.
There are some other distros that have been gaining popularity lately, mainly the Ubuntu-based Linux Mint, Elementary OS and Zorin OS, whose main focus is being more user-friendly and light-weight than the original Ubuntu. For the other end of the spectrum, there's Arch Linux for nerds and Linux pros. And there are dozens more.
My main initial goal is to get a Linux machine up and running and move my web development work over. So, for now, I'm sticking with the "vanilla" option and installing plain old Ubuntu. I might experiment with other distros later on.
A note on Ubuntu versions
With macOS, you're usually going to install the latest version your computer supports. Most of the time, there's no reason to stick with an older version, except maybe temporarily, until the worst bugs of a new major version get ironed out1, or Adobe updates its Creative Cloud suite to properly work with a new macOS version.
With Ubuntu, which version you're going to install depends on your needs. The regular Ubuntu versions are released every 6 months in April and Oktober and are numbered using the year and month. So, as of March 2017, the current version of Ubuntu is 16.10, the next version, coming out in April, will be 17.04.
In addition to the regular releases, every two years there's an LTS version. LTS stands for "Long Term Support", meaning that these versions come with the guarantee of 5 years of security and other critical updates (like hardware drivers), while the regular releases only come with 9 months. So, with a regular release, you'll always have to update to the newest version of Ubuntu to continue to get updates. With an LTS vesion, you can remain on the same base release for up to 5 years.
In general, I prefer a reliable, stable OS to always being on the bleeding edge. I only switched to macOS Sierra a couple of weeks ago after running Yosemite for over 2 years (I skipped El Capitan entirely). On my server I run Ubuntu 14.04 LTS and will probably upgrade to 16.04 LTS within the next couple of months. Since there are advantages to running the same release on your development machine and on your productive system when it comes to web development, I'm going to run 16.04 LTS on my desktop Linux machine as well, and keep the desktop and server on the same release.
Finding apps to get your work done
Once you've settled on a Linux distro, you're ready to start looking for the Linux apps that you need to get your work done. I approached this by defining all the different types of work I do and then listing all the apps I use for each respective type of work.
This approach has the advantage that it doesn't use the apps as a starting point, but rather the outcome of using those apps. That way I don't cling to any particular app and keep myself open to changing my workflows to achieve the desired outcome.
A word on web apps
One way around a lack of native Linux alternatives to Mac apps is to use web apps. While this is certainly a viable option in many cases, replacing native Mac apps, which you most likely paid a one-off price for (except in the case of Adobe CC and a handful of other apps), with web apps that usually come in the form of a subscription can become quite expensive.
Of course you could argue that one-off licenses and the upgrade fee every year or two for your typical Mac app are also ongoing costs. But I've been using many Mac apps for years without the need for a paid upgrade. Most apps continue to work even after major OS upgrades, or the developer provides a free fix. Web apps, on the other hand, can become quite expensive by comparison, as you need to keep paying for them if you want to keep using them.
Here's an example:
Popular mindmapping app MindNode costs $29.99 on the Mac App Store. Since there are no upgrades on the Mac App Store, upgrades are free of charge. Web-based MindMeister costs €6 per month on the cheapest price tier, so that's €72 a year, every year.
I haven't compared MindNode and MindMeister feature by feature, so it's perfectly possible that MindMeister has more features that justify the higher price. But my main point remains: Web apps are an ongoing cost whereas you can use a desktop app you paid for once for years.
Taking stock and choosing replacements
As mentioned previously, my plan is to initially just move some of my work over to Linux to get comfortable with the new environment. The part of my work that's easiest to move over to Linux is web development, as many of the tools I use are, due to being cross-platform, the same on Linux as on the Mac.
So here's the list of tools I'm currently using on the Mac to develop for the web and possible replacements for these tools on Linux
I switched to Atom from Sublime Text a while ago and it has since become my favorite text and code editor. It's sometimes a bit slow, but it's highly customizable and has a very active community, which means it's frequently updated and improved.
Atom is cross-platform, so I'll just move my configuration files over to Linux and install all the same plugins I'm using now. Done.
This is a handy tool that can preprocess all kinds of code, like Sass/LESS, CoffeeScript, etc. I only use it for Sass processing and automatic browser refreshing.
There used to be similar app for Linux called Koala, but it looks like it's not being actively developed anymore. So I guess I'll just have to use something like gulp or grunt to automate the preprocessing of Sass and something like guard-livereload for the browser refreshing.
ThemeKit is a tool for developing Shopify themes. It accesses the Shopify API to download theme files from a Shopify store and automatically upload files that have changed.
ThemeKit is cross-platform, so I can use it on Linux the same way I'm using it on the Mac. Done.
This is a gulp-based tool that automatically refreshes the browser on file changes that's part of my current Shopify theme development workflow. Again, this is cross-platform, so no issues moving it over to Linux.
Chrome (and other browsers for testing)
Chrome is my main development browser and I heavily rely on the integrated development tools to debug JS and CSS.
Chrome is natively available for Ubuntu, so are Firefox and Opera. For testing on Safari I'll have to resort to my Mac (or a macOS VM) and for IE/Edge I'll be using a Windows VM.
Running all the command line stuff obviously requires the terminal. I just use the default Terminal app on macOS, others prefer iTerm. My default shell is bash.
As you might expect, this translates 1:1 to Linux.
I don't upload files manually to a server that often, but if I do I use Yummy FTP.
The obvious replacement for this on Linux is FileZilla. There are others, but since my needs are simple, it'll probably do.
I don't use Transmit for actual FTP transfers, I just use its ability to mount FTP servers as local volumes on macOS. This makes it easy to edit files on the Mac as if they were local, which I sometimes use to do a quick edit in a Wordpress theme or other remote file.
On Linux, the same thing should be able to be achieved with sshfs. I haven't tried it yet, but it looks like the default method for mounting remote servers into the local file system.
I use Sequel Pro to edit MySQL databases both locally and (through an SSH tunnel) remotely.
There are several possible replacements for Sequel Pro on Linux:
Some of these are commercial, which I have no problem with. I'll try the free ones first, but if I like one of the paid ones better, I'll have no issue paying for it.
Finder or Path Finder
Most of the time I just use Finder for my file management needs. If I need some functionality that Finder doesn't offer, I use Path Finder.
On Linux I'll try to make do with the default Ubuntu file manager, and I'm pretty sure it'll meet most of my needs. If I need something more powerful, there's a plethora of file managers with varying feature sets available, which I'm not even going to bother listing here. Just google "ubuntu file manager" and try them all ;)
Beyond Compare has been kind of the gold standard of diff tools on Windows, and a while ago the developer made it available for the Mac too. I bought a license for Kaleidoscope before Beyond Compare was available for the Mac, and it's a very nice diff tool as well.
Since I already have a multi-platform license for Beyond Compare 4, I'll continue to use it on Linux. Alternatively, there's also Meld.
I sometimes use regular expressions to perform complex search/replace operations, and before I unleash them on the actual text or code, I like to test them with RegExRX.
I couldn't find a current desktop RegEx editor for Linux, but RegExr is a great web app and should meet all my needs.
I use Git on the command line most of the time, but when trying to get an overview or merging changes, a graphical Git client has its advantages. On macOS, I use Tower.
On Linux there are several alternatives:
Like with Sequel Pro alternatives, some of these are commercial. But I'll gladly pay for an app I use on a daily basis.
As you can see, the obstacles to switching this part of my work over to Linux are pretty minor. Most of the tools I use are cross-platform, and for those that aren't, the alternatives should be more or less on par with the Mac apps.
Web development of course also sometimes requires the use of Photoshop or Illustrator. There are alternatives for Linux, which I'll get into in a future post. But for now I'm just going to use the Mac for editing graphics.
I almost always wait for the X.2 version of macOS before I upgrade. The X.0 and X.1 usually have some issues that get ironed out in the first couple of weeks or months after the initial release. ↩
You should subscribe to the blog.