Hey, I'm Dave, welcome to my shop! I'm Dave Plummer, a retired operating systems engineer from
Microsoft going back to the MS-DOS and Windows 95 days, and I'm the original author of ZIPFolders,
the compressed file support in Windows. It's a crazy story that almost got me fired,
and one I've not even told to close friends and those who worked with me at the time. But it's
been 25 years now, and I'm finally ready to tell you the Secret History of Windows ZIPFolders.
A little bit of backstory is likely needed as to why I was writing software on the side to
begin with. Task Manager might have begun life as a side project, but ZIPFolders was
something I wrote from start to finish at home in my den completely separate from my day job.
If you know anything about me by now, you know that I like to code. I like to code a lot, and so
I'm frequently working on these side projects in order to keep myself entertained and to learn the
latest technologies and trends. Or at least the ones I deem to be both important and fun to play
with. It's how I got started and how I still spend my time today. Like a lot of programmers my age,
my first serious exposure to programming came on a Commodore 64. Though I started in BASIC like
everyone else, I quickly progressed to assembly language and even worked on a few commercial games
written entirely in 6502. By about 1987 I had moved onto the Amiga platform and was actively
coding for it in C and 68000 assembly. I wrote an application called HyperCache that significantly
improved the performance of Amiga hard drives and other storage devices. It's something that should
have been built into their operating system but wasn't, and HyperCache filled a notable hole in
the system. I was confident it would be popular, and didn't want to release it as shareware,
as I figured I would probably sell one or two copies before it just got pirated into oblivion.
Instead, I decided to make the leap to release it as a full commercial software package.
The difference was really in pricing - shareware apps were simpler and there was no packaging and
you paid five dollars. With retail you got a box and a manual and you paid thirty dollars. It would
clearly generate a lot more money to release it to retail. That was a nice idea and all, except
I was still a college student and had no idea how to go about it. To complicate things further I was
still living up in Saskatchewan, where I was born and raised, and I was confident that there were
no major software publishers in my local area, let alone any that specialized in Amiga software. With
very few options, then, I decided to self-publish it and sell it directly to wholesalers. That meant
I would need that aforementioned retail packaging, including a manual and disc and shrinkwrapping
and everything else. To that end I typeset a manual in Latex, of all things, and printed it
on the school laser printers. I drew up a cover in CorelDraw, made a label for the floppy disk,
and so on. I took all the raw components to the university printing press and commissioned a batch
for my first run. The big question was how many copies to invest in? How much faith did I have
that I'd be able to sell them all and recover my investment? Much to the consternation of my Dad,
who was way more cautious than I was, I ordered 20 copies of everything. When it was ready for pickup
my girlfriend and I took everything home to staple and fold and assemble it into retail packages.
Then I went about selling it, from messages on BBSs and Usenet to contacting wholesalers from
the backs of Amiga magazines. I sold one or two here or there at first and eventually built some
momentum by word of mouth. I bought extra floppy drives for my Amiga so I could write four disks
at a time as the sales volume slowly increased. I was selling batches of 50 at a time to the bigger
software houses and ultimately sold a few thousand copies. At perhaps fifteen dollars per copy of
profit I eventually managed to put myself through college, pay off any remaining student loans,
and put a ring on my girlfriend's finger. When I was trying to secure an internship at Microsoft
originally back in 92, I actually established my first contact by reaching out to one of my
HyperCache customers who had registered the software with a Microsoft.com email address.
They kindly gave me the contact emails of a few Microsoft dev managers that were hiring,
and I reached out directly. That led to a phone screen which led to an interview which led
to an internship which led to a full-time interview and ultimately to my job there,
so between paying for college and getting me my first job, it would be hard to overstate the
importance of HyperCache to my future! Oh yeah, I also did my undergraduate honors thesis on it. So,
I got no shortage of mileage out of it, at least. This whole software on the side backstory
is important in that it might allow you to you understand why then, when I got to Microsoft,
I was actually bold enough to ask for a moonlighting clause in my original employment
contract that would allow me to continue selling my own software directly to consumers as I had
been doing for years. It turns out Microsoft had no objection and they cheerfully agreed,
with the stipulation that I would get my manager's approval for each project, and that
of a vice president if it were directly related to my day job. Made sense to me, and I took the
deal. If you've been following the Windows War Stories series, then you'll recall that as noted,
Task Manager was one of the things I started at home on the side upon getting to Microsoft as a
full-time developer. My plan had been to release Task Manager the same way that I had HyperCache,
but when it became a favored tool of my fellow developers on Windows NT, I decided to be a team
player and just contribute it to Windows, which I did, for free. No one offered me anything and I
didn't expect anything for it. I figured if it were good for the product, it would be good for
the stock price, and that's mostly what mattered to me at that time! Plus, I got to work on it
as my day job for a few months thereafter and had a great deal of fun doing it, so I've never
regretted that decision. Except in one regard, and that's how my other shareware project was handled:
ZIPFolders. ZIPFolders was new and unique in that whereas the conventional archive programs
like WinZip were standalone applications that loaded ZIP files and operated on them,
ZIPFolders was actually a shell extension. That means rather than being its own program,
it gave the existing Windows Explorer the ability to browse down into and drag and drop to and from
ZIP files as though they were merely folders on your disk. It made working with them seamless.
And yet, ZIPFolders was an obvious idea, in a way. Once I realized that the explorer could enumerate
over any namespace that defined an IShellFolder interface, I knew that all I had to do was write
such an interface that exposed ZIP archives in the right way and the shell itself would do the rest
of the UI work. I'd be on the hook for managing the compression and extraction and all of the
IO operations, but the shell would do all of the pretty visuals, icons, drag and drop, and so on.
I started tinkering with it while I was still over in the OLE/RPC team and it really spurred my
interest in the shell itself. In fact, working on ZIPFolders is what ultimately led me to interview
for and move to the NT Shell team. Now you might think if you're a developer working at Microsoft
complete with access to the source code for explorer and shell32 right on your desktop,
that it would make writing a shell extension a lot easier. Ultimately, I got most of my information
about the shell extension architecture from an article in Microsoft Systems Journal Magazine.
I remember very clearly that the icons said "BIG GAK". They had a little namespace of BIG GAKs that
they exposed for the shell to enumerate over, and that was all I needed to see.
From there I knew enough that I could make it work for zip files. It turned out that there
were two things that made the type of shell integration that I was attempting difficult:
One is that, at least at the time of Win95, if you grab a bunch of icons and drag and drop them,
their arrangement onscreen will be remembered, and they'll be laid out the same where you drop them.
Unfortunately, it wasn't technically possible for a non-filesystem folder to provide that
arrangement information back them, so all your icons just got default positions. That's
fixed today, I believe, with new support in the shell. The second issue was that for the shell's
copy engine to be able to copy the expanded files to their final location, they have to
exist somewhere in the filesystem first, which was a royal pain. You couldn't copy from an arbitrary
IShellFolder to another, they both had to be filesystem folders. So, I was forced to construct
a temporary copy of the files you are extracting in the temp folder and then move or copy them from
there. That's the main reason why its slower than most other contenders - it does twice
the disk IO. It's possible that this temporary staging copy issue has been addressed as well,
but I know it's still no speed demon, so I don't think it has. If it indeed hasn't been fixed, they
could go a long way towards increasing performance in this area by doing so. Both of these could have
been addressed in the shell back at the time, it I just wasn't comfortable asking for fixes
or features related to my own side projects, so I just lived with the limitations. With
my new super zip file handling shareware almost ready to go, what to call it? I'd been using the
working title of ZIPExplorer, and so that is what I went with. Within about a month of releasing it,
though, a problem: another zip program was released by a developer out of Japan also called
ZIPExplorer. While I could get wrapped up in trademark and title claims, particularly with
it being international, I figured the best move was just to change the name, particularly since
the other program was sort of giving mine a bad name... it wasn't really high quality. I wasn't
attached to ZIPExplorer as a name, so it easier to switch than fight.
I decided on the new name of VisualZIP and went about my usual business of trying to
sell it direct to end users. This time around I opted to go the shareware route because I
was competing with WinZip and similar shareware products, so I thought it made the most sense.
Within a few months I was selling about a dozen copies a day, making up the disks
and labels and mailers - basically everything except the shrinkwrapping - and then sending
them on their way by post. It was a nice hobby that brought in a few extra dollars
every month and gave me a creative outlet at a time when most of my day job was porting work.
That is when it got complicated. The software developer in Japan that I mentioned earlier
somehow knew or directly reached out to a senior developer on the Win95 shell team.
I'm not into naming names, so I'll just call him Hiroshi. They complained vehemently that it was
unfair that they should have to compete with a Microsoft employee in the shareware space.
Hiroshi, apparently, was sympathetic and agreed with their stance. Did he then swing by my office
to chat about our philosophical difference? No. Did he contact my Manager to express his concerns
formally? Nope. He started with the nuclear option - he went directly to Human Resources
to have me summarily fired from Microsoft. When I heard what was going on I was of course worried,
but perhaps not as worried as I should have been at the time. My manager and a senior developer
on the team went to bat for me and wound up spending a few sleepless nights over it, no doubt.
They pointed out that I had obtained permission to work on it in advance, and had been doing
so quite openly. I hadn't used any trade secret or proprietary knowledge in my code,
since most of it had come from a public MSJ sample anyway. Combined with the moonlighting
rider in my contract, it seemed to me, at least, as though I had all my ducks in a row.
That's when Hiroshi struck a potentially fatal blow: he noted that a shell extension,
since I had since changed teams and now worked on the NT shell team, was close enough to my day job
that I should have vice presidential approval. If nothing else in life, I'm a fixer of problems.
For reasons related to the way I'm wired, I simply cannot wait. I perseverate. I will phone, call,
contact, or harass and annoy whoever I need to in order to force a decision or resolution
to a problem that is perplexing me. I was self-aware enough to never go around my own boss,
which is most always bad form, but not much would stop me from going around yours if I needed to.
To that end I decided I should escalate it all the way to our Senior Vice President,
right below Bill Gates. I'd get my answer, and it would be swift. From all appearances,
his first review of the matter was similar to my own, but given an external software company had
complained, he decided it should go to Microsoft Legal to be sure. He looped in the general counsel
of the entire company, our top attorney, to render a formal internal legal opinion on the
matter. This all happened within the span of a single morning following my request.
What came back was one of the shortest and sweetest emails I'd ever read. It was from the
general counsel and it was six words long: I have no problem with this In the Microsoft parlance of
the day, I was golden, and Hiroshi was impotent. I was free to continue on exactly has I had been.
And ironically it turned out to be a very good thing this had transpired, because a few months
later, the whole thing was about to get even more complicated than it had been! That's because I was
at home early one morning getting ready when I got a call from work. It was somone in the Acquisitons
department, and she wanted to confirm that I was the creator of Zipfolders, as Microsoft wanted to
purchase it from me for inclusion in the operating system itself. Now my immediate thoughts were
probably exactly what your first thought was: I wonder what Microsoft would pay for such a thing?
There was only one way to find out, so I offered to stop by her office to talk about it. That seems
to spook her; she demurred and said that I should talk to Microsoft Travel and the legal department
first. Now I'm a little mindblind and all but I had no idea why she was acting like it was so odd.
At the time I lived within walking distance of Microsoft Campus, so why would I need the travel
department? After a few minutes of uncomfortable back and forth, we realized the problem.
She had no idea that I worked for Microsoft, just as she did! She just had researched the
product and cold-called the author, who happened to be me, and reached out about the acquisition
not knowing that I worked a few hundred feet away. So, what DOES Microsoft pay for something
like that? Well, it turns out to be a nice little windfall but not a giant payday.
That's in part, do doubt, because I was in a tough negotiating position: if I did
not sell it to Microsoft, they would either (a) develop their own zip software, or more likely,
(b) buy a different one. No matter which way they went, I'd have to stop selling my own or leave the
company, because I couldn't exactly compete with my own employer once they'd entered that market.
As a result, I cheerfully accepted their first, best, and only offer. It was enough to purchase a
quality Chevrolet motorcar, but only a pre-owned one. In the end, I showed up on Monday in a red
Corvette and ZipFolders has been part of Windows ever since. The final hurdle was the code itself.
ZIPFolders wasn't a passion project, something carefully crafted as a love letter to my future
coding self. It was just a quick and dirty shell extension, the first one I'd ever written,
cobbled together from a sample and it wasn't the tidiest code in the world. It also wasn't
code that I ever expected another human to ever see! Furthermore, it was based on MFC, which they
were unlikely to accept for an operating system component. I wasn't about to rewrite the thing,
but I did clean it up to the extent that I removed the MFC dependencies by writing a little class
layer of my own that substituted for the core MFC functionality that I had been leaning on.
On the plus side I was an NT developer at heart, so the code was already 32-bit,
Unicode, worked on RISC and was ready to roll in the NT shell as well as the Win95 side.
ZIPFolders actually first shipped in the Windows 95 Plus pack. I think it became part of the
operating system with Windows XP and Windows 98, where it remains to this very day. Somehow in my
career I was tasked with projects that, it turns out, would have a very long lifespan. 25 years
is an eternity in computer software, and with things like Task Manager, Zip Folders, Format,
Product Activation even the desktop shell itself, I seem to have several components that are still
up and going to this very day. And I guess that's all-good news when you go to make a video series,
so please be sure to subscribe to my channel if you find this kind of thing interesting,
entertaining, or informative. That way I will be encouraged to make more episodes and you'll be
notified of their availability when I do so! Win win. Speaking of which, I am not selling anything,
and I don't have any Patreons; I'm just in this for the subs and likes, so please be sure to
leave me one of each before you go. Thanks for joining me out in the shop today, and as always,
in the meantime and in between time, I hope to see you next time here in Dave's Garage.