Doing commercial software these days is like doind battles in old times: small advantages leads to the victory. Keeping core technology code undisclosed is undoubtedly one important advantage that Microsoft must keep.
As a developer, I was almost always wandering how that feature is done, why that option didn't work how I expect to, why they don't publish examples of using the last design interface features and so on. The truth is that we couldn't have them all for free.
Since .Net comed up, Microsoft changed his policy regarding community support. Non Microsoft comunity and open source projects proved that community is the key. Thanks to few open minded people inside, they will recover the lost market shortly.
In web development, I have started as a PHP developer. At this time, as you know, PHP community is still larger than ASP.NET community. Some time ago, when Zend boys started to design Zend 2.0 engine, I have asked them why they don't include modern features
like namespaces and coherent OOP implementation. In return their response sounded like: the purpose of PHP as scripting language is not to do that. That makes me to embrace .NET definitely. And I was never wrong till now.
So helping developers through community support is enough for me these days. Who whants more must rise the stake: go inside Micrososft and work at the source of all sources.