Moving to Linux
Part 3: Installation and day-to-day use
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
Overall, installation went very smoothly. I had only minor issues with getting my corporate machine to boot from USB, and with my NVIDIA graphics card.
Secure UEFI is a pain
I first installed Ubuntu onto my main Microsoft dev box, which previously booted to Windows 10. It was a major pain messing with the UEFI to get it to boot from the Ubuntu USB stick. My home machines didn't have these problems, and booting from the USB stick was very easy.
Part of the installation process asks you if you want to install third-party drivers.
This option is unchecked by default. Since I didn't fully grok the implications, I went with the default. That was a mistake.
The result was a very unstable system with frequent freezes. The reason being that I have a modern NVIDIA graphics card, and multiple hi-res monitors. The open-source drivers simply don't work for this; the propriety drivers are required.
To me, this is an example of old-school Linux thinking hampering a consumer product. I get the open source philosophy involved here, and I understand the advantage of being 100% open source. But in this case it's much more important to get a working, stable system by default. When things crash, people give up very quickly.
On the positive side, it was very easy to fix. Just hit the Windows Key and type "drivers".
I didn't make this mistake on my second machine.
The Windows Key
In My life in operating systems I talked about how the Windows Key doesn't work very well for me on Windows anymore. To recap, the main problems are:
- Hitting the Windows Key and then immediately typing sometimes misses the first few letters typed, especially in a remote desktop.
- I frequently no longer find what I'm looking for even when it captures what I'm typing correctly.
So it was fantastic to find that this Windows Key muscle memory works perfectly on Ubuntu! It works like it used to on Windows--I just type and more often than not I find what I'm looking for. For example, see above for how I used it to install additional drivers by intuitively hitting Windows and typing "drivers".
Most of my other muscle memories for keyboard shortcuts also work on Ubuntu. For example, I've been using Alt-Tab to switch applications without even thinking about it. This really helps when coming from Windows.
In the old days, finding and installing applications on Linux was a major pain. I certainly don't want to be compiling myself and resolving dependencies just to install everyday apps. Thankfully, things are much better now. Ubuntu makes installing apps easy, as well as keeping them up-to-date.
These are the applications I've been using day-to-day:
- GNOME Screenshot
- GNOME System monitor (to watch my cores working(3))
- GNOME Terminal
- GNU Image Manipulation Program (GIMP; for all images in these posts)
- Remmina (for remote desktop to Windows)
- JetBrains Rider
- SimpleScreenRecorder (for capturing screenshot videos(3))
- Microsoft Teams
- Visual Studio Code
I wasn't expecting to find Dopbox or Spotify(4), so this was a very nice surprise. Also, the built-in screen capture works great, and GIMP is now much more complete and easy to use than it used to be.(5)
I have also used LibraOffice for the few times I need this kind of office application. It was fine.(6)
Jekyll is where things started to go a bit old-school for me. I ended up compiling the tools I needed locally. And managing version conflicts. As I mentioned above, I don't want to do this.
Now I realize that I likely didn't find the correct instructions, or misunderstood something, and that Jekyll installation could have been much smoother. Nevertheless, for me, it was a pain.
High DPI and multiple monitors
I use multiple monitors with different resolutions and orientations at both home and work.
Windows has put a lot of effort into support for this and it now works very well. At least by default, Ubuntu with GNOME is not nearly as good. For example, Ubuntu tends to open new applications with strange sizes and locations.
That being said, a little bit of monitor reorganization got me to a place where I was happy. I'm also hoping there is better support available in Linux if I go outside the Ubuntu defaults.
.NET Core SDK
As covered in part 1, I do most of my day-to-day development using C# in .NET Core.
The .NET Core SDK was trivial to install on Ubuntu. Nothing else really needs to be said; I installed it; it worked.
Likewise, installing SQL Server Developer Edition for Linux was also very easy. In fact, it was much easier than that last time I tried to go through the torturous installation process on Windows. There is no LocalDb on Linux, but I don't miss it at all. Developer Edition works better for what I do.
As I have mentioned several times in these posts, I am a big fan of IDEs and spend most of my development time using one. On Windows, Visual Studio is the de facto standard for C# development, but Visual Studio is not available for Linux.
Visual Studio Code has great support for C# and runs very well on Linux. It's also great as a general text editor, especially for markdown. But it's not a fully-featured IDE in the vein of Visual Studio.
Luckily, JetBrains Rider is such an IDE for C#, and it runs extremely well on Linux. This isn't a post about Rider, so I won't go into details, but I have been exceptionally happy with it. I love programming, and Rider is a joy to use that makes my coding time both fun and productive.
I used the JetBrains Toolbox to install Rider and it has been happily keeping it up-to-date for me.
Git runs just fine on Linux, as is to be expected given its origins. I'm fairly good at git on the command line, but I would also sometimes use TortoiseGit on Windows. Lately, even on Windows, the built-in git support in Rider and VS Code has meant using TortoiseGit less. I rarely feel the need to leave Rider to do anything with git these days.
I've also been happy with GitKraken for the times where I needed a bit more power.
Microsoft Outlook is kind of the elephant in the room. As of now, I am still using remote desktop to my Windows machines when I want to use Outlook--which is every day at work. I am planning to try the web application, which I have been assured is much better than it was years ago.
I'm very reluctant to use a third-party Outlook client. Again, this may now work well, but I've been burned in the past. Outlook is so vital to my day-to-day work at Microsoft that I'm very wary of anything messing this up!
If you're lucky enough to have both Windows and Linux machines under your desk, then Remmina makes remote access to Windows really nice and easy. Just make sure to enable font smoothing in the Remmina options.
Running Windows in a virtual machine would be another option for Outlook if you don't have a spare Windows machine.
Basically, my experience as a C# programmer on Ubuntu has been very good. The final post in this series summarizes my findings in more detail.
(2) I also installed Midnight Commander for old times sake. It looks exactly the same as it always did! Some thing change. Some things stay the same.
(3) For example, see all my cores being used.
(4) Me: This is Spotify running on Linux on my new computer with an optical digital connection to the receiver and output to my subwoofer and Klipsch speakers! Wife: That’s impressive, sweetie. But you know what would have been more impressive? If you had put these dishes up!
(6) I'm not a Microsoft Office power user. I use PowerPoint, Word, and Excel occasionally, but I doubt I have used any of the new features added in the last 10 to 15 years. Outlook is a different matter.