I think the real pull for Java is the possiblity to run everywhere.  Not the write once run anywhere farse but the ability to get close to cross platform.  I do see .NET making strides to make that more of a reality with MONO and others chipping in.  Also I don't think anyone could argue that the BCL's in .NET kick (I need to watch my language) and if it does reach true cross platform ability with MS support for it (Full business partner style support), Java is all but a blip in the programming past.I work in a company where both Java and .NET are used.  We have roughly three-times the staff of Java to .NET developers and both groups write the same type of software.  The .NET developers still outpace the Java ones and our customer base is much happier with the .NET applications put out than the Java ones.  We have had programmers move from one team to the other.  The simple fact is .NET is more productive.  Java is like the cookbook that many people have donated little tidbits to for years.  You have to try each one to see if they taste good or not.  And some taste nasty.  Where-as .NET is like a professional cookbook where your reasonably sure that your family wont spit it out when you serve it.  Now you can give the recipe to everyone (open source) but it still doesn't change the fact that some of them suck and most of the time you find out at the dinner table.Wow what a sorry but true analogy.