Personal computers are powerful enough to run any program we could possibly want. So, why is there still so much software that won't run on everybody's desktop? When my friends got obsessed with the game Far Cry, I couldn't join the fun because there was no Mac version. Now that I've cracked and bought a PC, I can't use Fire, my favorite all-in-one instant messenger.
The reason that software is Balkanized is that most applications are coded in some version of C, a programming language invented when PCs were still a dream. C programs link to your computer's software libraries so they can interact with the outside world by accepting keyboard input, drawing output on the screen, or getting online. Because the software libraries on PCs, Macs, and Unix machines vary significantly, a program written for one kind of operating system typically won't work on any other OS. To get a program written for the PC to run on a Mac, a programmer—or some small army of programmers—has to make major changes to the source code to adjust for those differences in software libraries. Want a Linux version? One for Pocket PC? You've gotta repeat the process for each one.
One way to bridge the gap is to use an emulator like Virtual PC, the program that allows Mac users to run Windows programs on their machines. (An app called PearPC promises to run Mac programs on PCs, but it's still in development.) But since Virtual PC works by basically running a complete copy of Windows on top of the Mac OS, performance can be slow and buggy. I got Windows Media Player to run just fine on Virtual PC, but when I plugged in a USB cable to route the music to my office stereo, the program freaked out, leaving David Byrne stuck in a stuttering loop. A more ambitious emulator called QuickTransit promises to let any software run on any hardware by using a set of "translation modules" to convert programs to other formats. But so far, the program only converts between different versions of Unix and Linux—the company told me that implementing Windows and Mac translations will take a while longer.
The quest for the perfect emulator is particularly frustrating because 10 years ago it seemed like we wouldn't ever need emulators. Nothing was hotter in the mid-'90s than Java, a new programming language designed by Sun Microsystems with the slogan "write once, run anywhere." Java had the unique property that any program written in the language could run on any computer or digital gadget with a built-in Java engine. If someone wrote a video conferencing program in Java, you could download it to your PC and your wristwatch! Your refrigerator! Your Newton! Even if Java wasn't the ideal language for every application, the run-anywhere idea evangelized by Sun's Bill Joy seemed inevitable. Programs written specifically for one operating system were so 1985.
I e-mailed Joy recently to ask what happened to Java and run-anywhere software, and he replied with one word: "Microsoft." (Microsoft is Slate's corporate parent.) As the Wall Street Journal reported back in 1999, Bill Gates sided with Microsoft "hawks" who supported a vigorous defense of the Windows operating system against the inroads of OS-independent software. In a presentation called "Java Is Our Destiny," one Microsoft dove suggested that Microsoft make "a graceful exit" from Windows. According to the Journal, Gates reportedly suggested that he "join the Peace Corps."
It's easy to cast Gates as Darth Vader, but at that point he was right. Java was in its infancy and would take years to reach the maturity of C's successor, C++. Programmers still mock Sun's "write once, run anywhere" credo as "write once, debug everywhere." And back in 1995, "run anywhere" meant "run on desktop computers," a medium that Microsoft had already conquered. There already was software that ran everywhere. It was called Windows.
With the Java buzz old news, it's no surprise that hot new PC programs like Skype and Firefox are still written in older languages like C++. But Java's finally close to being a run-anywhere technology, and right when we're really starting to need it. In the past few years, our consumer gadgets have gotten smaller and more wired together—we use our Treo to talk to our Dell and our laptop to program our TiVo. But even with all that interconnectedness, I still have to use different e-mail programs on my Mac, PC, and Blackberry. It's the height of stupidity.
That's where Java comes in. Portable widgets like cell phones, iPods, and that GPS unit in the car are just the right size for the tiny Java engine. More than 350 million cell phones already have Java built in, allowing software makers to sell the same downloadable games, instant messaging clients, and other software to any brand of phone. By contrast, there are only about 1 percent as many Windows-powered phones, and the pint-sized Windows CE operating system they run is completely different from the bulky Windows XP on your desktop. Programs built for one don't work on the other.
I can't imagine that a generation from now, people will still tolerate incompatible breeds of digital devices, any more than we'd accept a Sprint phone that couldn't take calls from an AT&T phone. Java, or another run-anywhere programming language (even Microsoft has one, C#), will most likely become the lingua franca of the world's gadgets. Once that happens, PCs will have to follow. My hope is that, in another decade, when I find a cool new piece of software, I'll be able to run it anywhere I want.