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).
Doesn’t work via keyboard. Only works by right click on Terminal window border → Edit → Copy/Paste.
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.
Also, for instance pasting this right arrow “→” doesn’t work ¯_(ツ)_/¯
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
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.
apt-get update && apt-get upgrade. You might want to find some movie to watch before doing that though.
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.
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.
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.
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.
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.
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.