Linux for Windows?
You'd almost think it was the ultimate goal of Linux-- to be able to run ELF and Windows binaries on the same O/S. "Lindows" does it. Now SuSe does it. And another new Linux distro, Xandros does it. Efforts by the WINE project and CodeWeavers are making this dream a reality. But here's a question I have: WHY???
Darkness at the End of the Tunnel
Let's imagine for a moment that the WINE project is complete and that Linux can natively run all manner of Windows applications. It's a roaring success-- achieving 100% compatibility, it becomes part of all the mainstream Linux distributions. There-- that's when Microsoft wins.
Huh? How's that? Waitaminute-- Microsoft loses if you don't need Windows to run Windows apps, right? No-- Linux loses because there will be less incentive to develop native Linux software. Worst case, the Linux application development community shrugs and starts learning Visual Studio and MFC. Because if Linux can run Windows apps, they might as well make Windows apps, since Windows certainly can't run Linux software. And if there's little to no development going on for Linux, then eventually people will realize that they might as well be running Windows for all their Windows software.
I consider it verging on treason for Linux users to be running WINE. Now with all due respect to the WINE team-- I hold those guys in the highest regard. Their kung foo is certainly better than mine. But wouldn't their talents be better spent developing the native Linux platform rather than enabling a Windows platform on top of Linux?
I just don't get it. For running Windows applications, there is a perfectly good O/S for doing that: Windows. I'd rather run Linux software on Linux. Instead of MS Office, I would run OpenOffice. Instead of WinAmp, I'd run XMMS. What are we trying to do? Propogate the Microsoft 'Office monopoly' on to the Linux platform? I realize that there are Windows apps out there that don't really have a decent equivalent for Linux. But developers should consider this an opportunity! Windows desktop software development has stagnated to a standstill. But for Linux, there are lots of gaps left to fill. Developers should stake a claim and make the best desktop Linux software they can.
Hindsight is 20/20
Let's consider history for a moment. Think back to 1994. In a bid to encourage Windows users to switch to the arguably better OS/2 operating system, IBM released OS/2 Warp 3.0. It was a bold, new OS/2 with the best Windows compatibility yet. You could start up Windows apps right on the OS/2 desktop. They even went a step further and released a version of OS/2 called "OS/2 for Windows" just to further confuse everyone. For the most part it delivered pretty well. It supported 16-bit and "Win32s" Windows applications by running them in a separate virtual machine, but the process was transparent enough to make it look seamless.
It was a technical triumph. Many Windows users tried OS/2 for the first time (ironically enough, I was one of them, but mainly used it for running DOS and Windows applications, which it did with style). But-- in the end, OS/2 was not served very well by it's Windows support. Windows95 and Windows NT 4.0 were soon released-- '95 was a dream for the consumer and naturally you couldn't run '95 applications on OS/2, so many of the new converts switched back. And Windows NT 4.0 brought the stability that many OS/2 users chose OS/2 to begin with. And naturally, you couldn't run Windows NT 4 applications on OS/2 either. Not to mention that these new versions of Windows ran Windows apps better than ever!
Had IBM put more effort into OS/2 itself as opposed to making it a funky kind of Windows shell, would OS/2 be better off today? Personally, I think it would. With OS/2 for Windows, IBM declared "if you can't beat 'em, join 'em." OS/2 developers heard that loud and clear and packed their bags for the Windows camp.
Let's not take Linux down that road. We've learned this lesson already-- even if WINE were to be 100% compatible with Windows today, tomorrow it would not be. That would translate into a very negative user experience for end-users and would give Linux a big black eye in the process. If I were heading up the Windows division of Microsoft, this would be my game plan: allow the API to stablize long enough for projects like WINE to support it. Then, without warning, introduce a new layer of APIs that can't so easily be replicated. New applications would require this new layer to function and thus be incompatible outside of Windows. Sounds a lot like what MS is in the process of doing with .NET. I'm starting to see more and more applications require that .NET be installed to operate.
Call to Action
I don't have any call to action about any of this. WINE and co. will continue, regardless of what I have to say. Hoards of people will run their Windows software on Linux, to the detriment of native Linux projects. Personally, I think if Microsoft wants their applications to run on Linux, they should port them. They don't deserve a free ride. Linux desperately needs native applications if it is going to survive. Don't give up on it please.
Cross-platform application development is a much saner approach to take than using a "cross-platform O/S". Here are a few choice development solutions for creating cross platform applications (alphabetically ordered):
- Delphi / Kylix: C++ and ObjectPascal cross-platform development with one of the most polished IDE's you'll ever see (the 'Personal' Kylix edition is even free).
- Java: Sun's "write-once-run-anywhere" (debatable, but mostly true) language/platform.
- Metrowerks CodeWarrior: I haven't used it, but I hear it's pretty good.
- Tcl/Tk: Open-source, mature language for creating GUI applications that will run on a variety of platforms.
- WxWindows: Open-source GUI framework for cross-platform development.
- XUL and XPCOM: XUL (pronounced zool, rhymes with cool) for interface definition, XPCOM for writing the native code components for different platforms. It's how Mozilla is built, so that's good enough for me.