Moving to Linux
Part 1: Background and first impressions
A few weeks ago, I decided to move from Windows to Linux as my primary development platform. These posts are about my experience.
- Part 1: Background and first impressions
- Part 2: My life in operating systems
- Part 3: Installation and day-to-day use
- Part 4: Conclusions
I work for Microsoft on .NET Core. (However, the opinions expressed here are my own.) Cross-platform support is a key part of .NET Core and running Linux in the cloud is a key part of Azure.
So we have been targeting and testing against Linux for several years now. But most .NET development still happens on Windows and Mac machines.
Using Linux for day-to-day development will help me get a better understanding of how Linux works. In the same way that emersion in a culture is a good way to understand that culture, so emersion in an operating system is a good way to understand that operating system. In particular, I'll get a better understanding of how .NET works in non-Windows environments.
But why now?
But I've been here before--see My life in operating systems.
Beyond wanting to understand Linux better, two other things motivated me to pull the trigger now:
- I'm a big fan of full-featured IDEs. Rider brings this to Linux for .NET. I couldn't work on Linux without a good IDE.
- I'm less happy with Windows than I used to be. (More details in later posts.)
All that being said, I'm also doing this because it's a fun and interesting experience.
It's important to note that I still use Windows. I'm gradually using Windows less, but I'll always need to use it to test Windows-specific behavior in the same way as I previously used Linux to test Linux-specific behavior. Also, Outlook is hard to replace.
I was advised Ubuntu was a good place to start, so I installed Ubuntu 19.10 natively onto my hardware. I considered using WSL2 or running Linux in a VM. Those are both things that I have used and will continue to use going forward. WSL2 in particular is very good. However, for this experiment I wanted a pure Linux experience with nothing else getting in the way.
Getting Ubuntu onto a USB stick was trivially easy.(1) This is what you need to install Ubuntu, but you can also just boot into Ubuntu from the USB stick without installing anything.(2) I found this a great way to play with things safely before taking the plunge.
Part of my playing was to try to build EF Core. I was successful in a matter of minutes.
Remember this is without installing the operating system.
The most impressive part of this was the response I got when trying to use git. Windows default:
C:\Users\Arthur>git 'git' is not recognized as an internal or external command, operable program or batch file. C:\Users\Arthur>
ubuntu@ubuntu:~$ git Command 'git' not found, but can be installed with: sudo apt install git ubuntu@ubuntu:~$
And then following those instructions worked perfectly!
This may seem like a small thing, but it was very helpful to not have to leave the terminal just to find out how to install git.
Part 2 of the series is deep background on my life in operating systems. Skip this unless you're interested in old computer stuff.
In part 3 I talk about my experience installing Linux.
(1) What else are USB sticks even for these days?
(2) The tricky part is getting your machine to boot from USB stick if it has secure UEFI boot settings. On both my home machines booting from the USB was easy because I wasn't doing any of this. On my work machine it required a lot of messing with UEFI settings.