The open source community isn't very strong so there aren't as many options for a lot of things, and the community has relied on Microsoft to provide most of the tools and libraries.
Also, while C# is a nice language, I don't find it that different that it compels me to use it over other options available elsewhere. Personally, I find F# to be a much more compelling product.
Linux works great as a server OS once I get everything set up and configured correctly. I never need to think about it again. However, I dread having to set things up on a new Linux machine. There's always some hardware that doesn't install correctly or some config file that needs twiddling. Sometimes it takes an odd sequence of commands that needs to be run in just the right order to get things going. Invariably I waste hours on the internet searching forums every time I do this, getting more and more frustrated the whole time.
As far as Windows hosting goes, I find IIS 7 to be much easier to set up and customize than Apache in terms of hosting web applications. I find the uptime of Windows Server boxes to be functionally equivalent to their Linux counterparts. I also find it's much easier to administrate large groups of Windows servers because of the nice tooling. Things like Active Directory, SMS and SCOM make things pretty easy.
Personally, I also find it much easier to find help online with Linux when things do go wrong...and that Microsoft (wisely) makes the whole experience very painful unless you're willing to pony up for their more expensive "tiers" of software. As an example, even though DFS-R is included in Windows Server, try managing a real, live deployment given what you're provided with just Server. Unless you purchase SCOM, your will fail.
Consultants love these kind of projects!
I have found this to be the case for any system that I've had to deal with for a decent amount of time. Simply change odd sequence of commands to odd registry changes (or xml files in IIS), or click these random guis and see if it works. One thing I like about the linux CLI though is that generally once I find the command it really does work.
Usually, it's obvious once you understand what you are doing.
Usually, it's easy to understand what you are doing.
That's what Puppet, Chef, package management and a host of other tools such as virtual machine images and unattended installs are for.
> There's always some hardware that doesn't install correctly
Most server-grade hardware you buy from reputable sources is exquisitely Linux-compatible. I never had any problem with that.
> it takes an odd sequence of commands that needs to be run in just the right order to get things going
This indicates you are deploying servers without really understanding what you are doing. Your phrase evokes a series of spells that have to be cast in order to conjure the proper demons. Unix machines simply don't work like that - there is no magic.
> Invariably I waste hours on the internet searching forums every time I do this
Buy a good book, read and understand the documentation of the software you use. Hire an experienced consultant to teach you and your team, if needed.
When you understand what you are doing, it is really easy. Every piece is open to inspection and all you need to do is look inside.
> I find IIS 7 to be much easier to set up and customize than Apache in terms of hosting web applications.
Until you need to do something the GUI doesn't allow you to do.
> I also find it's much easier to administrate large groups of Windows servers because of the nice tooling
The tooling is there - you just need to learn it. We use Puppet where I work and we use it to manage our server fleet. Works as intended.
Some test cycles here involve the automated deployment of VMs based on machine templates that are then configured using Puppet. If we were to do that with Windows, those tests would never run.
I imagine a combination of Buildbot and Microsoft's VM container could do it and be automated with a PowerShell script, but I'm not very sure how. Has anyone done something similar to this?