Programming War Stories

Connectix

After fleeing the games industry and my stint at LucasArts Entertainment Company, I ended up at Connectix, where I hoped to get back to full-time MacOS programming and also work on emulation-related technology.

Of course things didn’t go exactly as planned. While I started off working on emulation on the Mac, I soon got distracted by emulating a major video game console, which led to a distracting legal battle. And then I ended up back on Windows developing Virtual PC for Windows, which in turn began Virtual Server, which eventually led to our being acquired by Microsoft.

Getting Started

I was hired at Connectix in to apply my emulation and optimization skills to their flagship product, Virtual PC. I started in August 1998, and immediately jumped in to help improve the sound quality by emulating the industry-leading SoundBlaster 16 sound card.

One of the trickiest parts of emulating this piece of hardware had nothing whatsoever to do with the sound hardware, but rather had to do with implementing ISA plug & play support.

You see, the ISA bus standard was never designed with plug & play in mind. Rather, in those days, you had to often manually configure the IRQ and DMA channels for each card, ensuring by hand that nothing conflicted. Fun times!

So ISA plug & play was grafted onto the specification in a clever and yet weirdly baroque way that I honestly can no longer remember the details of. But it certainly was a fascinating look at hardware design and how standards “evolved.”

The SoundBlaster 16 support was first shipped in Virtual PC version 3—the first Connectix product to feature my name in the credits.

Connectix Virtual Game Station

Shortly after joining Connectix, I remember mentioning over lunch how freeware Sony PlayStation emulators were starting to appear, and how interesting it was that you could read a PlayStation CD using any old CD-ROM drive, even though they were pressed with a cool black coating that made them look special.

With management intrigued by the idea, I got the OK to begin tinkering with some rudimentary emulation of the system with the intention of running on one of the shiny new iMacs that had just appeared. Now this would be a killer app for a Macintosh market that was traditionally starved for games!

One thing led to another, and I kept investigating, and kept developing, and no one told me to stop. Within a month or so I had the system up and running using a simple interpreter, but the speed was nowhere near adequate.

Soon I got some help with the CPU emulation from Eric Traut, who wrote the x86 emulator for Virtual PC, and with his help we were getting in the ballpark of realtime execution on a 233MHz PowerPC G3.

At this point, we naïvely decided to approach Sony Computer Entertainment of America about licensing their BIOS and getting some sort of endorsement. We put on a dog & pony show where we demonstrated the A-list title Crash Bandicoot running on an iMac.

Then the CEO asked if our emulator would run any game at all, and we nervously said, “Of course,” knowing full well that we had not had time to verify the hundreds of available games. He walked over to the bookcase and picked out a random game. Luckily for us, it was Ridge Racer, a game we had in fact spent quite a bit of time on—whew!

Unfortunately, our demo apparently just angered SCEA, and we received a cease and desist notice shortly thereafter. We would not be permitted to license Sony’s BIOS code.

The CVGS Legal Battle

We asked our CEO if we should proceed, and to his credit (and my surprise), he said yes. So we worked on creating a compatible BIOS replacement that used none of Sony’s code, and then raced to the finish line in order to release our first version at the MacWorld Expo in January 1999.

That MacWorld Expo was my first (and as it turns out) only one, and it was a trip. There was a real buzz about CVGS, helped of course because Steve Jobs talked us up in the keynote that year. We had a big booth at the show which was constantly packed, and we sold several hundred copies of the product, which were all hand-produced CD-Rs since we’d only just finished coding a few days earlier!

Not too surprisingly our booth at the show received a visit from some of Sony’s legal staff, and soon enough Connectix found itself on the receiving end of a lawsuit.

The district court soon granted Sony a preliminary injunction which prevented us from selling CVGS while the case was being pursued. All of our reverse engineering efforts were put under a microscope, and I was deposed for questioning. What a stressful time.

We of course appealed, and the Ninth Circuit Court of Appeals eventually ruled in our favor, setting up an important precedent in the legality of emulation. Unfortunately this was a Pyrrhic victory for the product itself, as the initial injunction and rampant piracy had pretty much killed all the sales momentum we had.

Still, we were able to release the Windows version we had worked on, and made quite a bit of progress in terms of improving game compatibility once the injunction was lifted.

But as with most things legal, it’s never over until it goes all the way to the top. Sony filed additional complaints and tried to appeal it all the way to the Supreme Court, but fortunately they declined to hear the case. Eventually we reached a settlement before the remaining issues went to trial that saw Sony taking ownership of the code, which it prompty buried.

Virtual PC for Windows

In spite of all the legal hubub, I still got the chance to port CVGS to Windows, and this is what got me involved in Windows programming again. Now we were talking the Windows 98 era, and things were definitely improving over my past experiences.

Plus, the writing was on the wall at Apple: Copland was not going to happen, OS X was the future, and frankly, I wasn’t at all interested anymore.

So what next? Well, once it became clear that there was no realistic hope for CVGS going forward, I ended up going back to Virtual PC, this time with the intention of porting it to Windows. At first, this might seem like a weird idea for a product: why would you want to emulate a PC ... on a PC? But it turns out there were several interesting applications for it, including better compatibility with older DOS software (games), testing software on alternate versions of the Windows, or trying out other operating systems like Linux, BSD, or OS/2.

The interesting twist with Virtual PC for Windows is that we could actually run much of the emulated code on the bare metal.

Essentially, at the time, you had two layers of execution: your operating system code, which ran in a privileged mode (ring 0); and your application code, which ran in a less-privileged mode (user mode, or ring 3). While we continued to run a standard emulator for the ring 0 code, we could actually just set things up appropriately and tell the processor to execute the ring 3 code directly. And this is where we move from emulation to virtualization.

Virtual Server

We weren’t the only ones trying this out. Prior to our release of Virtual PC for Windows, VMWare had released their VMWare Workstation product, which offered many of the same features. Further, they had taken things a step further by releasing a Server product that allowed you to run multiple virtual machines on a server at the same time.

Although this was an old technology for large computer systems like mainframes, it was brand new in the PC space, and it was quickly becoming clear that it was going to be huge. Thus our path was clear: take Virtual PC for Windows to the next level by tailoring it and optimizing it for hosting multiple virtual machines in a server environment.

And thus Virtual Server was born. I personally wasn’t that interested in servers, so I continued to work on improving Virtual PC while another team built on our work to create Virtual Server.

Meanwhile, industry interest in virtualization was growing fast, and it was becoming clear that what we were working on would definitely be ripe for acquisition. It didn’t take too long before we had an interested suitor in form of Microsoft. We went through interviews with their acquisitions team, then eventually flew up to the Seattle area to check it out. Honestly, it didn’t take much to realize what a huge opportunity this was.

So early in 2003, we announced that Connectix had been acquired by Microsoft, and soon I was on my way to Redmond, WA for some new adventures.