Grayscale profile picture

Patrique Ouimet

Senior Product Engineer

Why I switched operating systems

Fri, May 18, 2018 10:16 AM

Introduction

Why I switched operating systems? In this post I hope to explain my reason behind switching operating systems to provide insight for new developers making decisions on which operating system to choose.

Caveat

I use my home and work machines both for web development, so my opinion is biased towards that.

Early development

I was fresh out of college, and in college we used Windows. So it felt natural to continue to use Windows for my work and personal projects.

Using Windows was also reinforced by the fact that my work at the time used a Windows Server with IIS.

After a while I started realizing that most production servers ran a version of Linux, mostly Ubuntu, and my work was one the exceptions. This was also around the time I started reading a lot of articles and tweets about how your development stack should be as close as possible to your production stack. So I started tinkering around with Ubuntu dual booted on a Windows machine.

Mid development

At this point I started my second job and was given a laptop which had Windows 8 on it. So I continued to embrace Windows as my development environment but still wanted to tinker with Ubuntu, so I installed it to make it a dual boot machine.

The more I got familiar with Ubuntu the more I realized the power it had over Windows. The ease of installing packages and extensions with apt-get blew me away, I was hooked. I wanted to give Windows a chance to prove me wrong so I googled apt-get or apt equivalents which brought me to Chocolatey a Windows package manager. It was okay, but just didn't have the wide variety of packages apt-get had. After my work got a little more involved and we upgraded our stack we started using things like ElasticSearch and Redis. So to be as close to my production environment I attempted to install them, at the time the most current version of Redis was not available for Windows, so you had to run off an old version which is not ideal. We also started doing image manipulation with imagick which was also a headache to install the most current version and sometimes they were just not available.

A lot of people were raving about virtual machines, so I gave it a go. I started by using Homestead, a Laravel built Vagrant box for development. At first it was okay and worked as expected. Later on when things started to get more involved with NPM and cache busting, I started realizing that the front-end wasn't loading the latest output from NPM. I then realized if I waited a few seconds, or minutes, the new files would eventually show up on the front-end. I did a little digging and tried getting NFS working (NFS on Windows was not a great experience for me either). It seemed faster, but there was still instances where I'd update a view file or a JavaScript file, alt-tab back to the browser refresh and it hadn't updated.

At this point, I felt I had no choice but to switch to Ubuntu. At the beginning using Ubuntu felt like development on steroids. I needed an extension for PHP sudo apt-get install php-imagick done. No fiddling with ddls or nonsense that is needed with Windows. The great part here too is that it's ALWAYS the most recent stuff since most servers run some version of Linux, the packages are kept up to date.

Later development

At this point (year or so into second job) I feel like I'm a new developer, I'm not wasting time fiddling with things I shouldn't have to.

Now the bad parts. Ubuntu does not have the same application support other operating systems do. For some reason at this point my work started demanding a lot of Excel manipulation and image manipulation. The obvious solutions here for me at the time were Libre Office and Gimp. Libre Office does a good job imitating Microsoft Office, but it lacks some of the ease of use. I eventually figured out how to do everything in Libre Office that I did with Microsoft Office but it was annoying.

And now the annoying parts. This was the point where browser compatibility became very important (because of a client as most things are driven by in a start up). I took point on updating everything to be compatible with a wide range of browsers including Internet Explorer 9 to Internet Explorer 11, Edge (current), Firefox (current), Chrome (current), and Safari (current).

Testing Internet Explorer and Edge wasn't too bad, I had to load a virtual machine which you can get from their website. Not my idea of a great testing experience, but it worked. Then I looked into testing Safari. Now the problem with Safari is you can ONLY install it on macOS or iOS devices (used to be able to install it on Windows but they stopped supporting it). So we had an extra iPad Mini in the office which I ended up using to test Safari. It was okay but as the issues got more complex it was very difficult to debug as I didn't have access to the console and inspection tools.

Foolish development

At this point the browser compatibility had become less relevant but I was still annoyed by the fact I couldn't debug certain problems quickly for Safari.

Now before I go any further, I was always against Apple before this. I didn't like that they charged absurd amounts for equivalent hardware in Windows machines. I still think it's ridiculous.

So foolishly I switched back to Windows. It was around this time that the Creators Update for Windows 10 Pro (I'm part of the Windows Insider program) came out and it came with Subsystem for Linux. I was excited, I could have the power of apt-get on Windows and have applications I missed for work like Microsoft Office and native testing for Internet Explorer and Edge. I was so excited about this I even wrote a blog post on how to setup LEMP within the Subsystem (http://patriqueouimet.ca/post/setting-up-windows-subsystem-for-linux-for-laravel-development-lemp).

Enlightened development

I eventually caved and agreed to work on a Mac (Macbook Pro 2017). Let me point this out BEST DECISION EVER. The whole experience feels optimized for development. Let me just enumerate the good points:

  • Brew (this is 1000 times simpler than apt-get and Chocolatey)
  • Microsoft Office is supported
  • Test Safari desktop
  • Test Safari on iOS devices through Xcode
  • Sequel Pro (the best lightweight SQL tool I've used and I've used: MySQL Workbench, Navicat, Sqlectron, command line)
  • Test Internet Explorer and Edge through a virtual machine

It's the all in one package. I have access to all the tools I use frequently and I can test ALL the browsers on one machine. Don't get me wrong I know testing on the device in question is always better (i.e. Mobile Devices, Internet Explorer, Edge) but this gets me 99% of the way there.

Conclusion

That's it! This was a long process, but I'm happy where I ended up. I do want to point out that if Ubuntu had everything available (Microsoft Office and Safari testing virtual machine or native), I would likely give it another shot and same with Windows 10 (as it has Subsystem for Linux). Thanks for reading!

Hope you liked my article, please leave comments and share if you like!