Developing on Windows

I am at my third day of trying to set up my home development environment.

A few months ago I bought a desktop computer for a crucial task (gaming). It was a decent deal, a refurbished, pimped up older office Lenovo: i5 CPU, 700 GB SSD storage, 16GB RAM, and a GeForce 1050Ti with 4GB memory. I may use it for machine learning tasks if I get into it, and in general I was hoping that a powerful PC with a proper mechanical keyboard and a good 24” display will make developing pet projects somewhat more fun, maybe even easier. Boy, was I wrong.

The physical aspects are great - but what about the OS?

I started by experimenting with a virtual machine powered by VirtualBox. Easy to set up, easy to customise, easy to re-install from scratch, or choose a different linux distro - but a pain to work with. The GUI is extremely slow, no matter how much RAM you give it. Switching and copy-pasting between host and guest is always cumbersome. SSH-in into the VM works okay, but the performance is still not the best. All in all, not a good option on the long term.

I then installed Ubuntu on the bare metal so that I would be able to dual boot Linux and Windows. This started out really well, Ubuntu’s performance was truly great. But at some point, booting Ubuntu started to take minutes (apparently it’s a known bug with 18.04), and after a while, it did not boot at all. I really didn’t want to spend weekends re-installing Linux distros, so I hastily removed Ubuntu, not without messing up the master boot record. Because of this hiccup, I was unable to boot Windows either. After much despair, frustration and an angry Saturday afternoon, I got Windows back. No more dual-boot for me, thank you.

I then looked at developing on Windows proper, maybe with Cygwin, and some Docker. But it turns out Windows 10 Home does not really support proper virtualisation. So much for Docker. The Docker Toolbox is yet to be tried - maybe that can work.

I then looked at Vagrant. Vagrant is reasonably easy to set up, except that I spent hours trying to connect to CentOS on a non 80 port - switched to Ubunto and it just worked. It has reasonable performance if you give enough RAM to it. But it had its annoying qualities - I honestly can’t remember the point that motivated me not to pursue it more. I think it can be an OK choice too, but I was really not happy with it. I dislike PuTTY and PowerShell too and try to avoid them.

As a last resort, on a Saturday evening, with a Bloody Mary in my system, I had a look at Ubuntu for Windows (aka WSL aka Windows subsystem for Linux). For some reason I rejected this option in the very beginning of my quest, but I turned back to it. And it just worked. I cannot really say that it works without bugs (at some point Ubuntu just did not start. Running it as Administrator solved it - is that a feature?). But it works much better and with less hassle than all the others above.

I am feeling a bit defeated by technology. But maybe that is okay. It makes me more curious. I would like to have a better understanding of all these things, learn about them from the ground up.

But what reassures me, as I write these lines from bed, is the most comfortable, user-friendly machine I ever owned: an old, beaten-down Macbook Air, that I bought already used, years ago. Pounding away on its perfect keyboard, it never disappoints. Silently, it works, without a fuss and without pretence.

Written on September 15, 2018

If you notice anything wrong with this post (factual error, rude tone, bad grammar, typo, etc.), and you feel like giving feedback, please do so by contacting me at samubalogh@gmail.com. Thank you!