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.