Linux on the desktop as a web developer

I’ve been using Ubuntu as my primary home desktop OS for the past year and a half, so I thought it would be a good time to write up my experiences. Hopefully this will be interesting to other web developers who are currently using Mac or Windows and may be Linux-curious.

Photo of a Dell laptop with an Ubuntu background and a monitor, keyboard, and mouse

My basic setup. Dell XPS 13, Kensington trackball mouse (yes I’m a weirdo who likes trackballs), Apple magic keyboard (I still prefer the feel), and a BenQ monitor (because I play some games where display lag matters)

Note: in this post, I’m mostly going to be talking about Ubuntu. I’ve played with other Linux distros, but I stick with Ubuntu because if I have a problem, I can Google it and find an answer 99.9% of the time.

Some history

I first switched to Linux in 2007, when I was at university. At the time I perceived it to be a huge step-up over Windows Vista (so much faster! and better for programmers!), but it also came with plenty of headaches:

  • WiFi didn’t work out of the box. I had to use ndiswrapper to wrap Windows drivers.
  • Multi-monitor and presentations were terrible. Every time I used xrandr I knew I would suffer.
  • Poor support for a lot of consumer applications. I recall running Netflix on Firefox in Wine because this was the only way to get it to work.

Around 2012 I switched to Mac – mostly because I noticed that every web developer giving a conference talk was using one. Then I became a dual Windows/Mac user when I joined Microsoft in 2016, and I didn’t consider Linux again until after I left Microsoft in 2018.

I’m happy to say that none of my old Linux headaches exist anymore in 2020. On my Dell XPS 13 (which comes with Ubuntu preinstalled), WiFi and multi-monitor work out-of-the-box. And since it seems everything is either an Electron app or a website these days, it’s rare to find a consumer app that doesn’t support Linux. (At least, the ones I care about; I’m sure you can find a counter-example!) The biggest gripe I have nowadays is with fonts, which is a far cry from fiddling with WiFi drivers.

OK so enough history, let’s talk about the good and the bad about Linux in 2020, from a web developer’s perspective.

The command line

I tend to live and breathe on the command line, and for me the command line on Linux is second-to-none.

The main reason should be clear: if you’re writing code that’s going to run on a server somewhere, that server is probably going to run Linux. Even if you’re not doing much sysadmin stuff, you’re probably using Linux to run your test and CI infrastructure. So eventually your code is going to have to run on Linux.

Using Linux as your desktop machine just makes things that much simpler. All my servers run Ubuntu, as do my Travis CI tests, as does my desktop. I know that my shell scripts will run exactly the same on all these environments. If you’ve ever run into headaches with subtle differences between the Mac and Linux shell (e.g. incompatible versions of grep, tar, and sed with slightly different flags, so you have to brew install coreutils and use ggrep and gtar… ugh), then you know what I’m talking about.

If you’re a Mac user, the hardest part about switching to the Linux terminal is probably just going to be the iTerm keyboard shortcuts you’ve memorized to open tabs and panes. I found the simplest solution was to use tmux instead. As an added bonus, tmux also runs on Mac, so if you learn the keyboard shortcuts once, you can use them everywhere. I set my terminal to automatically open tmux on startup.

Screenshot of tmux running in Ubuntu with a few panes open

Ah, the command line on Linux. Feels like home.

Since the command line is the main selling point of Linux (IMO), it’s tempting to just use Windows with the Windows Subsystem for Linux instead. This is definitely a viable option, and totally reasonable, especially if there’s that one Windows program you really need (or you’re a PC gamer). For me, though, I don’t do much PC gaming, and my experience with WSL is that although compatibility was excellent, the performance was poor. npm install would take orders of magnitude more time on WSL compared to the equivalent Mac or Linux machine. (Keep in mind I was using WSL back in 2016-2018 though, and I’m told it’s improved since then.)

Still, for me, I just don’t find Windows to my taste. The UI has always felt slow and clunky to me, which may just be my perception, although when I read blog posts like this one from Bruce Dawson I feel a bit vindicated. (Right-clicking taskbar icons is slow! Why?) In any case, Ubuntu starts up fast, the system updates are quick and unobtrusive, and it’s not missing any must-have apps for me. So I run 100% Ubuntu, no dual-boot even.

Web development

For the average web developer, most of the stuff you need is going to work just fine on Linux. You can run Chrome and VS Code (or WebStorm, my preference), and all your command-line utilities like node and npm will work the same. You can use nvm to manage Node versions. So far, so good.

