In past blog posts regarding the difficulties inherent in crossing programming domains (Unix to Windows, say), some claimed that programming is universal, and any decent programmer should be able to cross development boundaries as easily as crossing the street. If they can't then they are stupid and should be fired (someone did claim that).
That's silly, and it should be immediately obvious to anyone who has programmed for any period of time, whether or not they are on the open source or Microsoft side of the debate. However, seeing why it's silly can be difficult, trapped as we are behind our respective trenches, so the best way see the way clear is to use an analogy.
When I used my cake analogy in response to an article written by Richard Stallman, someone declared that Richard Stallman would rarely use analogies because they are intellectually lazy. Fine. But, in my opinion, analogies do frame the discussion in such a way that you see the same thing from a different angle, and that can be useful in better understanding the problem.
Consider musicians. Joe Keyboard is an expert at piano. He is really good at it, and starts to sell a slew of albums based on his ability to play piano. He has friends, though, who tells him that he should get into guitar playing, as guitar players have more screaming fans.
Joe Keyboard is musical, and reading and writing music is important in both piano playing and guitar playing. That doesn't mean, though, that he can just waltz into a bar, pick up a guitar and play like he's Eddie Van Halen. It takes time to learn guitar, just as it takes time to learn to play piano. He chose to concentrate on piano, and he became very good at it. That doesn't mean he can turn around and start playing guitar.
Expertise takes time to acquire. If you are an expert in Linux, you will not spontaneously be an expert in Windows, and vice versa. That's the reality of our industry. People must specialize if they hope to reach a certain level of facility, and that's why it's so hard to decide to pick up stakes and move from the Windows world to the Linux world.
So, I still think that the only way Linux is going to pose any threat to Windows is if they decide to co-opt more Windows technology. It's not enough to say "Qt and GTK are cross platform." Windows developers don't use Qt and GTK (or Java for that matter), so trumpeting their ability to write Windows programs is a non-argument. On the other hand, Windows developers do use .NET, so that seems a better way to attract them than trumpeting the merits of a competing API.
But that's just My Opinion.