Ubuntu

About 15 or 16 years ago (yikes!) I was running a software training session in Florida and got to chatting with a technician that worked at that location. When he found out that I was into computers he became very excited and got out an Ubuntu live CD, put it into my work laptop rebooted it. Somehow, magically, it just worked and next thing I knew I was running Linux. I was dumbfounded. At the time I still thought of Linux as a mainframe operating system, or something that only developers or hackers used. But this was slick and easy. Within a month I was dual-booting Linux and Windows at home, and I've never looked back.

2007 Ubuntu CD cover

Ubuntu was a perfect fit for me. It fit with my desire to tinker with software, it was secure and private, and it had a great open and inclusive message and ethos. I've been running some form of Linux ever since, and have used it full time for work for the last 4 or 5 years.

Today Ubuntu is an impressive and polished product, and it's no longer the case that you need to spend hours researching drivers and tweaking your operating system to get things running. This is especially true if you buy a computer with Linux preinstalled, but if you don't the live CD and installation manager also vastly improved.

As a developer, there are a whole host of other perks that come with running Linux. I love that the OS I'm developing on matches the environments that I'm deploying software to, and that the languages, tooling, and frameworks that I'm using are also largely native to Linux. I almost never run into build issues, and I don't have those way-to-common file path or line return issues that you run into when working on Windows.

There are a few Linux tools and features that I'm especially fond of. First and foremost Bash is probably the single best feature of Linux. I'm definitely no command line guru, but just being able to easily move around, investigate files, and pipe one command to another is indispensable. Once you add in other shell libraries and plugins the command line becomes as much a part of your tool set as anything else. At the top of that list are utilities like zsh, z, htop, screen, and Vim. One of the other killer features is the package manager. You can generally get anything you need in Ubuntu without downloading and installing a package or executable. Instead you go to the Software app and search for and install it there. That doesn't sound ground-breaking, but it means that your software will stay updated automatically, that you're getting it from repositories that have been vetted for you.

fzf search
coc-vim makes Vim a full-featured IDE

With all of this said I'm definitely not a purist. Windows has come a long way. It's security model is way better than it used to be, Powershell is great, the Windows Store has many of the perks that apply to the Linux package manager, it has Chocolatey (which is like Homebrew for Mac), and it has the WSL or Windows Subsystem for Linux. It's also getting bash integration, and with containers becoming more common, a lot of my former complaints can be easily addressed. Most people still use Windows, so there are disadvantages to developing in an environment that most people don't use, it's easy to write software that's not cross-platform, so that when your co-workers or people who want to help you try to work with your code it breaks on them. Lastly, even though Linux is way easier to install and use than before, it's still a massive lift for most people to do something like resize their hard drive and work with a second OS (assuming they don't want to overwrite Windows).

But, I still feel as though I've benefited a great deal from investing time in Linux. I've never been able to spring for a full Macbook Pro, which is Linux-based, comes pre-installed, and has most of the benefits I've listed here, so Ubuntu is the perfect solution for me. I'd encourage anyone interested to check out a live CD. Try it out, if you don't want to go through the dual-boot process there are great companies like System76, Purism, or even Dell.