You can quit proclaiming Linux the Windows killer.
Linux is established and has a niche that, as various pendulums swing, will grow and shrink. Show me charts and stats and benchmarks that prove Linux superior to Windows in every measure and I'll not argue with you. But no matter how much money and dedication is poured into Linux, it will never put a dent in Windows' mind share or market share because Linux is an operating system, a way -- and probably the best way -- to make system hardware do what it's told. But you can't turn Linux into a platform even if you brand it, box it, and put a pricey sticker on it.
Businesses and organizations of all sizes need consistent, predictable, scalable, self-contained platforms for server solutions. Windows wins. Linux doesn't lose, because it can continue the legacy of another nonplatform, namely Unix, that needs to be refreshed and extended.
The practical need to keep Unix around isn't rooted in nostalgia or misguided conviction. There may be times when you're convinced that the solution you need doesn't exist as a whole. The total solutions that exist might be too confining or expensive, or -- as is sometimes the showstopper for me -- simply closed. Open source Unix, in which category I place Linux, BSD, and Darwin (the OS layer of Apple's OS X), is a 500,000-piece bag of Legos that comes with some drawings and a few models you can use, build on, or tap into as references for your own creations. On paper, an OS is an ideal place to start building, because you get to choose everything that sits above it and presumably you know just what belongs in each of those gaps between your hardware and your application. You see, while developers can write to an operating system's default API, they'll spend most of their time encapsulating and abstracting low-level system calls to create what is, in effect, an application platform.
No one is so foolish as to make what can be acquired cheaply or free; it's wiser to pick one from among hundreds of platforms and modules that fill in the holes between open source Unix and your applications.
In contrast, Windows fills in all the blocks between the hardware and your apps. It does it in ways that you can't alter, but which you can use in different ways. You can code with the tools of your choice and in the programming language of your choice, and unless you stray too far from the rule book, everything you create will interoperate with everything others write for Windows. An operating system is a rack into which device drivers and APIs are inserted. A platform is a rack into which applications are inserted.
Linux and Windows don't compete. Sun Microsystems sees this as an opportunity and has struggled mightily to position the combination of Solaris and Java as a platform. It almost makes it. I'd choose J2EE and Solaris over Linux for nonuser-facing server applications in shops that have expert administrators. But, similar to Linux and other flavors of Unix, Solaris is a nonstarter on clients, and that's enough to hurt its capability of competing with Windows. There is only one platform that can stand toe-to-toe with Windows, and that's the combination of OS X and Java.
Stay tuned; I'll tell you all about it.