The story of Orca

Like security guy Greg Fee, I find the list of referrers to my blog fascinating. Today the referrers list contained several hits from people searching for Orca (or more explicitly orca.exe) on Google. I can only figure that Google snagged one of my earliest blog entries with its reference to "orca.exe" and was sending people there. Since, I've been in something of a storytelling mood the last couple days I thought I'd go back to 1998 and tell the story of Orca.

In 1998, I was an intern on the Darwin team that was a small part of the Office 9 organization. "Darwin" was the codename for the new installation technology being built to replace the ACME installer. When I showed up on the Microsoft campus, Office 9 was just about to start on the long glide path towards shipping a product.

Early in my internship, I was working on some small tools to make it easier for people to build "MSI files" that were the inputs into Darwin. For example, msifiler.exe was the first tool I wrote. After getting my feet wet with a couple small tools, I was put on a task that would cumulate in the Merge Module specification and tools. However, I never really shook the "tools bug" and kept thinking about tools that would make it easier to deal with Darwin. I liked to call myself the "unofficial Darwin tools team". I even had an internal web site called "Darwin Unleashed!" with all kinds of tips and tricks for building MSI files.

At exactly halfway through my eight month internship, my girlfriend at the time decided she didn't want to continue to be an intern Program Manager (PM) with the Publisher team but wanted to go back to fighting forest fires in Zion National Park as she had the summer before. The day after she left I was sitting in Rob Collie (who was the Darwin PM at the time)'s office listening to Jim Masson (who was a part of the Zero Administration Windows initiative in Microsoft and later would do a stint as the Darwin PM) talk about his "Darwin wish list". At the end of his list, he leaned back in his chair and said, "You know what would be one really cool app? One really cool app for Darwin would be a table editor that we could ship in the SDK."

I had been suggesting to my mentor for a few weeks that I should write a table editor for creating and editing MSI files. At the time the only thing you could do was use msidb.exe to import and export IDT files. Have you ever seen an IDT file? They look a lot like this:

Component <tab> ComponentId <tab> Directory_ <tab> Attributes <tab> Condition <tab> KeyPaths72 <tab> S38 <tab> s72 <tab> i2 <tab> S255 <tab> S72Component <tab> ComponentMyComponent <tab> {12345678-1234-1234-1234-123456789012} <tab> MyDir <tab> 4 <tab> <tab> foo

To edit your MSI file you had to export a table to an IDT file like above, modify the data that needed changing then import the IDT file back into the MSI. This was a painful process because IDT files have to be formatted just right (for example, I explicitly called out the tabs separating each column identifier) and keeping foreign key relationships up to date often required exporting another IDT file and fixing it. Finally, msidb.exe had one of the most confusing command-line interfaces and one of the funkiest GUI's I've ever had the displeasure of dealing with.

Msidb.exe was so bad that the Office setup team had built a tool called "Scopes". Scopes had the ability to directly view and edit the tables in the MSI so you didn't have to dump them all to text. Unfortunately, it had all kinds of features for interacting with the very complicated build process for Office 9 and wasn't terribly stable. Scopes wasn't a tool that Microsoft would be able to ship customers in an SDK.

So, when my social life up and left for Utah, I decided to hone my MFC skills and try to bang out a real live table editor in my new found free time. Three mostly sleepless nights later I had a basic table editor working. I showed it to my mentor and he said, "Can it do Unicode?" After weeks of trying to convince him that we needed this tool, the first thing he ask for is another feature. My answer was, "Sure, how hard could it be?"

Orca turned into one of his favourite (ahh, the dreaded "u" again) demos to show to people interested in Darwin. He would load an MSI file with a table that contained four rows with the same sentence each displayed in a different language. Yeah, John, it can do Unicode. <smile/>

Now after you get to know me better, you'll find that I have this fascination with the stories behind the naming of people and things. For example, when I was older I found out that each of my parents and my grandfather had a different story why my name is "Rob" (just "Rob"). So it is very important for all of my projects to have codenames that fit them well. Orca's name is one of my favourites (still with the "u", grr).

To understand the name, you have to go back to the beginning with the conversation in Rob Collie's office. Two or three times in that conversation Jim said, "One really cool app." His little diatribe got stuck in my head and on the third night of sleep deprived coding the name for the table editor came to me. Orca. One really cool app. How perfect was that? So, I started up mspaint.exe and hacked out a little pixel art that turned into the killer whale leaping out of the water that you'll still find today as the logo for orca.exe (click Help -> About for a really good picture).

Later it dawned on me that the icon for the Scopes table editor was a little penguin. Do you know what one of the few natural predators of penguins are? Yeah, killer whales. The Scopes tool was mothballed when Office 9 shipped (marketing named it Office 2000). Scopes was then replaced by a new setup processes in Office 10.

So there's the story of "one really cool app" that came to be known as Orca. I hope you enjoyed a bit of the history behind the tools. Next blog entry, I think I'll go back and continue that discussion about Components where I left off. Until next time.

FireGiant provides dedicated support for the WiX toolset. Ever wish you could get your WiX questions answered immediately with the technical detail that you find in the blog posts here? You can with FireGiant!

Send a comment

Thank you for sending your comment.