Linux Subsystem on Windows for Development?

Linux Subsystem on Windows for Development?
Greek Tragedy.

Windows 10 has a feature called "Linux Subsystem" or "Bash on Windows".

A feature, that offers you access to Ubuntu-based distro with mounted filesystem and networking so you could use Linux on your Windows machine for normal-people activities like development, devops, administration and so on.

That sounds like a perfect combination for a person like me, who has a really powerful machine with Windows for gaming and wants to use that power for development-related tasks.

Unfortuntately, my experience was not very successful (October 2017).

Terminal Problems

Copy/paste

Doesn't work via keyboard. Only works by right click on Terminal window border → Edit → Copy/Paste.

See:

Unicode Support

It's sort of there, but default font in Terminal is not able to render some symbols. Especially painful if you use zsh with some theme.

Capture-1

Also, for instance pasting this right arrow "→" doesn't work ¯_(ツ)_/¯

See:

Filesystem Problems

It sort of works. But there are some compatibility issues. For instance you can't have symbols like ? in function names in Kotlin if you want to compile your code on Windows, because why not?

See:

Slow IO on files shared between Windows and Linux Subsystem

TL;TR: Linux Subsystem automatically mounts Windows drives to /mnt/ and this is exactly what you want to work with project from IDE on Windows and Terminal on Linux.

The problem is that performance of IO tasks that you run against /mnt/ from Linux Subsystem is noticeably slower comparing to direct IO on macOS, Linux, Windows.

See:

Slow Network

Try apt-get update && apt-get upgrade. You might want to find some movie to watch before doing that though.

See:

VPN from Windows breaks network of Linux Subsystem

When I run OpenVPN-based VPN client on Windows, network on Linux Subsystem just stops working. It's not just DNS issue, IPs are not resolved as well.

See:

Crossprocess Communication

Obviously, processes that run directly on Windows won't see processes that run on Linux Subsystem.

That might not sound like a problem until you start doing some work in IDE and realize that IDE doesn't see build system daemon (Gradle, Buck, whatever) than you just run on Linux Subsystem.

You can try to set up some network tunnel to allow network-based communication between IDE and build system daemon, but my guess would be that due to slow networking it's not a good idea.

Environment Setup

Let's say you want to develop for Android and/or Java.

Well, you'll have to maintain two versions of Android SDK and/or JDK, as well as project dependencies. One for your IDE that runs on Windows and one for your Terminal that runs on Linux Subsystem because Android SDK and JDK components are different for Windows/Linux and project dependencies will be saved in different folders.

Not a huge problem, but due to slow netwok — not very productive.

Keybindings

If Windows is not your main OS for work, well you'll probably suffer from productivity reduction due to different keybindings between your main OS and Windows.

Of course, it's not a problem of Linux Subsystem, but this issue alone stops me from installing Linux-based OS on a separate drive and using it directly instead of macOS.

Conclusion

If these issues don't sound like a problem for you, then go ahead and try Linux Subsystem on Windows.

But be aware, that at the time of publication of this article (October 2017) Microsoft/BashOnWindows project had 986 open issues.

issues

So, issues described here represent just a tiny fraction of possible spectrum of problems that I've discovered during couple weeks trying to use Linux Subsystem on Windows for development.

Personally, I'll keep using my 2013 mbp for development even though it's like 8x less powerful than my Windows machine, but much more productive as a development environment.