And that is where you are horribly mistaken. Typical Java/.Net coders may not care about the underlying platform while coding, but people working with large scale real world applications do. Java/.Net may abstract away the APIs, they still have to use the underlying stack. Their performance is still dependent on the performance of the underlying stack.
I have seen the same application with drastically different performance characteristics on different platforms.
Linux is the king on the server because it has been heavily fine tuned for the server over the ages. The cost, while a factor, is not as relevant. Any company deploying large scale applications on Linux has to hire enough engineers to keep it running that the cost of Windows is largely offset. If it were just a matter of cost, we’d see more deployments of FreeBSD and the likes.
It is the same reason people stick to Java despite all its shortcomings.