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> KeyPath
s72 <tab> S38 <tab> s72
<tab> i2 <tab> S255 <tab> S72
Component <tab> Component
MyComponent <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.