25 years ago, I invented something that not only
has sold more than a Billion copies, but that is still actively used by over 200 million unique
people each and every month, decades later, to this very day.
That's important to me because
popularity is one thing, but staying power is really where it's at. For every Macarena there's
a Dark Side of the Moon, and I'd like to think that I actually managed to write two programs
that have similarly withstood the test of time: the Windows Task Manager and Windows ZipFolders.
And yes, I entirely appreciate that that's where the similarities to Dark Side of the Moon end.
Still, having code that I wrote personally surviving in Core Windows some 25 years
later is actually quite rare and rewarding, and being that they were things that I wrote
largely independently and of my own initiative as side projects makes them even more so.
This is
the story of how Windows Task Manager came to be, followed in Part Two by a tour and analysis of the
actual, never before seen Windows source code for Task Manager itself. I'll take you through it and
show you how Task Manager works and why I wrote it that way. Among other factors, we'll look at the
defensive programming techniques I developed for it and the app's self-healing nature. You'll
learn a number of Task Manager secrets never revealed until today. That's because I'd largely
forgotten most of them until I saw the code again! In fact, it jogged enough memories that it made
me a little nostalgic, so I'll also try to give you a sense of what it was like to be at Microsoft
in the 90s.
For those that don't know me, my name is Dave Plummer. I graduated from the University
of Regina and started at Microsoft back in 1993, where I spent the next decade or so
working on MS-DOS and Microsoft Windows. While I also contributed to Windows Ninety-Five
and Ninety-Eight, my focus was really on Windows NT and its successors, such as Windows XP.
Those were our "advanced" operating systems, designed by Dave Cutler, who had also designed
VMS before it, and they would evolve into what you're using today in Windows 10. It's all built
atop and evolved from our original NT codebase.
How do you go from the U of R to Microsoft?
For me, it all started with a book. I was working a summer Internship at SaskTel, the phone
company, and ate my lunch in the mall food court, as the song says, with the old and the bored. I
wandered into what was then a Coles bookstore and picked up a copy of a book titled "Hard Drive:
The story of Bill Gates and the Making of the Microsoft Empire". Up until that point I had
largely been a Unix and Amiga programmer and had never really touched a PC. Frankly, I considered
Microsoft to be the crude 800-pound gorilla of the industry and I was not one of their fans,
to be honest. That was until I read the book, however, and encountered the stories of the people
and the software projects that went on there. It sounded like a company populated with people
I aspired to be like working on projects that absolutely fascinated me. I knew immediately,
and with great certainty, where I needed to be: Redmond, Washington. The only problem was that
it's a long way from Saskatchewan to Redmond, and Microsoft was already receiving something on
the order of one hundred thousand job applications a year. While I sent a copy of my resume to
general HR recruiting, I'm quite certain I never heard back.
Instead, I turned to one
of the programs I had written for the Amiga, an operating system utility called HyperCache. In
those days before the web, users would typically fill out a "registration postcard" with their
customer info and mail it back to the software vendor for update notifications and that sort of
thing. I went through my big stack of blue cards looking for anyone with a Microsoft.com email
address, and eventually I found one. It was a fellow named Alistair, and I sent him an email
asking if he might suggest anywhere that I could apply directly, rather than through HR. He gave me
one of the greatest gifts you can give an aspiring graduate: the direct contact emails of a couple
managers who were actively hiring operating system developers. Alistair is still with Microsoft, but
now overseas, and though we've still never met in person, we stay in touch online and I send him
a thank-you note on my major anniversaries!
Long story short, his contact netted me a phone
screening which led to a phone interview which then led to an in-person day of interviews down
in Redmond which ultimately landed me a summer internship in the middle of my final year at
school. I came down to join in on the effort for MS-DOS 6.2, where I was pleasantly surprised
to discover that interns are actually given real core features to work on. That summer I completed
tasks like writing a new version of SmartDrv, the system disk cache complete with support for
CD-ROM drives. I added single pass Diskcopy and used a delta patching system I borrowed from
the FoxPro database, of all places, to build a version of setup that fit the entire MS-DOS
upgrade onto a single floppy disc, potentially saving the company millions of dollars. Not bad
for a summer intern in three months, I thought.
When my internship ended and I returned for my
final semester of school in Regina, much credit is due to the patience of Dr. Howard Hamilton,
who mustered me through my final Computer Science courses that fall as I basked in the glow of being
the only student in the advanced operating system course to have actually written part of a major
commercial operating system! Don't worry, however, as I'm certain that I handled the situation
with all the grace to be expected of anyone in their early 20s.
Being an intern might get
you on the shortlist for a full-time interview, but I don't think even I appreciated how little it
actually promised in terms of lasting employment. I think I believed that my performance as an
intern was my future ticket, but the reality is that you have to completely re-interview all
over again with new people that you've never met before, basically starting from scratch. I endured
the series of all-day interviews and ultimately secured an offer. It was for thirty-five thousand
dollars a year, which I accepted without question. Fortunately, I was also welcomed to the fold
with a whack of stock options that it turns out would be a pretty good deal in the long run.
As soon as exams were complete I headed on down to start work in Redmond on the Win32 RPC team
where I had landed a position. A few months later I would fly back to Regina for a single
weekend to graduate, get married to my high school girlfriend, pack everything that remained,
and immigrate to the United States all in about 72 hours.
We said goodbye to the movers bearing all
of our belongings and headed for the airport; upon landing at the US Customs entry point, however,
I was pulled aside into the "big glass room" for additional questioning. After reviewing my
application, as my new bride looked on from afar, the Immigration officer was yelling at
me, turning red, and waving his arms. He was very upset and animated, and from her
vantage point it was clear that we were being denied entry and that my Microsoft dreams were
crashing down around us right then and there.
What she didn't know, because she couldn't hear,
was that he had already long since approved my work Visa! He was actually upset because their
copy of Microsoft Word printed a blank page at the end of every one of their documents and it
was wasting paper and he wanted it fixed. I did my best to help configure their page margins before
we were released to our new life in America!
Back in those days, just like today, I liked
to code. I liked to code a lot. In fact, I'd code all day at work at Microsoft and then
come home and code on my side projects at night until bed. I'm also the kind of guy who's just
genuinely curious about what's going on my inside my system and who enjoys seeing machines
busy and hard at work. I could literally sit and watch Norton Speed Disk shuttle blocks and
sectors around my disk in a fascinating dance for longer than I should probably admit. Heck, I've
even defeated the safety mechanism so I could keep the lid open to watch a cycle of my washing
machine out of curiosity about how it worked; there could be a whole spectrum reasons
why, but I think I'm just wired that way. Now that I was working on the fledgling Windows
NT, with all of its complicated internal mechanisms, I wanted to get some insight into what
was going on with my own desktop as well, and that interest led directly to Task Manager.
Today you
might think of Task Manager primarily as a tool for dealing with rogue apps and frozen desktops,
but that ability was actually secondary to the monitoring piece of determining what programs
were running, what resources were in use, what was still free, who owned what, and most important,
what if anything looked out of the ordinary. It was really more about inspection than control. You
could see how much memory each process was using, how many threads of execution each had operating,
how many graphics handles it had outstanding, and so on. With a glance, a developer could
now spot a resource leak with ease. In a way it's a debugging tool written by a developer
that even end users ultimately found useful.
I wrote the first drafts of Task Manager in my den
at home and then took the resultant rough program into work. In those days we followed a practice
known as Eating Our Own Dogfood, which meant we were self-hosted on the newest daily builds of
Windows NT even as we worked to create them. Eventually a number of other developers talked
me into giving them copies of my Task Manager, and it spread amongst the team. It eventually
came to the notice of Dave Cutler, the designer of Windows NT and second at the company perhaps
only to Bill Gates as far as we were concerned. Fortunately, he was a fan of the fledgling Task
Manager and gave me permission to add it to the main Windows source tree. Once I had put it
into the product, a senior developer named Mark Lucovsky was essential to keeping it
there. He served as its occasional champion, fending off the complaints from the designers
of Windows 95 who found the whole thing overly technical and nerdy in a way that ran contrary to
their mission of simplifying the PC experience. Of course, it likely didn't help that DaveC
initially had me put it at the very top of the Start Menu, which was basically received as a big
middle finger by the Windows 95 shell designers. I moved the link to somewhere reasonable like
System Tools and everyone was satisfied.
No money exchanged hands and no contracts were
signed. I simply added it to the project source tree and changed the copyright headers. It was
very much a wild west in comparison with how you would go about it today. The best part about it
at the time, at least from my perspective, was that once I added it to the product, my favorite
hobby then became my day job. The software that I had been tinkering with in my den now became
my primary full-time job for a few months. It would be very much like if you had a hobby
of building and painting little birdhouses, and then one day you brought one in to show
your boss, and your boss said "You know Dave, really like your little birdhouses,
and we're going to pay you to build them while you're here at work too." My
birdhouses just happened to be Task Manager.
Contrast that experience with the one I had about
a year later involving the system software known as ZipFolders. That's the code that enables you to
download and browse through Zip archives using the Windows shell, and it lets you drag and drop
in and out to compress and decompress files, and so on. I had written it at home and released
it as shareware after getting permission to do so. I was selling perhaps a dozen copies a day when
somehow a Windows product manager at Microsoft stumbled across the utility and decided that
it, too, belonged in the operating system as part of Windows. To that end she called me at home
quite early one morning, before I'd left for work, to explain that they wanted to purchase the
program from me for inclusion in Windows, and would I be willing to discuss it? I offered
to stop right on by her office that morning, which seemed to spook her - she demurred and said
I should talk to Microsoft Travel, which confused the heck out of me. Why would I schedule a travel
visit to Microsoft when I worked there every day? In fact, I lived only a few blocks away... I could
walk!
It turned out, after some uncomfortable back and forth, that she had no idea that I worked
at Microsoft, just as she did! She had merely researched, tracked down, and cold-called the
author of ZipFolders, who happened to be me, at home to explore an acquisition.
As a result, my
choices were actually quite limited. If I did not sell it to Microsoft, they would simply develop
their own or buy a competing one, and I'd have to stop selling mine or quit my day job - I couldn't
just continue selling mine in competition with my own employer once they had entered the market!
And so, I cheerfully accepted their first, best, and only offer. Still, everyone was happy:
I showed up at work the next week in a red Corvette and ZipFolders remains as part of Windows
to this very day.
According to the New York Times, Microsoft's initial public stock offering is said
to have created some 12,500 new millionaires at the Company. Being the new guy, I was certainly
not among them yet, but working with people who are worth tens of millions of dollars yet who
still act like normal folks in the lunchroom is humbling and centering. And when they clearly do
not need to work yet they are passionately putting in 16 hour days and sleeping under desks to do
so, it's also more than just a little motivating. You can't really blow out at four thirty on a
Friday when everyone else is on a "Death March".
Ah yes, the "Death March". Hardly a
politically correct term then or now, it was used to describe the phases of a
product cycle - sometimes months long and sometimes running one into the next - where the
limitation of how much work you put in isn't what's reasonable, it's whatever is possible.
If you've already worked a 14-hour day but you haven't found the critical bug and it's possible
to work a 17-hour day then that is what you do. If you need to sleep under your desk, you put a
sticky note on your door that reads "Please Email" and you take a nap on the floor. As for
me, I had a small sofa-bed in my office. If you need to wake up, you wander out to one
of the portable barista stations serving lattes up and down the hallway. Eat in the food courts,
play some Robotron or Tempest in the build lab. Whatever it took to keep us there, or more
accurately, to ship the milestone as soon as possible, they were willing to provide.
Early one
Sunday morning about 5AM I received a call from my boss that there was a showstopper build break
in a component that I was a backup contact on; Calculator or Pinball or some such thing. They
can't reach whoever normally owns the component, but it's broken and it's blocking the entire
build. If you don't fix it not only does a test build not come out but you're wasting the time of
about 350 developers who depend on it each day. So, even though I had just made it to bed a few
hours earlier, I dragged myself back into work and fixed whatever was broken. My boss's boss was
very appreciative which is why on that Monday when I got to work, I found a pair of Dave Cutler's
courtside NBA tickets pinned to my corkboard. Now I'm not a big NBA fan, but I AM a fan of
having popcorn and snacks brought to me courtside by waiters, and my wife and I had a great time
rubbing elbows with the local rich and famous. It's actually the last NBA game
I've ever been to, and if I recall, the SuperSonics did, in fact, beat the
Bullets. I hope that doesn't date me!
It looks like he's also on Reddit. Thanks /u/daveplreddit for the thousands of hours I wasted on space cadet pinball
The title says "WinZip", but I presume they mean ZIPFolders, the zip support built into Windows! It'd be great if the author could edit the title, lest that Nico Mack guy get upset and challenge me to a duel or something.
There was a guy who came to our first year Computer Science class at the U of R like 6 or 7 years ago. I don't remember him that well, but I bet it was this guy cause I remember he was quite accomplished.
Neat
I'm shocked I love this. What gets me is I spent 3 years at u of r comp science before changing majors and not one mention of this!! You'd think UofR would be proud of this fact.