As a web developer, the biggest issue I’ve run into is not having a quick way to test all three major browser engines – Blink (Chrome), Gecko (Firefox), and WebKit (Safari). Especially now that Edge has gone Chromium and the Trident/EdgeHTML lineage is slowly dying out, it’s really attractive that, with a Mac, you can test all three major browser engines without having to switch to another machine or use a tool like BrowserStack.

On Linux of course we have Chrome and Firefox, and those run mostly the same as they do on a Mac, so they fit the bill just fine. For WebKit we even have GNOME Web (aka Epiphany Browser), but I only consider it “okay” as a stand-in for Safari. It doesn’t support some of the Safari-specific APIs (e.g. backdrop filter, Apple Pay, etc.), and it’s terribly slow, but it’s good for a quick gut-check to see if some bit of code will run well on Safari or not.

Screenshot of Gnome Web on HTML5Test showing a score of 432

GNOME Web on HTML5Test. Safari it is not.

Unfortunately for me, I don’t consider that “good enough,” especially since the vast majority of Safari users are on iOS, so that’s the platform you really want to test. And here is where Linux runs into its biggest drawback from a web developer’s perspective: debugging iOS Safari.

If you want to debug Chrome or Firefox on Android – no problem. adb runs just fine on Linux, you can run chrome:inspect on Chrome or Remote Debugging on Firefox, and it all works great. For iOS Safari, though, the best option you have is remotedebug-ios-webkit-adapter, which uses ios-webkit-debug-proxy under the hood.

Essentially this is an elaborate suite of tools that makes iOS Safari kinda-sorta look like Chrome, so that you can use the Chrome DevTools to debug it. The most amazing thing about it is… it actually works! As long as you can get the odd dependencies running correctly, you’ll have your familiar Chrome DevTools attached to an iOS device.

Screenshot of debugging example.com in iOS Safari in Chrome DevTools on Linux, showing some iOS-specific APIs in the console

Believe it or not, you can actually debug iOS Safari from Linux.

If you have a spare iPhone or iPod Touch laying around, this is not a bad option. But it’s still a far cry from the streamlined experience on a Mac, where you can quickly run an iOS Simulator with any iOS version of your choice, and where Safari debugging works out-of-the-box.

For accessibility testing, it’s a similar story. Of course Firefox and Chrome have accessibility tools, but they’re no substitute for VoiceOver on Mac or NVDA on Windows. Linux does have the Orca screen reader, but I don’t see much point in testing it, since it’s not representative of actual screen reader usage. Especially given that screen readers may have bugs or quirks, I prefer testing the real deal. So I keep a Mac Mini and cheap Windows desktop around for this reason.

Conclusion

So in short, using Linux as your desktop environment if you’re a web developer is pretty great. You probably won’t miss much, as soon as you rewire your brain to get the keyboard shortcuts right.

I find that the main things I miss these days are some of Apple’s best built-in apps, such as Preview or Garage Band. I love Preview for taking a quick screenshot and drawing arrows and boxes on it (something I do surprisingly often), and I haven’t found any good substitutes on Linux. (I use Pinta, which is okay.) Other apps like ImageOptim also have no Linux version.

So if you depend on some Mac-only apps, or if you need best-in-class Safari and iOS debugging, then I wouldn’t recommend Linux over Mac. If your main focus is accessibility, it also might not be sufficient for you (although something like Assistiv Labs may change this calculus). But for everything else, it’s a great desktop OS for web development.

Thanks to Ben Frain for asking about my Linux experiences and inspiring this blog post.

