Wanna spin up n VMs for production / distributed computing? For Windows, you have to license each VM, whereas with Linux, the incremental cost of another node is nearly 0.
(Side note: I had high hopes for container support on Windows Server 2016 because unlike OS's, containers don't require individual licensing. Unfortunately Windows Containers are still immature, and are ironically second-class citizens in the Microsoft ecosystem compared to Linux containers)
Wanna spin up a n database servers? A single SQL Server (Enterprise) instance is pretty pricey (and it's licensed per core, minimum 4), whereas Postgres is free for any number of users and any number of processor cores. You want several replicas of your SQL Server? It is $$$. With MySQL, every replica is free license-wise (there are other costs of course).
The cloud has changed these calculations somewhat, but if your infrastructure is on-prem, Microsoft licensing can be prohibitive at scale.
In addition to costs themselves, Microsoft licensing is a highly complex topic. One of my colleagues who deals with Microsoft jokes that someone well versed with MS licensing deserves a PhD. A lot of people simply don’t want to deal with all that when they have a thousand other things to worry about.
Imagine a parallel world, one where you could spin up Windows and SQL Server installations with ease and you just get a bill at the end of the year for your licensing costs, with easy payment and financing terms. If that were the way things work (and it is to some extent for the cloud, one reason why azure is so popular) then it wouldn't be terribly bad to deal with MS technology. But in large part that's not how things work. Instead you have to deal with the overhead of finding out exactly what you need (do I want Windows Server 2016? what's the advantage of getting the Data Center SKU? do I want SQL Server clustering? etc.) then you have to go out and buy it, install it. And then, after all of that, you have to occasionally put up with Microsoft barging into your business and doing an intrusive audit to make sure you're not stealing anything.
Compare that to the alternatives out there. If you have a big beefy server you can spin up a VM host and infinity linux VMs, you can run as many copies of nginx, postres, and all the other great technologies out there that you want. And you don't have to be burdened about the complexity of licensing, let alone the cost. When you are paying developers 500, 1000, 1500 bucks a day that complexity cost, and the opportunity cost from not just feeling free to experiment and try things out can easily be more expensive than the actual licensing.
I love C#, coding in VS with the .NET stack behind you almost feels like cheating or like "easy mode" because there's just so much available to you and so much you can do trivially in that world which takes so much work and pain with other tech stacks. But ultimately the truth is that nginx is pretty much just a better web server than IIS and linux is a better platform than Windows, especially for services. Docker on windows is light years improved today compared to where it was a year ago, but it's still an also ran compared to Docker on linux. The Microsoft platform just doesn't have the edge it used to, which makes it hard to justify the cost.
Automating Windows is the biggest cost in these environments. It’s just not worth the hassle because even on the best of days with the best tools at hand it barely works.
The microsoft/windowsservercore image is currently ~10-12GB.
The lighter-weight microsoft/nanoserver image is ~600MB, which sounds more reasonable, but there are certain limitations.
Compare this to the Alpine Linux Docker image at ~5MB.
It takes significantly longer to provision an Azure Container Instance (ACI) running a Windows Container than a Linux Container. That said, if you need to run Win64 or .NET Framework binaries (say from a proprietary vendor), Windows Containers are your only choice... else you have to spin-up a full blown VM.
That said, .NET core running on Linux containers and connecting to open-source databases are a reasonable alternative. Devs tell me that .NET core itself is still pretty new so while it works for the most part, teething issues are to be expected.
Microsoft is much easier to deal with now vs the 90s precisely because they are no longer the top dog and know they have to compete with the FAANG companies for many of their offerings
The licensing is even more complex than it was.
I have no statistics about them being "easier to deal with", so I'll take your word for it; But they still hold the same power once you sign, and can use it at their discretion.
No company is trustworthy, but some are much less than others - a few at the "trustworthy to be evil" level.