Switched to Windows from Linux — why, how is it and how to make it better?
Why?
Last December I had to buy a new computer. I was using MacBook Air and MacBook Pro for the last 2 years and they were pretty awesome computers. I was looking at new MacBook but macs with butterfly keyboard got a lot of bad press and since I use this computer also for work I wanted something that is reliable. I started looking at computers where I could install Linux since from what I heard compatibility with Linux got a lot better. After viewing some different laptops I decided to get Dell XPS 13 9360 with 8th gen Intel CPU since it looked like speedy enough machine that is easy to carry around.
After getting the machine and installing Ubuntu straight away I wasn’t really happy. In the work department everything worked perfectly but if I wanted to watch some movie or just slack off on YouTube I had problems with codecs or drivers. These problems were especially seen during watching 4k video on YouTube or Vimeo. Other issues I had was regarding Bluetooth and problems that did occur during wake up after suspension. Another thing is the state of most applications in the Linux ecosystem — most of them are not nice and there aren’t many good alternatives since not much companies see Linux as the relevant business target.
Some time ago I heard that Windows have the thing called “Windows Subsystem for Linux” (previously called Bash on Windows) and you can run Linux programs inside Windows! I thought that I could just try that and check how it performs. I didn’t really use Windows for last…4 or 5 years so it was interesting how much the operating system has changed during that period.
Where am I?
The installation process was a lot nicer than I remember from Windows 7. Fluent design system used in Microsoft products is quite appealing to me and I like it. After some little problems with WiFi adapter (windows itself didn’t have drivers for my exotic piece of hardware), everything is working perfectly fine. Installed all basic tools using ninite and then all fun began. I enabled WSL on my computer and installed Ubuntu 18.04 and damn, seeing bash inside windows is pretty dope. Finally, I wanted to check how programming could work in such an environment so I configure ruby, elixir, node, and python using asdf version manager and all worked perfectly. Well, almost all.
Small quirks
I had pretty much only three problems:
- I have Windows 10 Home which means I can’t use HyperV. HyperV is a technology in Windows operating system that speeds up virtualization. It’s only available in Windows 10 Pro and Enterprise editions. Fortunately, there is an option to use docker-toolbox (which runs in background inside VirtualBox VM) and configure Docker through environment variables in Bash for Windows to use VirtualBox VM as a server for Docker. After all, I recommend Windows 10 Pro with HyperV since most of WSL news are about the experience that one can feel on Windows 10 Pro.
- File editing didn’t work as I expected but Scott Hanselman explained that perfectly in his video.
- For some reason I was too lazy to debug, RabbitMQ inside Docker container was dropping connections with the app I work on. Not really sure if that was an issue of RabbitMQ and Docker itself.
Performance
Regarding the performance, it’s really good. CPU bound tasks are doing as fast as on native Ubuntu or Ubuntu inside a virtual machine. The only problem with performance is storage speed and access time so if you do a lot of heavy I/O stuff then WSL may not be for you.
One way of speeding things up is making exclusions in Windows Defender RealTime scanning but this may not be a good idea since this leaves security loopholes. It’s enough for me for day to day work
Tools
Now on MacOS or Ubuntu, you have a lot of different terminal emulators to choose from. iTerm2 is a pretty much a standard replacement for the normal terminal in MacOS and in Ubuntu, there are many different solutions like terminator, Gnome terminal and many other. In Windows, there are many options as well but I didn’t feel any of them being really great as iTerm on Mac. Closest I could find was HyperJS which is based on Electron. It still has some issues but it’s moving forward quite fast so hopefully, it will get better and better as times goes by. The important thing here to mention is that ZSH distribution such as oh-my-zsh doesn’t work great on WSL so it’s better to use something lighter like slimzsh or use bash instead.
Chocolatey is another important thing. If you have ever used homebrew on Mac or any package manager in Linux, you know how awful is the process of searching for an app on the web or app store, installing it and finally using it. Chocolatey is a package manager for Windows — it allows to install programs and tools straight from the command line.
I recommend to check out Dieter Bohn from The Verge recommendation for 7 utilities that can make your life easier over here and Owen Williams blog post over here.
I think Im gonna stay
I use Windows as a daily driver for work and after-work-stuff for more than a month and I don’t really see myself coming back. Windows is a lot more polished than it used to be and all open source movement in Microsoft in the last couple of years is pretty amazing and is really showing off. What do I wish from WSL in future? Better I/O speed really and that’s pretty much it.
And I just hope that PC producers won’t start building computers that break because of dust. Please.