More and more over the years, I find myself using Linux for day to day development. And why not? Most of the tools I use are available for Linux, and Linux is free and totally customizable. But can a developer who has long used macOS for his day to day tasks cut it on a Linux system? Let’s find out.
First, let’s cover what I use in my day to day work. Being a web developer, the tools I use daily consist of:
- Visual Studio Code for my IDE. Sometimes, I use Sublime Text. But for the last year, it’s been 95% Visual Studio Code.
- Docker for virtualization of development environments.
- Slack for team communication and collaboration.
- Google Meet and the G-Suite for all of the company daily meetings and document and file sharing. We make extensive use of Google’s web apps – Docs and Sheets, primarily.
- My employers online tool is the Atlassian suite of products – Jira, Confluence and Stash. Being web based, using these on Linux isn’t an issue.
- Various assortment of command line utilities including Docker, PHP, Ruby, NodeJS, Python, MySQL and MongoDB.
- Chrome/Chromium, Firefox for browsing.
So every bit of software I use daily is available for Linux, and generally works as well as it does on a Mac. Visual Studio Code and Slack are both Electron apps, and while they work well on Linux, there’s a couple of caveats I’ll get to later in the article which you will want to be mindful of.
I first gave this workflow a test run using an older i7/6700k based desktop machine I’ve had for awhile. It was plenty powerful for what I run, and felt confident that I didn’t need a machine with a dedicated GPU, and could instead get by with something small and power efficient, so long as it had sufficient RAM (32Gb) and decent CPU performance. The Intel 10th generation i5 NUC fit that bill. I opted for 32GB of RAM (2 x 16GB SO DIMMS). I could have gone whole hog with 64GB of RAM, but I think for my needs, 32GB is plenty of headroom. I went with a Crucial P1 1TB SSD. It’s not the fastest PCI NVMe SSD in this class, but it was much cheaper than the Samsung EVO, and offered plenty of performance for a coding workstation.
I already had a couple of LG 4K Displays I was intending to use for this setup, but, as I’ll explain later, I had to use a different solution with this system.
Setup of the hardware is simple. You remove four screws on the bottom of the NUC, and pull of the bottom. You have 2 DIMM slots in which to install the RAM, and the NVMe slot for the SSD. I opted for the tall version of the NUC chassis, so I could also install a 2.5″ SSD later on if I so desired.
After installation, I powered up and installed Ubuntu Linux 20.04. Ubuntu has long been my distro of choice, and the 20.04 release is one of the best releases of this OS ever. Upon booting up, I checked that the Wifi and graphics worked OK, and then opted to do minimal install. This is one of the things I’ve come to appreciate with Ubuntu in the last few releases. I don’t need or want all the bloatware of an office suite and a dozen other tools I’ll never use. The minimal install option allows me to get the basic system and a browser running quickly, at which point I can install only the things I’ll need.
This setup was not without it’s issues. First, was my monitor. I have an LG 27″ 4K display I intended to use with this machine. Running at 100% or 200% scaling works fine. Ubuntu/Gnome has had fractional scaling for a few releases, but it’s far from perfect. Unfortunately, the area it suffers the most is with Electron apps, of which both Visual Studio Code and Slack are. Both will randomly switch to 100% scaling, which means their interfaces get really small. This can be fixed with a restart of the app, but it happens frequently, so it’s annoying.
The other issue with the 4K display happened when trying to play back videos on YouTube in 4K. They weren’t super choppy, but they weren’t super smooth either. The Intel UHD integrated graphics in the Intel NUC10I5FNH1 seem to struggle in Linux beyond a 1080p display resolution. In addition to the video issues, the UI in GNOME wasn’t smooth either. Ditching the 4K panel and instead using an older Dell 24″ 1080p display returned video and UI responsiveness to acceptable levels.
So now things are setup and running smoothly. I’ve passed my first day of using this system for work, and I’m pretty happy with it. I’m not surprised that both VS Code and Slack run so well on Linux. I had tried both of these apps on Linux prior to going down this route, since they are the core of my toolset. And of course, all the command line tools I use work just as well on Linux as they do on MacOS, even if sometimes (Docker) they are a bit more involved to install and setup.
The only area that’s currently giving me a bit of grief is with the VPN. My company uses Pulse Secure to connect to our VPN, and while there is a Linux Pulse VPN client, it relies on several package dependencies that are abandoned and have not been updated for Ubuntu 20.04. I’m currently using OpenConnect in it’s place, and while it does work, it’s not nearly been as stable and as consistent as Pulse VPN was on my Mac. I’ll post an update once I get this bit ironed out.
So far, the biggest inconvenience I’m encountering is my lack of 1Password for Linux. I use it on all my iOS devices and Macs, and have everything synced thru iCloud. Those aren’t options on Linux unfortunately. I’ve used Enpass before, and it’s an OK cross platform solution, but since I’ve ditched Dropbox for iCloud, there’s no real way to keep the Linux machines and the iOS devices in-sync.
Are you using Linux for your day to day work? What challenges are you experiencing in your workflow? Have you felt the pros outweigh the cons? Let me know down below in the comments.