For many years Windows has been considered "bad for programming" if you don't develop in a Microsoft stack, like .NET. The main alternatives are Linux and macOS. The thing is not every developer can adapt easily to Linux, or can afford a Mac. Sometimes you just want all your software to run without a dual boot, VMs or compatibility layers (like Wine for Linux). And that's where Windows enters in.
Windows has lots of hardware drives that can be easily found, has countless software made for it, and of course, games. But still, some say it is really bad to develop on Windows for a couple of reasons:
There is no reliable package manager (like APT or Homebrew), which makes harder to install your programming language of choice, for instance.
The native command line shell is not as good as the good old Unix shell.
To maintain the best of both worlds - Unix and Windows - people usually use Windows with a Linux VM, which can cost lots of CPU and memory. How to keep the best of both worlds without virtual machines or dual boot?
The solution: Windows Subsystem for Linux (WSL)
The Windows Subsystem for Linux is a compatibility layer for running Linux binaries natively on Windows. In other words, you can run Linux distributions on Windows without virtual machines or dual boot. That means you can easily install packages (such as rbenv, node, git), run a web server inside WSL and still write code in your Windows environment with your code editor.
This Windows 10 feature is still evolving, and being improved each update. Of course, it doesn't replace a full Linux setup, but it fulfills most of the developers need.
I've been mainly using Windows Subsystem for Linux (WSL) Debian distribution to develop Ruby on Rails and NodeJS applications. I code on Visual Studio Code inside Windows and run the server on WSL. If I wanted to, I could even run my editor inside the Linux environment.
WSL Isn't Perfect (Yet)
Even though WSL is good, it is not perfect yet. There are some performance issues, especially with I/O. To solve these problems, you'll probably have to spend some time searching and tweaking settings for your use. Once you have configured your environment, you should have a smooth, convenient and stable hybrid (Windows + Linux) development environment.
As I mentioned before, WSL is getting better and better each Windows update, and I/O has been being a major WSL concern, shown by the last patches.
Windows Isn't Bad Anymore
Yes, Windows was bad for programming before. But that is definitely false in 2019. Microsoft has been making up the lost ground for non-Windows developers.
If you want to give WSL a try, follow this Microsoft guide. It should be up and running in a couple of minutes. To obtain the maximum performance, disable Windows Defender while using it.
Don't forget to follow me on Twitter and check out my other posts.
Top comments (20)
I was blown away by WSL -- really the best of both worlds.
But developing on Linux or Mac is still a much better experience -- things "just work" at a much higher rate. Way less config/compatibility issues.
AFAIK Docker still doesn't play nice with WSL.
Running your GUI development tools on one OS and running the code on another can cause some issues you just don't have to deal with on Linux/OSX
I've been using the Docker CLI through WSL for about a year now and it's rock solid. You can easily configure it to interface with Docker for Windows and volumes just work out of the box after configuring your /etc/wsl.conf.
From your POV, it feels like you're running Docker directly from WSL. Things are really fast too. No problem at all compiling tons of CSS / JS through Webpack, or running large Rails, Flask or Phoenix applications with volumes.
I detailed all of that at: nickjanetakis.com/blog/setting-up-...
So it is not really "developing in windows", but "developing in Linux in Windows".
I don't get it. Distros like Ubuntu easier to understand than macOs. I have the feeling that is more a matter of being intimidated, rather than not understanding Linux.
For me it's matter of drivers. Graphic drivers still suck for me on GNU/Linux any distro I tried. I currently ended up with Manjaro but my laptop has switch-able graphics and Intel one that's only one being used by my distro as I don't do any graphics related stuff shows weird lines in terminal which appear and disappear while I type or click on terminal.
I still prefer it to develop than WSL as it's much easier for me to use any distro to develop than Windows much less overhead when setting up stuff and getting tools ready but when I wan't to just browse, read, watch films online I switch to Windows because of "eyes" experience. Some tools work poorly with scaling on Manjaro KDE (popups are not visible, fonts are to tiny as they are not being scaled etc.) but then again Windows blurs some stuff. If I didn't think MacBooks prices where blown out of proportion I would consider buying it.
I will agree that heavy graphic computing is not something I would develop on Linux, but that is really just a small part of the programming world. Most of the programming does not need advanced graphic and the Propietary drivers are more than enough
Not what I was pointing out. Simple daily usage of GNU/Linux is pain when you get all sorts of lines across terminal just for clicking on it or typing a command. Even watching video or some KDE animations when bringing up start menu have some hiccups. On the other hand WSL has some issues with tools for development. This has nothing to do with "small part" this is actually the huge part of programming world and why a lot of devs now use mac.
I have not experienced such issues in the past 7 years. Something is not normal if that happens to you. If you'd like help about it, please feel free to contact me, I'd be happy to help you if I can.
I love Linux but I also use Windows. WSL just brings the convinience of not having to dual boot, which seems to cause strange quirks in Windows 10. For me, WSL isn't quite enough to not have a Linux system just yet. WSL2 looks promising though.
WSL is not really a solution to be honest. But main point remains that languages like Ruby have too many issues on Windows. I spent days fixing gems issues. You really need to switch to Mac or Linux for that.
I actually develop Ruby on Rails applications in a daily basis with WSL. You might just have to spend some time setting it up and tweaking, due to IO issues.
I use docker and puppeteer extensively. There wasn't any day I did not use them. After some problem with
now
, I thought to give it a try. I ran VSCode and many other GUI inside WSL. Was really excited.Critics:
I like what WSL did so far. I tested it when it was first released, I tested it 2 days ago. Spent almost 20+ hours on it over 2 days and result? I am disappointed and hopeful.
Linux has Wine, Windows has WSL. Both are just compatibility layers IMO, I better not have high hopes for them.
I should mention, I have a desktop and laptop. The desktop has dual boot, and even GPU passthrough inside linux to windows on KVM. I cannot dual boot my laptop yet. Everything is up and dandy on desktop, so...
Why? If I travel around, who is gonna setup all these? 🤷
I'm working as a Java developer and I have tried to use Linux on Windows, that was an awful experience. I don't want to repeat that experience.
Any Linux distro or MacOS is a better solution for development than Windows.
When you start thinking about cloud - they are running on linux 99%, consider this.
Here your missing package manager: chocolatey.org/
For the rest i totally agree.
As someone that grew up exclusively with Windows, I didn't realize how annoying it was to install what I needed for programming until I put Linux on a hand-me-down Macbook (the HDD was dead, so I'm booting from a Thumb drive).
Now I'm on a Google Pixelbook as my personal device of choice and after resetting the Linux Container multiple times for a post I was working on, I can say I really appreciate the ease of getting up and running on Linux.
If I go back to a Windows device outside of my work machine, I'll definitely be giving WSL a go!
It still sucks, there are issues, like someone pointed out docker or Running a GUI, 777 permission to files on windows, etc. I ended up coding on windows but using a coder instance on vultr or digital Ocean, or c9 on aws
Some performance issues? I would say it is more or less unusable for most of the work I normally do on my Mac or Linux Workstation.
NTFS already has some performance issues so deciding to bolt a Linux filesystem emulation layer on top of that doesn't really help the situation.
If you use Node.js and run 'npm -i' for a normal sized project, the operation might take five minutes in WSL and fifteen seconds in Linux (on the same HW).
Same thing goes for compiling a large project in C/C++.
I had high hopes, but it's so utterly slow that it's unbearable to use (and yes, I have disabled Windows Defender for the folders in question).
I have been using Linux in a virtual box. It does a good job when I do not develop in Microsoft stack.