If shit hits the fan in the .NET stack for a big enough corporate project, someone in the office can phone/email MS and get support for their problem. If a bug is found in the stack itself, it won't languish unsolved in bug trackers for years, like many OSS bugs do. MS will probably fix it in their next cycle, and the corporate devs won't have to waste their time figuring out the nuts and bolts of the stack to fix the bugs themselves, like in OSS.
So I think it's this requirement for enterprise support that keeps MS from accepting OSS patches and locking everyone in--it would be too much work to track, validate, and test 3rd party patches when they can just fix it themselves with their own devs and keep going to sleep on their piles of money surrounded by many beautiful women.
Unfortunately this sort of view isn't very compatible with the indie developer ideal, or the ideals the author holds--which might one of the many reasons why you see so much Rails/PHP development in the non-enterprise space.