45 responses to this post.

  1. Posted by artiom on May 10, 2020 at 11:29 AM

    For screenshots try flameshot, or shutter. You can map them to your print screen key.

    Reply

  2. Posted by Creslin on May 10, 2020 at 1:07 PM

    I moved from osx to Linux couple years ago, Dockers jits work better in Linux.
    On the preview, screenshot thing. Try flameshot.

    Reply

  3. Posted by Rob Shepherd on May 10, 2020 at 1:16 PM

    My XPS 15 runs mint, perfectly adequately, more or less. I’ve been on Linux 100% for over a year and still feel like I’m in a tar pit.

    The daftest thing I miss from the Mac is the little file icon on the top bar of any application. Drag it to an email to add it as attachment, right click to go into the folder hierarchy, etc. On Linux I spend way too much time clicking about in folders, rooting for files etc.

    The file preview stuff is excellent on the Mac but quite a bit far behind on mint.

    For the life of me, I cannot get different key maps to work properly with an external keyboard that is a different layout to the main one.

    When I (frequently) unplug and re-plug an external monitor the resolution needs adjusting and I need to start shifting windows to and from
    Different monitor screens.

    The applications I really miss are Apple Mail, calendar, Backblaze backup and dashlane.
    There really is no great mail app on Linux for office365.

    Seamless copy paste between iPhone and Mac, opening phone browser tabs on the desktop, answering iPhone calls and and sending messages off the desktop are all greatly missed and I now resort to jerking about with OneDrive or Dropbox or emails to push stuff between the two.

    I run a win10 VM for office365 stuff and testing Edge.

    The XPS is noisy, the fans are always screaming (I usually have a lot going on) but didn’t notice it on the 2012 MBP (that was much lower spec)
    I think my default load was just low enough for a bit of fan and the Alu case to dissipate the heat.

    I think about moving back to a Mac everyday but don’t know if I will. The cost difference is eye watering and I don’t think they give two hoots about devs any more. Now the keyboard issue is reverted, It’s better but that touchbar crap looks terrible.

    I also have a serious dislike of Apple’s aggressive tactics for making hardware prematurely obsolete and not for locking out hardware so it cannot be reporposed. I had a really hard time when an iPad in perfect working order went to the scrap heap just because security updates had ended and apple considered it obsolete. Uuurgh, makes my piss boil!

    I can afford a Mac but cant justify giving Apple 3000 pounds for something that they already know the planned date of obsolescence which will be well before I want to stop using it.

    So I sit grumbling in my tar pit.

    Could be worse I suppose….. at least I don’t have to use windows :)

    Reply

    • Posted by Heikki Ketoharju on September 1, 2020 at 4:11 AM

      Hello! I have used Linux for 15 years and my biggest problem has been the calendar. For years I’ve used my phone as my main calendar and just synced it to my Linux desktop. The default calendar App in Gnome could be OK, but it crashes all the time. I’ve tried to use Lightning in Thunderbird, but it just feels so dated. If I just had time to build a great calendar app for Linux, I’d do it. At work, we use GSuite, so Google calendar it is for now.

      Reply

  4. Posted by Igor Velky on May 10, 2020 at 1:36 PM

    i had similar issues with lacking basic desktop functionality but i found this for screenshots:
    https://github.com/lupoDharkael/flameshot
    also in Manjaro community packages

    Reply

  5. I used to use elementary os for development.

    All goes well, but I switched to Mac later.

    Because of mac trackpad.

    Reply

  6. Linux is just so much faster. I switched from back in 2016 and I haven’t looked back since.

    Reply

  7. Posted by Harald on May 10, 2020 at 9:18 PM

    I need to debug iOS and iPadOs and therefore (for this task only) I have a Mac. I use also a few programs for which I need Windows. I believe that as a web-developer you need to be proficient with all major platforms – from time to time you always need those. My point is, despite having accumulated during my 25 years work on websites a computer museum in my office, my work horse is since 2008 Linux (primarily Ubuntu in varying forms). NOTHING else beats my efficiency and speed of work with Linux (I have modern machines with all popular operating systems, so I can tell). As a serious web-developer you have to manage (up to some extend) Linux webservers. Therefore it is a logical consequence for me to use for development the same OS which I am using for production. Otherwise it is quite difficult to get really proficient in managing a server. Especially the rise of virtual servers (e.g. in form of the Digital Ocean droplets) is just calling for a seamless integration of such servers with your command-line. I am not willing to be forced to manage differences between my development machine and server command-line all day long. As a logical consequence Linux clearly wins for my development work.

    Reply

  8. Posted by Ling on May 10, 2020 at 10:14 PM

    Have you tried using flameshot for screen grabbing? Has great post shot editing.

    Reply

  9. Posted by Ashley Summers on May 10, 2020 at 11:00 PM

    For a great screenshot tool, check out Flameshot.

    Reply

  10. Posted by foxie on May 10, 2020 at 11:00 PM

    There’s gnome shell extension for drawing
    https://extensions.gnome.org/extension/1683/draw-on-you-screen/

    And when you need to debug Safari, there’s webkit based Epiphany (aka gnome web). I used it several times as Safari replacement and it worked pretty well for that purpose.

    Reply

  11. Posted by Name on May 10, 2020 at 11:08 PM

    In my experience i think i started to use linux because always after installing it wifi been working and never needed a drivers for it. Not like in windows in that old times if you dont have drivers cd you wont be able to fast find drivers online. I remember how i been looking for lan drivers 12h before i found it. Because in those days you wont find drivers in manufacturers website.

    Reply

  12. Posted by Sridhar Ayengar on May 10, 2020 at 11:16 PM

    Photoshop? Premiere? Final Cut Pro? Lightroom? Login Pro?

    Reply

  13. […] I’ve been using Ubuntu as my primary home desktop OS for the past year and a half, so I thought it would be a good time to write up my experiences. Hopefully this will be interesting to other web developers who are currently using Mac or Windows and may be Li… Read More […]

    Reply

  14. Posted by Lars on May 11, 2020 at 12:48 AM

    Also Docker is running natively on Linux.

    Reply

  15. I find Ubuntu a little bit insubordinate if it comes to updates and the packages of apt are also a bit Poor in my opinion. Prefer to use Archlinux where you can install what ever you want and you can add multilib with AUR packages. You can still have that look of gnome if you like it and make it look like classic Ubuntu but still the process behind the packages installation is different and in my Point of view better than Ubuntu.

    Reply

  16. Posted by Eric on May 11, 2020 at 2:27 AM

    Hi,

    Nice sharing of your experience. If you like Ubuntu maybe you should have a look at Mint. It is a Ubuntu fork with efficience and performances in mind. I have switched to it a couple of years ago, after having used Ubuntu for à while.

    Nevers had a single problem with drivers or multi monitors or anything hardware related, although I have installed in on a quite signifiant number of machines, desktop and laptops, recent and old.

    I develop cloud based apps in my job, but also embedded ones as a hobby, most of them relate to rebotics or éducation. My first contact with computers was back in… 1977 😊

    With respect to annotated screenshots you could try Shutter. It does exactly this, with plenty of other convenient features. But nothing beats Gimp for more polished work, especially for illustrations to published in articles.

    Last detail: I am too à weirdo Who prefers trackballs. Mines are Kensington ones with the big ball and the ring around. I don’t remember the model name and the are more than 10 years old now. But they still work as on their first day.

    Reply

    • Posted by Eric on May 11, 2020 at 4:22 AM

      Oups, sorry for the typos and wrong words. I’ve typed the comment on my smartphone, and the virtual keyboard insists on inserting its suggestions and capitalization, based on the French dictionary and rules in my case, unfortunately. Although I checked before sending, some of them passed through the cracks :/

      My trackball is a Kensignton Expert Mouse. I’ve tried a lot of other options, starting with the conventional mouse, but nothing beats it for me.

      Reply

  17. Posted by Will Schubert on May 11, 2020 at 4:06 AM

    Yes, Flameshot is a great screenshot, and I use several times on a day. I’m software developer and started use Linux/Ubuntu a few months ago. I tried iOS and MacOS, but didn’t like it. For me Mac is like a child toy. I used Windows and I was Win Server Admin, but when Microsoft migrate to PowerShell, where I needed to re-learn all commands, just to uninstall Defender, CandyCrush, and other child pre built apps, I thought, if I will learn new shell commands (I started on 90’s DOS 3.00!) so I will learn the better shell and OS, so I migrate to Linux, and this was the better idea I have. When I need to help some Windows user, I can see how poor is Windows.

    Reply

  18. Does you experience head aches? Since your laptop position and the screen position is far for eyes, like you must tilt down you head to see the laptop screen?

    Thank you.

    Reply

  19. Posted by Dave on May 11, 2020 at 4:24 AM

    I’ve run Linux exclusively for over a decade in my small web application company the only thing I ever seem to boot into Windows (virtualbox) for is excel if a client sends me something with macros in it as librecalc just says no…Linux FTW!!

    Reply

  20. You should check out TriImage https://trimage.org/ :)

    Reply

  21. Posted by Djwaffle on May 11, 2020 at 5:19 AM

    I’ve tried many times unsuccessfully to get it working. It was never ever reliable. Updates would break it causing a reload because it was simply to much typing gibberish just to still not work. Just not a polished or stable enough OS for the average driver.

    Reply

  22. Posted by Tim on May 11, 2020 at 5:27 AM

    For Safari testing, is the Sosumi snap helpful? To heavy?

    Reply

  23. Posted by Sig9 on May 11, 2020 at 5:47 AM

    This project uses Ansible to install an amazing set of developer oriented tools onto several popular distributions..
    https://github.com/bradwilson/ansible-dev-pc

    Reply

  24. Posted by JC on May 11, 2020 at 5:54 AM

    Good article. Regard you’re comment about capturing screenshoots and draw figures, try Flameshot on Ubuntu. I’m QA engineer and use Ubuntu on a daily basis for work and that Flameshoot is awesome, if you want to capture video and turn it into Gif files, use Peek.

    Regards.

    Reply

  25. Posted by Mike Davenport on May 11, 2020 at 6:13 AM

    Good article, thanks for writing! I use Greenshot for basic screenshots where I need to annotate them with arrows and text.

    Reply

  26. I tried Manjaro Linux for a while, was useful for very basic internet access via webbrowsing with Firefox and that was about it. Went back to Windows 7 to get some real work done and use that as my daily driver exclusively.

    Can’t say I ever found Ubuntu usable at all all, and I didn’t like it’s default brown background. I prefer everything just work out of the box.

    Reply

  27. Posted by Juggalo4lyfe on May 11, 2020 at 8:40 AM

    Try using ksnip to replace preview

    Reply

  28. Nice post! I myself moved from Mac couple of years ago.

    For drawing and adding arrows etc. to screenshots there’s the Drawing app (https://flathub.org/apps/details/com.github.maoschanz.drawing) and for image compression there’s ImCompressor (https://flathub.org/apps/details/com.github.huluti.ImCompressor). Both work great and are perfectly integrated into Gnome.

    Reply

  29. I have never used ImageOptim but do pretty much the same kind of stuff on Linux with ImageMagick.

    Reply

  30. Posted by Alexander Feld on May 11, 2020 at 10:35 AM

    Try Flameshot or Shutter for creating screenshots, both allow placing arrows etc on the screenshot

    Reply

  31. Posted by Jimmy on May 11, 2020 at 10:57 AM

    How come every single article like this fails to mention some important stuff, like the complete lack of support for different screen dpi (good luck trying to run a 4k laptop screen with a 1080p external screen) or the complete lack of support for screen capturing in apps like zoom if you run Wayland (which, you might wanna run to enable gnome gestures).

    Also, even though Dell sells the xps 9300 with Ubuntu, they still don’t provide drivers for the Webcam, meaning that video-conferencing nowadays is a no go.

    I really tried to get it to run, because what works is awesome. But too much of it is broken and unsupported by hardware vendors to be a replacement option for most people and it’s a constant compromise

    Reply

  32. Posted by rbernier01 on May 11, 2020 at 12:44 PM

    I’ve been using Linux since 96 and started using Kubuntu as my go to desktop using KDE in 2001. Haven’t looked back since then. I’ve got an XPS 13 too but with a docking station.

    I specialize in PostgreSQL and I use linux containers when developing solutions for multiple platforms. Most the problems mentioned about wifi, screen & video capture etc are non-issues. Being in it for so long there’s a number of “tricks” I have learned to use when I want custom solutions on my machines.

    Reply

  33. Posted by Simon Walker on May 11, 2020 at 2:34 PM

    Linux is not a desktop environment…

    Reply

    • Posted by eric on May 11, 2020 at 4:16 PM

      Amen !!

      Not sure such an abrupt and not argued statement could help people to make their opinion. Could you elaborate and explain why you conclude this? By the way, what is a “desktop environment” from your viewpoint?

      Reply

      • Posted by Nigel on November 3, 2020 at 11:58 AM

        Linux is an operating system, it interfaces directly with the hardware. a desktop environment is higher level GUI software to launch programs, install/remove programs, organize files, configure settings etc.

  34. Posted by freg on May 11, 2020 at 3:45 PM

    I think this application might do the same q imageoptim:
    https://flathub.org/apps/details/com.github.gijsgoudzwaard.image-optimizer

    Reply

  35. The number one thing I miss from my OS X days is iTerm2. In it, I could grep (or ack-grep or ag) a codebase for a given phrase, find the file I want to open, command-click on it and it opens in my IDE.

    I’ve yet to find a terminal for linux that does this. Some vaguely support clicking on URLs, but not relative file paths.

    Reply

    • Posted by Rob Shepherd on May 12, 2020 at 2:26 AM

      I didn’t know about that iTerm2 integration, but on Linux you can call xdg-open to try and open with the default handler.

      Reply

  36. Posted by Steve on May 12, 2020 at 12:27 AM

    Checkout shutter on linux for screenshots. From memory you can apt install shutter.

    Reply

  37. Non-developer chiming in here (Database and client-server support engineer).
    At work and at home, Windows 10 with MS Office always the primary machine, it’s the corporate standard. Unwise to put everything on one machine, so I put databases on Debian, Ubuntu Server, CentOS, etc. in Oracle VirtualBox or on another compooper. Nothing wrong with multiple machines with good KVM switch.
    Always have multiple monitors, not counting laptop screen, which is too small to be of much use except to play music. Use UltraMon to improve multi-monitor experience.
    Used an Erector set to build stand for laptop. It securely holds the laptop in a position where the laptop is opened up almost all the way and held vertically, bringing the screen about one foot closer than if the laptop was set up the usual way.
    Need the best ergonomic equipment, use Kinesis keyboard and Cirque Touchpad. Laptop keyboards suck.

    Reply

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.