Ask HN: How is Windows for developers nowadays?

13 points by CJefferson ↗ HN
I don't want any of the new Macbooks, but every time I have tried to run Linux on a laptop I've had nothing but pain. Therefore I'm tempted to use Windows as my primary OS.

I alternate between doing POSIX and Windows development, so I'm tempted to run Windows 10, with one of "Bash on Windows", cygwin, or a Linux VM.

Is anyone using Windows as their daily machine, while doing POSIX coding? How does it work out?

19 comments

[ 1.8 ms ] story [ 87.7 ms ] thread
a linux VM works just fine. with all advances in linux integration, there is no full POSIX support yet. even cygwin is a pain in the ass
WSL is okay for basic needs (I can do Go coding with the ACME editor just fine) but you will find it lacking in the long run. There are some bugs here and there, the need to build tons of programs from source (the apt library is quite outdated) and there are tons of missing libraries. Incredibly promising but I wouldn't recommend it in its current state for professional work.

I honestly think Windows is great for development, but for that you need to embrace the whole OS and live in .NET land. If you need POSIX and commercial applications such as Office, Skype and Adobe you're currently better off with macOS.

> (the apt library is quite outdated)

It's exactly the same as that of Ubuntu, is it not?

It is 14.04 LTS and packages are missing.
What packages/types of packages? I haven't noticed anything so far, but I've mostly installed Python related stuff and various libraries.
It's based on ubuntu 14.4 trusty, which is 2.5 years old at this point. Apparently beta versions use 16.4 xenial so that will be updated at some point. However, it does not automatically update and the current recommendation is to save off anything you need, uninstall, and reinstall.

Alternatively, you can sudo editing your /etc/apt/sources.list file to add an entry for xenial. I did that to replace hopeless obsolete versions of gcc (4 -> 5) and cmake (2.8 -> 3.2).

So far, all of my problems with WSL have been ubuntu.

It sucks for python for example. Currently I either use a vm or linux.
Care to elaborate what some of the pain points are?
The lack of an open Fortran compiler makes installing a lot of scientific packages difficult.
You mean gfortran ? It works just fine on Windows, you can find a binary if you install MinGW or the one provided by equation.com.
Some things are very hard to compile (or to find binaries) like scientific,cryptographic etc. Other things like uwsgi don't work at all. celery 4 won't be supported for windows. You can't `pip install wheezy.web` (too lazy to debug). Some (most)things do work on cygwin but it still kinda sucks.
python and ruby are still troublesome in windows
What do you mean by POSIX development ?

Yea well, I work for a .NET company and therefore I'm on windows on a daily basis.

It depends a lot on, what kind of development I'm doing, for example if I work in Visual Studio on some C# code everything is just fine, integration between SQL-Server/VS/ASP.NET-MVC is just great but when I have to work on web projects where npm is involved or commandline in general, it's a nightmare.

If found that the only useable shell on Windows is babun[0]. Executing Ruby or Python scripts is also not good at all and therefore I just use powershell for glue scripts.

[0] https://babun.github.io

By POSIX, I mean standard command line POSIX APIs. In practice, things that run on Mac / Linux / BSDs. They often don't build on Windows due to a lack of pthreads, or fork. In some cases, I'd like to make these apps truely windows compatible (unless Bash on Windows gets so good we can just ask people to install that).

I hadn't heard of babun. It looks like a much neater cygwin distro, I will give it a try.

If you're asking about being able to do the same things on Windows as you could on Linux, then it takes a bunch of work to set up, and has some substantial holes in it. You basically have three options: cygwin, Linux VM, or the new Linux subsystem (https://en.wikipedia.org/wiki/Windows_Subsystem_for_Linux)

I use a mix of cygwin and "native" tools depending on whether the language has multi-platform support. It's good enough for most purposes (Python stuff mostly), but not so good if you want POSIX threads in your C++ code, and so on.

But, for example, if you're trying to do game programming, arguably the tooling on Windows is substantially better.

Basically, it's maybe 70% good and highly depends on what tools you need.

To be honest, no operating system is perfect for both POSIX and Windows development at the same time. But windows is very workable in a lot of situations, and when it's not, I run a VM. I don't believe that you will be able to get around that (without dual booting, Remoting, etc...)

There are just a lot of development tool sets that aren't based around working in windows. In that same respect though .net development is improving on *nix, it's clearly not something you want to do for production yet.

You can just use virtual box or VMware, or use use putty and log in to server.
Sadly Windows is still a second class citizen when you are developing for Big Data.

There are lots of Java stuff that would be machine independent but in fact rely on native libraries that you cannot find easily.

The machines I use for development usually run some sort of UNIX or UNIX-like OS (i.e. Linux). Sometimes I have to use Windows as well though for development.

From direct comparison I can tell that Windows still sucks for general-purpose software development (if you develop Windows software you'll be fine, obviously):

Installing, maintaining and running common development tools takes considerably more effort. Many of the tools used in software development come from a UNIX background that often just doesn't quite fit the Windows way of doing things. The Windows command line - though greatly improved in recent years - is still playing catch-up with its UNIX equivalents.

Basically, what one commonly ends up with to make Windows usable for development at all is installing some sort of UNIX environment (Cygwin, Git Bash etc.).