Between MacOS and Windows in recent years, I vastly prefer Windows. WSL2 alone beats the pants off anything in MacOS - and MacOS had become a much more frustrating experience over the past few years.
Windows is still, to some extent, full of magic and dragons underneath... and while they're doing an increasingly good job at hiding it, it does occasionally bite you in the arse. But Windows has on the whole become a competent development environment that works very well with almost any kind of development workload - with the exception of native iOS and MacOS. Also GPU accelerated ML on Windows is still kind of sketchy.
For a dedicated backend application development desktop, I still prefer Linux. But hardware support is generally better on Windows, plus you have access to Adobe Creative Suite, better colour management, better graphics drivers, etc. and there are types of development that just aren't practical on Linux, such as 3D games, Excel add-ons, VSTs and lots of proprietary embedded development platforms don't support anything other than Windows.
On the other hand, .NET development nowadays is just as easy on MacOS, Windows and Linux.
What do you find is so much better in WSL2 vs Mac? I find when I’m using WSL2 I feel more like I’m using 2 computers since they have the different file systems (you can’t just git clone into your windows file system from WSL for example) Whereas with Mac, it’s all one system and it’s all still Unix. The rest of Mac vs Windows seems like it could be up for debate (last few Mac updates have made it feel a lot less polished) but from a purely terminal experience I’ve found Mac to be so much better since it’s all just one system. I’m switching to Windows soon so I’m really curious, what’s your workflow for dev with WSL? For example, where do you keep your repos? What editor do you use? That sort of thing.
This is the issue for me too. You can’t interact with your regular files via WSL, so you can’t use imagemagick to convert an image on your desktop folder, or subl to open a file in Sublime. You can sometimes find the folder via File Explorer but Windows will corrupt your files if you change them there.
There’s other things that annoy me like typing latency, apt taking forever to run, an awful terminal emulator with basically no customization, copy and paste often just does not work. It’s really so frustrating.
"You can’t interact with your regular files via WSL"
You absolutely can, I do it all the time. For example, you shift-click your desktop, click "Open Linux shell here" and run imagemagick or ffmpeg to your heart's content.
You can alias subl to your Windows sublime install and then subl ~/whatever will work as expected.
I don't experience any of your other problems. Apt is very quick, copy and paste works fine, typing latency seems lower than Linux (but I do have a 144hz G-sync monitor). I agree that Windows Terminal is a bit spartan, but I was never one for excessive terminal customisation on Linux either so it doesn't really bother me, I guess.
I do this sort of thing with WSL1 all the time. Unless you're dealing with large numbers of files or spawning thousands of processes (or have security software that gets in the way), it is perfectly adequate for me.
You can interact with your Windows filesystem from WSL2, though the performance is worse than the VM's own filesystem. Additionally you can access WSL2's files through the \\wsl$ share. For example, /mnt/c/windows/notepad.exe ~/file launches notepad on my Windows desktop and opens ~/file from WSL2. While the integration isn't perfect, it is usable.
The reason I prefer it to MacOS is that it is actually a real Linux kernel with all the trimmings - such as apt, docker, eBPF etc. My recent experience on MacOS is that every update seems to break Brew, which, while better than MacPorts, doesn't even work all that well to begin with. MacOS is a weird BSD with poorly documented closed source system components such as launchd. If that's your thing, it's fine - but I personally find the Mac/BSD userspace unpleasant to work with and am tired of fighting against it every time Apple decide to break my attempts to make it more tolerable.
Versus a VM it's less clear, but the integration is actually fairly good, each of your WSL2 "distros" start instantly, you can launch them to the current directory in Explorer or use them from Windows Terminal without SSHing. For the most part, it _feels_ like Ubuntu is just a part of Windows.
My workflow with WSL2 is that I keep most of my repos in the Windows desktop and use Windows versions of JetBrains' IDEs or VSCode for most of my work, but then I use WSL for docker/kubernetes, running CLI-oriented things like vim, ffmpeg, imagemagick, shell scripts, python, terraform, etc.
Plus, I have a Ryzen 5950X with 128GB memory, which isn't strictly a limitation of MacOS, but it certainly makes my life a lot better!
So you definitely can git clone into your windows file system from WSL.
There are a few edge cases that are tricky (for instance you can’t register a batch script in WSL2 as a file association handler) but for the most part it’s pretty smooth.
Because I have almost 30 years of experience using Windows, and a complex set of tooling, scripts, and utilities that I have grown accustom to. Heck the sysinternals suite alone is incredible.
Windows has incredibly good keyboard shortcut support. A small example, the context/menu key on keyboards is the equivalent of right clicking wherever the cursor is at, making spellchecking as I type super easy, I'm sure MacOS has some meta-combo that does this, but over 20 years ago Microsoft made this tiny piece of accessibility a first class citizen on their platform by starting a certification process for keyboards that included such a key.
Windows has non-borked external monitor support, unlike a slew of MacOS machines. (See, every thread on HN where some subset of people report problems with external monitors).
Windows has insane hardware support, buy whatever upgrade is on sale today, throw it in your machine, and odds are it'll just work.
Speaking of insane hardware support, my current Windows install has switched motherboards and CPUs multiple times. Pop the SSD into a new computer, boot, wait a few minutes for the OS to setup proper drivers, and off I go.
The UI is a first class citizen, not an afterthought. At no point do I have to wonder if my setup supports screen sharing.
Its media pipeline is pretty darn powerful. Per app volume control rocks, but the entire media stack can be rerouted, split, and merged, in all sorts of fun and cool ways.
The clipboard works. really well. I have actually seen the source code to the clipboard in Windows, a lot of engineering effort has gone into making it work that well.
Apps don't randomly stop working because I upgrade. Major UI utilities that reach deep into the system that I started using on Windows 7 work just fine today.
Do I have complaints about Windows? Of course. IMHO it has gotten way to large, back in Windows 2k and even the Windows 7 days, the # of background processes on a clean install was a fraction of what they are today. My start menu only opens up every other time I click it (...). And as with every other OS, reliability has gone down over the years.
But Windows isn't some half forgotten wasteland. It is the single most popular desktop OS, and for over a decade it was also the single most popular development platform.
Would I do docker based development on bare Windows? No, but I've done Android and Web development quite happily on Windows.
For reference, I have done C/C++ dev on Linux, and right now I use both MacOS and Windows for dev.
> Windows has incredibly good keyboard shortcut support.
yeah and they are all scarcely documented and basically impossible to discover. you just randomly come across them on obscure 00's era PHP forums, there's no big comprehensive list of them somewhere.
> And as with every other OS, reliability has gone down over the years.
I can run Debian or Ubuntu for weeks, even months, without rebooting. I can barely run Windows for a day or two without rebooting.
Others have mentioned the maddening and massive updates that happen frequently, and the weird application crashes and poor performance.
Windows has some cool stuff, like Powershell and .Net, but it’s otherwise too painful to use unless I absolutely must (which happens more often than I’d like these days, despite going 5 years without using windows at one point). Plus, Powershell and .Net are more readily available on Linux.
I'm unable to disagree with most of your points, but "I can barely run Windows for a day or two without rebooting." is hyperbole. If this is actually true, there is something seriously wrong with your install. Apart from that, Win10 pisses me off daily. It's insane that I harken back to the Win7 days as often as I do.
I've experienced this on many Windows machines. It's a combination of memory issues, little programs breaking here and there, forced updates, and stuff I frankly don't understand. Together, they very frequently necessitate a reboot after 2-3 days.
> If this is actually true, there is something seriously wrong with your install
This is the problem. It's very easy for stuff to go wrong with a Windows install. They deteriorate w/time. Why do you think so many times we end up just re-formatting a family member's machine? I've had to do that many times, even when malware wasn't an issue.
I've never hard to reformat a Linux machine for such issues, even though I've been primarily on Linux for well over a decade.
> I can barely run Windows for a day or two without rebooting.
Something is wrong here. I run Windows 10 for weeks at a time without rebooting. I'm typing this reply out on a Windows 10 workstation that has been up for ten days without a single issue.
OK, a day or two was probably an exaggeration, although it really does seem like that sometimes.
Probably part of the problem is that I only use Windows every 1-2 months, and then when I do start it up, it spins the fan for an hour downloading and installing updates.
That said, I really do end up with many, many more issues on Windows than on Linux. For example, I just yesterday had - out of the blue! - some Visual C++ Redistributable to suddenly go missing, and not able to open up Visual Studio Code (I'm mentoring some students who use Windows). I had used Visual Studio fine on that computer multiple times, and had never touched any of the system folders. No idea what happened to the missing library. I re-installed it and it was fine.
I end up helping family members who come to me with mysterious Windows problems. Often the problem is just that the OS has slowed down over a year or two of normal use. I've tried registry cleaners, and they sometimes help a bit, but the only real success I've had in those situations is saving their personal folder and re-installing the OS. Sometimes there is evidence of malware on their computer, but often there is not.
Never had things like that happen on Linux. Nor on OSX/MacOS. Windows just doesn't strike me as a reliable system. And that's not even bringing up the resource requirements for running Windows - I can easily run Linux on machines that could no longer run Windows without running into massive performance issues.
This isn't some pathological Microsoft hatred: I'm favorably impressed with Visual Studio Code, with Powershell, with C#, with F#, with Typescript. I'm just not impressed with Windows as an operating system. It did get more reliable after the moved the the NT kernel, but still not half as reliable as MacOS or Linux.
And, there's a downside to Linux, which is hardware compatibility (although that's rarely as bad as Linux critics describe it).
> I can barely run Windows for a day or two without rebooting.
Does Windows even allow to not reboot? I've heard that if you miss the update popup it will automatically do the update and reboot. And if you click "Remind me later" or whatever too many times it will just remove the button and force you to update. Did they fixed that or is it still doing that?
Consumer versions work this way for high priority updates.
I guess no one remembers the days when the entire industry (re: Slashdot) yelled at Microsoft that they needed to stop letting users run around with ancient exploitable installs of Windows.
So, Microsoft forces important updates.
Fancier versions of Windows let you turn off most updates. Sev0 exploits, RCEs, and the like, well, those updates still get pushed down unless you have a corporate install with policies disabling all updates.
There is a trade off, and for decades (!!) Microsoft let users decide, but eventually "1/4 of Windows users just got their machine 0wned" showed up in the press too many times.
Kind of like how every time there is a widely installed Android malware app, Google gets blamed. "Why don't they enforce their policies!" Then soon as they do enforce their policies "The Android app store should just be a dumb distribution mechanism!"
I get it, different people expressing those sentiments (I hope...), but balancing "keeping people from having their bank accounts cleared out" vs "user choice" is not the easiest of decisions. After many years, MS has gone full force on the auto-updating side of the debate.
That's fine I guess, but the problem is that there is no option to disable it. I've even read recently that they removed from settings the option to delay the updates or something along these lines, because it was "too confusing for users". Can't they just do something like what hardware manufacturers did, which is "if you screw with our product on your own too much, you lose the warranty and we are not liable for any damages"?
But back when Windows update had the option to disable updates, people who shouldn't (e.g. little Timmy setting up Gramp's machine) turned them off.
Then Microsoft got dragged through the mud, and grampa lost his retirement savings.
Back in the early 2000s, things were really bad. Going over to a non-geeks house, better than 50% chance to find malware, if they had broadband, good odds they were part of some sort of file drop for a warez group (or worse).
The issue now days comes that MS also pushes down feature updates, that is something that very valid objections to exist, especially with the dropping level of QA that exists throughout the industry today.
I have moved away from Linux. As much as I really want to use it, I always end up doing ... Linux ... as opposed to any real work.
Just last week, I moved my laptop back to Windows from Ubuntu because it froze up on me at least a couple of times a day (and that is a XPS13 - a system which is supposedly built to run Linux).
I have been using Linux since kernel version 0.99 or something, so its not like I dont know my way around it. I just dont really care which OS I run. It just needs to get out of the way and work for me and not against me. Windows does a good enough job at that.
After more than a decade of developing on Mac and Linux I am moving back to Windows and continue to be quite happy there. Docker solved most of the problems that plagued Windows as a development machine. Mac hardware is incredibly expensive. Linux is great but I don’t enjoy it as a daily driver to do a lot of the administrative and logistical tasks expected of me as a engineering leader without the company.
Bill made sure in the past that Windows should be The Operating System on PC, and it stuck. I think most of the upsides of current windows usage stem from this achievement. Hardware, software compatibility, and familiarity are often cited as upsides, but these reflect the status quo more than the merits of the system itself.
Because Windows 10 is the best Operating System in the universe? It seems like HN is full of folks who last used Windows back in 2005 or something and are painfully out of touch with modern Windows.