The History of Windows 95
The Dawn of Microsoft's Golden Age
In February of 1992, the development of Windows 3.1 was nearing a close, and the Windows team was trying to figure out what their next steps would be. By the 5th of March, the team knew that they’d be focusing on desktops, laptops, mobile, and pen with NT taking servers and workstations. The team also knew that they needed to address three major areas: UI, hardware support, networking.
There was a ton of stuff being worked on at this time (and through the rest of the 1990s) within Microsoft. Just within the Systems group (as distinct from the Apps group) Janus would release on the 6th of April as Windows 3.1, Astro would release in March of 1993 as MS-DOS 6.0, Winball would release in October of 1992 as Windows for Workgroups 3.1, Jaguar while being worked on at this time would never see an independent release (more on that in a bit), and then came the next windows projects: Cougar, Panther, Rover, NT, and Cairo. Cougar was a project to build a fully 32 bit Windows kernel, evolving the Windows 3.x 386 mode kernel for 386-class and higher machines. Panther was a project to port the win32 API to this new kernel. Rover was a project to make a mobile computing version of Cougar/Panther. The NT project was Microsoft’s first steps into a dedicated workstation and server release of Windows, and it would release in July of 1993. Cairo was a project for the next major release of NT, and it would mirror many of the changes to Windows from Cougar/Panther (and the reverse is also true). This system comprised of Cougar and Panther was known as Chicago. The Cougar portion of this system was vital to making a more stable and robust Windows. Beyond being a fully 32 bit protected-mode system, this new kernel would feature dynamically loaded and unloaded protected-mode device drivers. This system would also be threaded and fully support any MS-DOS program running from Windows (where previously in Windows 2 and 3, programs that wrote directly to video RAM would require Windows to terminate and stay resident, one side effect being that in really big Command and Conquer maps, the memory space of Windows would be overwritten and as a result Windows would not restore on exit).
These moves were huge for Chicago and for Microsoft more generally. When Chicago was taking shape in 1992, MS-DOS was still Microsoft’s bread and butter. Brad Silverberg was relatively new to Microsoft, but he had a very strong background. He had worked at Apple on the Lisa, and he had worked at Borland. By early 1992, he was the project leader of Chicago and the SVP of Microsoft’s personal systems division. In an internal Microsoft memo Silverberg said:
Lest anyone be confused, ms-dos is the the bedrock product of the company, accounting for a very major portion of Microsoft’s profits (ie, stock price). Further, it is under strong competitive pressures (I am more inclined to say “under attack”) from DR-DOS and IBM. We must protect this franchise with our lives. Short term, that means continued aggressive marketing plans. In addition, it also means we need to get yearly product releases out so we put the other guys on a treadmill, rather than be put on the treadmill. As a result, we are going to release a new version of MS-DOS this year, chock full of new goodies, while we move with full-speed toward cougar.
That new MS-DOS release was MS-DOS 6 mentioned earlier. The most visible and important new “goodies” referenced by Silverberg were disk defragmentation, disk compression, anti-virus, a new backup system, and file transfer tools. MS-DOS 6 was released in March of 1993 with updates being pushed until June of 1994.
I bring this up to try and portray where Microsoft and the industry were at this time. IBM compatible computers outnumbered all other computers by nearly 80 million units. MS-DOS or a compatible DOS system was installed on almost all of them (with OS/2 or Linux being rare). Most software on these computers ran in 16 bit real mode. Most hardware was configured with dip switches, and the config had to match that setting exactly. Loading a driver required knowledge of autoexec and load-high tools. Windows 3 was a huge success, and Windows 3.1 was an even greater success. Despite these successes and the resultant changes in Microsoft’s future plans, MS-DOS was still the market leader in PC operating systems by a very wide margin. Windows 3x did ameliorate some problems, but the old systems remained dominant. Due to this, Microsoft absolutely needed to ensure that MS-DOS was still part of their future despite having a more technically advanced system in NT. Adding to this, most computers that home users were purchasing were incapable of providing a good experience with NT. Chicago needed to provide the best experience possible for win16, win32, and MS-DOS applications on modest hardware, and it needed to be a noticeable improvement over Windows 3. If Microsoft failed in either case, they would be yielding ground to Digital Research or to IBM.
Ultimately, the need for backwards compatibility meant that some 16 bit code remained in Chicago. Without this, the backwards compatibility wouldn’t have been as good. In hindsight, given that IBM’s OS/2 could run DOS and Windows software, this was a very good decision on the part of Microsoft.
Chicago was structured in a way that is similar to Windows for Workgroups 3.1 (386 enhanced), but is far more refined. There are a large number of virtual device drivers (VxDs) running in 32 bit protected mode alongside virtual DOS machines (VDMs) running in a virtual real mode. These virtual device drivers are used for real physical hardware, for emulating devices for virtual machines, and for providing services to other software. Three of these VxDs comprise the very heart of Chicago: Virtual Machine Manager (VMM32.VXD), Configuration Manager (CONFIGMG), Installable Filesystem Manager (IFM). VMM32 is essentially the Chicago kernel. It handles memory management, event handling, interrupt handling, device driver loading and initialization, the creation of virtual machines, and the scheduling. CONFIGMG handles plug and play. IFM coordinates filesystem access, provides a disk buffer, and provides a 32 bit protected mode I/O access system. This bypasses MS-DOS entirely and was first seen 386 Windows 3 releases.
The win32 API for Chicago was in three separate modules each of which contained two components (one 16 bit and the other 32 bit). Memory, processes, and filesystem were handled by the kernel (KRNL386.EXE, KERNEL32.DLL, VWIN32.VXD). User interface and its various functions were handled by “User” (USER.EXE, USER32.DLL). Device independent graphics drawing was handled by Graphics Device Interface (GDI.EXE, GDI32.DLL), which was first seen in Windows 1.
Unlike all prior Microsoft Windows versions (except for NT 3 which had its first release before Chicago), MS-DOS was not kept in memory when loading Windows. All 16 bit applications that relied on any DOS system calls would be redirected to a 32 bit Chicago routine. Additionally, no MS-DOS drivers are required for DOS applications in Chicago. For those newer 32 bit protected-mode applications written for MS-DOS compatible environments, they would run with protected-mode emulation in Chicago. With prior Windows releases, we can see two operating systems running somewhat simultaneously on a single computer. With Chicago, there was a single operating system with three distinct personalities: DOS via VDMs, win16, win32. MS-DOS did get a new version with Chicago, but this version would never be sold separately by Microsoft. This had initially been intended, but somewhere along the way, that idea was scrapped. MS-DOS 7 would only be released as part of Chicago effectively serving as a boot loader. MS-DOS 7.1 would be released with later updates to Chicago. At any other company, I doubt this would ever have happened. As noted, MS-DOS was Microsoft’s money maker and Microsoft chose to kill the product betting everything on the success of Chicago.
In Hardcore Software: Inside the Rise and Fall of the PC Revolution, Steven Sinofsky writes:
Microsoft’s core Windows project for consumers was Chicago (eventually Windows 95). Chicago would bring the compatibility and ecosystem support enjoyed with Windows 3.1 together with the new Win32 API, while at the same time addressing ease of use shortcomings of Windows compared to Macintosh. Chicago had the goal of being a PC that was better than Macintosh plus bringing with it all the benefits of Windows that had cemented leadership in the market.
What made a PC with Chicago better than a Macintosh?
By late 1992, over 50 million units of Windows 3x had sold, and Microsoft had ample knowledge of the issues intermediate and advanced users had with Windows. New users, however, were not quite as well understood. The ship date was initially very aggressive (18 months, but this goal was missed), which worried the team assigned to design this new user interface to make the PC better than the Macintosh. The team consisted of roughly 24 people, 12 designers and 12 programmers to implement the designs. They knew that the traditional waterfall method of software development would be an impediment to the launch timeline, and they chose to take an iterative approach instead. They would come up with an idea, implement it, user test it, take the feedback, do it all again. One member of this team, Kent Sullivan, has reported that the two goals for the team were to “make Windows easier to learn for people just getting started with computers and Windows” and to “make Windows easier to use for people who already use computers-both the typical Windows 3.1 user and the advanced, or ‘power’, Windows 3.1 user.” The first usability studies were done in Microsoft’s labs. Three to four users representing beginners and intermediate users were bought into the lab and completed tasks with each prototype and then answered questions that were either broad (do you like it?) or specific (after ten minutes did you figure out how to do X?) depending upon the tasks at hand. In the end, it took more than three iterations each to get the Start Menu right, to get the task bar right, and to get the open/save dialog boxes right. Printing and help were also heavily tested and changed several times. Later in the development process, Microsoft started a public beta to get more refinements from a broader set of users. These betas for Chicago were $49.95 (around $103 in 2023) and shipped on 37 floppy disks. All of this meant that Chicago was the most heavily user-tested product Microsoft had ever made.
In late 1994, Chicago’s release name was made final: Windows 95. In the final beta, the look and feel also became finalized.
In the run up to release, Microsoft embarked on its most ambitious marketing campaign up to that time. Microsoft spent $3 million (around $6.2 million in 2023) on rights to the Rolling Stones’ song “Start Me Up” (referencing the Start Menu) for a commercial, hired Jennifer Aniston and Mathew Perry to do a cyber sitcom, lit up the Empire State building in NYC with the Windows logo colors, hung a 330ft banner down the side of the CN Tower in Toronto, and ran tons of ads in magazines and on TV.
On the 24th of August in 1995, Microsoft released Windows 95 for $210 (around $433 in 2023). The New York Times referred to the launch as “the splashiest, most frenzied, most expensive introduction of a computer product in the industry’s history.” Windows 3 had transformed Western culture into a technological culture (with every major news outlet having dedicated technology reporters, and with the tech sector having many dedicated press outlets), and by the time of the Windows 95 launch had sold 100 million copies. Windows 95 cemented that change.
People lined up around the world for midnight releases. In the first four days, Windows 95 sold 1 million copies. This would balloon to 40 million copies in the first year.
Given the hype and incredible sales numbers, how did Windows 95 do? Microsoft Windows 95 brought in the future of computing in a big and in a real way. The support for plug and play coupled with high sales numbers meant that ISA died out along with jumpers and dip switches, and PCI with a single driver installation via a GUI became the standard. Real mode applications died rapidly and 32 bit protected-mode win32 applications became normal and expected. With updates that brought Internet Explorer (or the Plus! add-on pack), Microsoft Windows 95 brought the World Wide Web to the masses. PCs running Windows 95 also brought homogenization to home computing. The dominance of this single platform meant that the Amiga, the Atari ST, the BeBoxes, and even the Macintosh were on their way out… at least until Microsoft stepped in to help Apple survive. Not even workstation vendors were immune to the rise and dominance of Windows 95. The push to 32 bit computing that Windows 95 brought meant that the gap between workstations and PCs was narrowing. Eventually, the likes of SGI, Sun, and DEC would be outcompeted by rather modest Windows PCs. This operating system also brought about one other very interesting result, PC games became Windows games, but that’s a tale for another day.
On a side note, I now have readers from many of the companies whose history I cover, and many of you were present for time periods I cover. A few of you are mentioned by name in my articles. All corrections to the record are welcome, feel free to leave a comment.