I don’t own a MacBook Pro and I never will! I also don‘t mess with Windows as the idea of running antivirus and using Microsoft’s terrible terminal is very unappealing to me. I’m a Linux guy! No no, don’t click away just yet! Lemme tell you why I continue to love Linux and prove that it can be the perfect OS for any developer. If you‘ve never used it as a desktop OS then you probably have heard horror stories about how difficult it is to keep running. That is a thing of the past! Linux is a fantastic desktop OS with a ton of great software that gets easier for the non-initiated to grasp with each release.
As a quick peek ahead of what is to come in this post and to tie in the title a little better, I'll go ahead and state that my $1000 dell laptop outperforms the MacBook Pro issued to me by my employer in every possible way and costs less than a third the price. It all has to do with the lightweight nature of the Linux OS, and I will go into more detail below.
A Little Backstory
If you are only here for the reasons to use Linux, go ahead an skip this backstory section.
My first experience writing code was on an old Apple IIC. My uncle gave me that computer with a ton of 5.25” floppies loaded with games and software and a stack of magazines about computers. At first, I thought “Ooh, a new way to play games!”, but that eventually got old and I wanted something else to do. One day I flipped through one of those magazines and saw some screenshots of a game. I figured out that the code for that game was in the magazine. All I had to do was figure out how to get to where I could copy that code over and I could save this game to disk and play it whenever I wanted. Free games! After some trial and error, I figured it out and before I knew it I was playing a terrible text-based game that was basically Battleship except with water balloons. I continued to enter the code for more games, some of which had graphics and could be played with a joystick. After several weekends of coding out games, I was comfortable enough to try to tinker. I resized elements, changed colors, and even created new stages. This was my informal introduction to programming in the BASIC programming language, and an Apple computer enabled was responsible for it. My teenage years hit, and I ignored that old computer. Then my high school offered some programming classes. I immediately signed up thinking I would be a pro. While my experience may have helped me a little with that class, it wasn’t by much considering I was now learning how to write C++ on a PC running Windows NT. What a different experience! I took every programming class my high school offered and even began college as a computer science major where I continued writing C++. That early experience writing BASIC on a Mac no longer seemed that important and PCs seemed like the future to me. It was about this time that another uncle became successful in starting a software company. This uncle told me to learn Visual Basic as he thought it was the future. I figured he must have known what he was talking about so I learned VB in my spare time. It seemed evident to me that Apple computers were for casual users and PCs were for folks that wanted to get something done.
The following years I kind of abandoned programming while I pursued a career in music. I was a big believer in pursuing my passion so to not have any regrets later in life. I occasionally got a new computer here and there, but it was always a cheap PC of sorts and I used it mostly to surf the web and make flyers. After several years of this pursuit, I began to feel like I should “become an adult” and figure out what plan B was so I wasn‘t working a low-paying job the rest of my life. I gravitated back to technology, but this time I chose to study for some desktop technician and network engineering certifications. I didn’t finish college and had little desire to go back, but these certifications were cheap and something I could accomplish on my own time with nothing more than some books. Several years passed and the day finally came where I could use my newly found knowledge. I went to work for IBM as a support technician. If you’ve ever worked a corporate job before, I was basically the IT guy that was always walking around fixing anything and everything that was connected to the network.
I worked that IT job for almost six years. During that time I noticed that certain types of tickets showed up frequently. I thought I should find a way to automate those tasks to make my life easier. After some googling, I realized that I needed to be writing shell scripts and VB scripts to fix these issues for me. Before I knew it, I had folders full of batch and VB scripts to solve a whole array of problems remotely. This eventually led to me learning how to create a desktop application to give an interface to this collection of scripts. Once my boss found out that my crazy level of productivity was because of an application I wrote, he sent word up the chain and I was eventually asked to write documentation on the app, create an installer, and share it with my team. Now I was being encouraged to write code as part of my job and I still saw no practical use for a Mac in my life.
During this time, I had a friend that wanted to get all the CISCO certifications he could get his hands on. He had just become a father and my wife and I just became parents too. Couple the new experience of parenthood with the love for technology and we ended up hanging out quite a bit. He showed my Ubuntu 8.04 one day while I was at his house. I had heard of Linux and loosely knew what it was, but now I was seeing that it was much more advanced than I thought and a viable option as an OS. I was very interested! I went home, burned an installation disc, and installed Ubuntu on an extra desktop I had lying around. Before I knew it, I was trying different distributions of Linux and installing Ubuntu on other people’s computers telling them it was a safer, more secure option for them and was easy to use. It also breathed life into old computers that struggled to run newer versions of Windows. At this point, I was content using older hardware and thought “People that spend tons of money on computers are either hardcore gamers or suckers.” Spoiler alert, I still feel that way to some extent! I became a Linux fanboy.
I kind of hit cruise control for a few years. At some point, it became glaringly obvious to me that my team and my position were in danger of being replaced by thin clients and the fact that the client I was supporting was restructuring their own internal IT teams. We were expensive to have walking around on all their sites and they wanted to lower the bottom line. I freaked out a bit as I was making a respectable wage in this role, especially for the small Texas city I was living in that had an insanely low cost of living. After considering many options for a new career and even considering moving to different cities to continue my IT career, I realized that I had been writing a lot of code and enjoyed it. I did some research and found a few boot camps to get into web development. I thought since I enjoyed writing code and had made a few websites in the past for some side money, it made total sense for me to go to a boot camp and get familiar with modern web technologies. I applied, did a few interviews, was accepted to MakerSquare (now called Galvanize), and started to plan how to get this done. I sold off half of what I owned, moved my wife and kiddo in with my dad, threw the rest of what I owned into storage, and was just about ready to leave. There was one problem; MakerSquare told me to bring a Mac! WTF! Seriously? I spoke with them and found out that I could also bring a laptop running Linux, but I would get no Linux specific support if I had any problems installing dependencies or setting up dev environments. Well, I was an arrogant IT master at this point so I wasn‘t too concerned. My laptop was already running Ubuntu so I was good to go. Still, I was blown away to learn that so many web developers used Mac. What was I getting myself into?
Fast forward 5 years and I have used all 3 operating systems in a professional environment as a web developer. Currently, I have a MacBook Pro that my employer issued to me. At home, my personal laptop and several other computers I have are running Ubuntu, but I also have an older laptop running Windows 10 and a Mac Mini running Mojave. Ubuntu is always my go-to, but I have a Windows machine around for the rare occasion that Windows is needed for something. My Mac Mini is used mostly for recording guitar and drums and printing custom covers for the games cases I use to store my video games. The point is, I have a lot of experience with all three operating systems now, but Linux is still my first choice.
Why Do I Prefer Linux: The Things Not Directly Related to Development.
There are a lot of reasons I prefer Linux. My intentions here are to list off some of these reasons with a little bit of additional info explaining my position. Also, I hope to let more people know what Linux has to offer. It’s not the archaic, super advanced beast that so many people think it is. Desktop Linux distributions have come a very long way over the years and should be considered by more people in my opinion.
It is more secure.
The basic architecture of Linux lends itself to better security. There is no registry, like in Windows, to be corrupted by malicious software. For a piece of software to access anything in your filesystem, it must ask for your root password. If you didn‘t run something that should be asking for your password, don’t enter your password. Simple. It does have a firewall and even antivirus software that can be installed and, while not that necessary for most people, all of it is free. Plus, since there aren‘t a lot of people using Linux, it isn’t targeted by hackers in the first place. I’m not going to lie and tell you that Linux is bulletproof, but it is arguably the most secure operating system you can run.
It is open source.
“Open source” has become somewhat of a buzzword. In a nutshell, “open source” means that the original source code is made freely available to be modified and distributed. For Linux to be an open source operating system, this means that anyone can look at the code, make changes, and share those changes. The first point is huge because being able to view the source code means that if there was anything in there mining your data or doing anything potentially undesirable, someone would have noticed it and let the world know about it. There has been a lot of concern about the amount of data Microsoft collects through Windows 10 and I’m sure Apple is guilty of this to some extent. With Linux, you can choose what data is collected or disable all data collection and know that there is no hidden code somewhere collecting your data anyway. It also means that Linux is free.
There are some distributions of Linux that are intended for enterprise or business use that are not free or completely open source, but they are few and far between. Besides, why would you choose one of those versions when there are so many free, open source options out there unless you want paid support options?
Linux is whatever you want it to be.
Surely you have complaints about some small details of your chosen operating system. Surely. Wouldn’t it be nice to change the color scheme completely or move the window buttons from one side to the other? You have this freedom in most Linux distributions. In fact, you have WAY more freedom than that!
Want to remove an application that came with the initial OS installation? Have at it! You can install or uninstall anything you want. Linux doesn‘t force you to keep apps on there unless they are absolutely necessary to the core operating system functionality. On a Mac, you are forced to keep FaceTime, Safari, iCloud, and SO many other applications even if you aren’t using them. Windows forces you to have Mail, Edge, Windows Explorer, and a long list of other applications too. With Linux, you can even replace your file manager. Nothing is off limits!
The more advanced customization options go very deep as well. Want to nit-pick the power settings down to the smallest, crazy details? Go ahead! Change your default terminal application, replace the entire desktop environment with a different environment to completely change the look and feel of the interface, or add the weather to your top panel. The sky is the limit. If you want to change something and are willing to Google it a bit, you can change anything to work any way you like!
Also, there are many Linux distributions out there with different feature sets. Most come with different combinations of default desktop environments, package managers, applications, and more. Some distributions lean toward keeping you on the bleeding edge while others are slow to include new packages to keep things stable and compatible. I’ve used several distributions over the years and liked things about all of them. I go back to Ubuntu over and over because it is very stable and has a lot of the software I want to install immediately available without having to add many other software sources. I learned a while back that I prefer simplicity and stability over living on the bleeding edge or being able to brag that I use a super advanced distro.
Other distributions I’ve used and would recommend checking out:
- Manjaro (rolling releases are nice and I found Manjaro to be stable and easy to use. I'm sure I will install Manjaro again someday.)
- Arch (you have 100% control over the installation process to make Arch exactly how you want, but I had to do too much OS maintenance to keep things running smoothly after software installations and updates)
- Mint (Linux on training wheels. It is great for someone new to Linux, but just to dumbed down and vanilla for my tastes.)
- Fedora (I don’t like DNF/RPM and it is too bleeding edge for me)
Linux is FAST!
Linux is crazy fast! It’s a well-known fact and something I appreciate about it. There aren‘t a bunch of startup applications, the UI itself is more lightweight than Windows and Mac OS, and the resource management is just top-notch. If you think your current machine is snappy and quick, try a decently specced machine running Linux.
Sure, you can opt to run a heavier desktop environment in Linux and pile on a thousand applications to run during startup, but that isn’t the norm. By default (unless you are running KDE), a Linux desktop is the most lightweight desktop OS available. It simply doesn’t need a lot of extra processes running to provide a nice experience.
Because of the lightweight nature of Linux, this also means you can run it on very old hardware and see performance gains. Also, since it is built to run on such a variety of hardware, you generally don‘t have to worry about compatibility issues or search for drivers to install.
I hate Apple.
I hate Apple. Like seriously hate them. Apple makes fairly good products, but they really aren‘t any better than anything else out there and they want WAY too much for them. Let me explain my position.
Apple hardware is hyper-focused on what it looks like. When I think of what laptop I want to be my primary machine for writing code, I place external appearance last on my list of priorities. I view computers as a tool, not a fashion accessory. Now if they looked super sleek, were thin and light, AND outperformed everything else at that price range then I would consider buying Apple products. That is simply not the case. My current laptop is a Dell Inspiron with an 8th gen i7, 16GB of DDR 4 RAM, a 500GB SSD, 1920x1080 touchscreen display, and all the ports I could ever want to have. When I spin up a development environment for a side project, it is compiled and running the server long before the MacBook Pro issued to me by my employer can get the job done. I paid a whopping $1000 for my personal laptop too. Basically, it cost less than a third of what a MacBook Pro costs and outperforms it in every way.
Apple products also have the wrong features. The new MacBook Pros thermal throttles the hell out of the i9 they stuck in them because the case is just too thin and the CPU can’t stay cool enough (yes, even with the patch they pushed). USB type-C ports are nice to have, but the adoption of that standard is slow to take over and USB type-C docks are still pretty pricey. Gimme more ports! High DPI displays on small laptops also don‘t make any sense to me. Why slam a 2K, 4K, or 5K display on a tiny screen and make the machine work harder and use more battery to use all of those pixels when, at any size under 27” in my opinion, you are not really going to tell a difference in pixel density over 1920x1080? Apple is good at adding these features, hyping them up, and making you believe you need them when really you are better off without them.
I’m not a fan of Apple’s software either. Safari is garbage, iTunes is a crime against humanity, and so many other apps aren‘t useful unless you are fully a part of their ecosystem (and I am not). Mac OS itself is OK, but there are a lot of aspects of the operating system that took me a while to get used to and I still am not a fan. I also don’t like the amount of control they have over their own app store. How they screen their apps and take such a large chunk of the sales is both anti-developer and anti-consumer. They tell you that they do this ensure that you only see quality applications, but that is hot garbage! Apple Maps is not high-quality software. I’ve also noticed a fair amount of spammy stuff in the App Store.
For me, I am more concerned about getting good bang for my buck, and Apple devices are not good in this department. Why should I be excited about spending more than triple what I could spend on a good laptop from the competition and ending up with something that underperforms? Because it is sleek looking, thinner, and is somewhat of a status symbol? Those aguments simply aren't appealing enough to me to justify the extra expense.
I know that there is actually some good 3rd party software available for Macs that developers commonly use, but I’ll address that in the software focused part of this post.
I'm also not a fan of Windows.
Windows has seen some high points over the years, but it has seen so many low points I just can‘t bring myself to like it anymore. When I worked in IT, we joked that with Windows you only used every other major release. Windows XP was fantastic at the time (after they fixed some things). Next, they released Vista which was a dumpster fire. Then Windows 7 came out, and it redeemed Microsoft with a solid and sleek OS offering. Windows 8 was next and was universally hated. That brings us to Windows 10 which has a lot of redeeming qualities. Still, the mystery data they are collecting, the holes in their security they have never been able to fully patch up, and the catastrophic issues with their updates system are inexcusable.
My biggest hangups with Windows 10 is that, in 2019 and after so many years of making Windows, Microsoft still hasn‘t figured out how to make Windows substantially more secure. It seems like they almost don’t care. In reality, I think they are just married to an old architecture with too many security flaws at its core but they can’t scrap it and do something completely new because it will break backward compatibility with software. I don’t want to do virus scans and pay for anti-virus software every year. While Windows was my main OS, there were a few times that my debit card info was stolen and used to rack up a bunch of fraudulent charges. Thankfully, my bank caught it both times, and I got my money back, but I feel pretty certain that both occurrences happened because I had a virus. I’ve also had to wipe a few of my own machines and reinstall the OS and everything else from scratch because I had a virus and things were never the same after my antivirus said it removed it. These security issues need to be resolved.
I also don’t feel that Windows lends itself to being developer friendly. The default Windows terminal is crap! I always look for Cmder, Emu, or git-bash as soon as I sit down in front of a Windows machine. Then I install Chrome and the OS nags me to try Edge and to switch my default back to Edge. Once I begin installing things like Node, Python, or Ruby, I inevitably run into pathing issues and have to dig through the unintuitive Windows settings to find the environment variables section once again, remember that Windows uses backslashes in paths, and add the necessary entries to get everything working. It’s a hot mess.
I feel that Microsoft has really been trying to change its image and make improvements to their products recently, but it isn’t enough for me to come back yet. I respect their effort and am rooting for them to make Windows a fantastic OS someday. If and when that day ever gets here is yet to be seen.
Why Do I Prefer Linux: The Things Directly Related to Development.
I can keep this section a bit shorter since I’ve already covered so much. Let me reiterate some of the things I’ve already mentioned since they are directly related to why I prefer Linux as my OS for development.
- It is faster/better performance.
- There are no pathing issues like with Windows.
- You can use any terminal application you want and the default that comes with most distributions isn’t bad either.
- You can customize EVERYTHING. This also means that you can tweak the way things behave or look to maximize your productivity.
Now for some more reasons I haven‘t yet mentioned:
- The server you deploy to is probably running Linux so developing in Linux means you have a very similar environment which can help eliminate surprises when you deploy.
- You can replace bash with zsh, fsh, or any other shell you wish as your default shell.
- Things like Node, Python, Ruby, PHP, NVM, etc integrate seamlessly with no additional setup required.
- Apache is likely already installed and nginx is just one install command away so you can even set up your computer to run as a web server if you really want to test your full deployment including your apache and nginx configs.
- Contrary to popular belief, there is a ton of great software available for software development in Linux.
- You can easily tweak every last detail of your config environment.
There are more reasons I could list here, but I think that is enough to make my point without going off on a tangent.
The Selection of Software on Linux
The number one reason I hear other developers claim they don’t like Linux is the software. I’m not going to pretend like Mac OS and Windows don‘t have a slight advantage here. That would be ridiculous. A lot of very popular commercial software isn‘t available on Linux, but this is starting to change a little and anything that isn’t available yet has a great alternative you can download for free.
Here is a small list of software I use and the need it satisfies:
Code/Text Editors and IDEs
There is no real tradeoff here unless you happen to use the full MS Visual Studio suite or something proprietary to Mac. Most of us don’t do this though.
Here are the popular editors available for Linux:
- VS Code
- Sublime Text
- WebStorm (and all of the other JetBrains IDEs)
- Aptana Studio
I know Photoshop and Illustrator are the big players here. While you can find tutorials to install them in a Linux environment using WINE, I usually just lean on the alternatives available natively in Linux. If you are more of a designer then this is a much bigger deal to you. If you are more development heavy and you just occasionally need to make an SVG icon or do some small edits to an image, the alternatives do the job and then some.
I will say that I’ve heard a lot of people say “I hate GIMP” or something along those lines. I used Photoshop for years for various things, but I was able to learn GIMP and have grown to prefer it. I won‘t claim that it was the easiest transition, but realize that after we grow comfortable and familiar with a certain application, the competition feels alien and inferior to us until we give it enough time to learn how they work.
- For image editing, I use GIMP. It is a powerful, full-featured image editor that can do almost anything Photoshop can do after you learn how to use it. It's not as powerful or easy to use as Photoshop, but it gets the job done.
- For SVGs and vector graphics, I use Inkscape. Again, there is a learning curve here, but it is a very capable vector graphics program.
- For palette generation and color picking, I use Gpick.
Everyone likes the set of tools they’ve found and adapted to using over the years. Many of the same tools are available in Linux and there are also some solid alternatives as well.
- Postman is available in Linux for API testing.
- DockStation is what I use to manage Docker containers.
- GitKraken is available for Linux for your visual Git client needs.
- Chrome, Firefox, Brave, Chromium, and many other browsers are available.
- Termius is my choice for a graphic, configurable SSH client.
- NVM can be installed with one single command and is my choice for managing Node versions
- Docker, MongoDB, Java, and many others can be added to your software sources meaning they can be installed easily and will receive updates with your normal OS updates.
- I even use a Python driven command line tool called "theFuck". Whenever I type out a command and press enter just to find that my command had a typo and didn't execute, I just type the magic word (guess what that might be) and "theFuck" suggests what it thinks I was trying to type. Then I can just press enter it the command runs.
There are a lot of other popular applications worth mentioning that are available for Linux. There are also some pretty solid alternatives for this category as well.
- Spotify - because you’ve got to have tunes while you code.
- Slack/Discord/Hipchat/Skype - because you’ve got to be able to quickly communicate with others.
- Albert - if you use Alfred on Mac, this is sort of a clone.
- Mailspring/Thunderbird - a nice email client.
- Steam - the best way to play games on Linux.
- Caffeine - to keep your screen awake.
- Shutter - take nice screenshots.
- Simplenote - a multi-platform note taking app.
- Dropbox - sync your Dropbox files.
- OpenDrive or Insync - sync your Google Drive files. OpenDrive is free and Insync is paid but is easier to setup with more features.
- LibreOffice - your MS Office replacement that works with the same file formats.
You can’t forget that now so many apps have great web clients as well.
- Microsoft OneNote
Chrome apps install as normal applications in Linux so you can launch them from your app launcher of choice. It is also worth mentioning that I use an NPM module called Nativefier to make executable Electron wrapped versions of some webpages I frequently use like Android Messages. This gives me a desktop icon and a separate window when I launch these types of apps and sometimes that is what I want.
Give Linux a Try!
If you just consider the security, open source nature, customization, performance, and that most Linux distributions are free and come with 99% free software, it’s a fairly attractive option. Then when you look at the popular software available and the solid list of alternatives to some of the major commercial software out there, I feel like it becomes even more attractive. Don‘t get me wrong, if you HAVE to have Sketch or Photoshop then you might be better off sticking with whatever OS you are currently using. There’s no reason to ignore Linux these days. It has come a very long way and gets better and better. I’ve been using it over 10 years now and have seen it go from a very basic yet very complex to use OS to something that literally anyone could adjust to quickly and use daily.
If you want to try Linux without making changes, you can create a bootable USB and boot into it to take a test drive. Just know that the full experience performs better.
Hopefully, this will convince you to at least give Linux a look in the future. Who knows, maybe it will be your favorite OS too?