Microsoft has learned it's lesson... finally. With the advent of NuGet and more open source initiatives in the Microsoft camp, it seems they finally get what it takes to make a good development platform and more importantly COMMUNITY. The first step historically of embracing open source in MS was shipping jQuery with the MVC framework. Using jQuery over internally developed JavaScript libraries, was a huge win for both Microsoft and developers on the Microsoft platform. MS could not produce a library as good as jQuery. jQuery had a huge core of open source contributors and a massive test library that could not of been done at Microsoft. As a developer I am now using a tool that can be used on other platforms, ie the COMMUNITY, behind my tool is now much larger. If I'm stuck, the COMMUNITY will help me out. There are so many resources for jQuery that Microsoft no longer has to provide. They are on the hook for technical support but most jQuery questions can be answered through the COMMUNITY.

Has Microsoft really learned it's lesson? I would posit no, they are simply adapting to changing marketing conditions. If for some reason the market started rejecting open source software then they would go back to a more closed development model.

MS cannot competetively produce quality software that meets developers needs without going to an open source model.

Not going to an open source model causes MS to lose out in all 3 areas: quality, cost, and time. I would predict that within 3 years that Microsoft will open source most of it's code and allow community contributions back into the products that aren't part of .NET BCL.