My History of Windows

Introduction

Windows XP is Microsoft's first real operating system as far as I'm concerned. Whether some piece of software counts as an OS is an admittedly subjective determination, but my reasons for saying this are pretty simple. It seems to me that the most fundamental purpose of an OS is to run software. Yes, to respond to the howls of those in the know, an OS must manage memory, keep track of processes and threads, manage I/O devices and ports, and tend to all that other positively-rotten-with-technobabble business, but these things are but means to an end. That is, no user buys an OS because he wants it to take care of these things; rather, he buys it because he wants it to run his software, and doing those things is simply part and parcel of accomplishing that larger goal.

In light of this yardstick, none of the other Microsoft OS products have ever run software reliably and repeatably enough to count as an OS. DOS was a joke, barely more than a glorified program loader that couldn't handle much of anything. All of the early variants of Windows were also jokes. What separated them from DOS, really, was that they weren't as funny; i.e., they crashed more, required more resources, and ran slower. Windows 95 was finally a step in the right direction, rendering it possible to name files—I'm sorry, but eight characters with a three character extension does not count as a name, but maybe a keyword—do genuine multi-tasking (i.e., preemptive not cooperative), etc. Windows 98 was better still. Unfortunately, things went down hill from there. Windows ME sucked rocks three ways: hard, fast, and continuously. Seriously, that embarrassing dung-heap of code should never have been released. I guess Microsoft really needed the money.

Along alternative lines, I was an early adopter of Windows NT. But it was no bed of roses in those days. When you needed support for hardware or software, technicians would hang up on you the minute they found out you used Windows NT. Heck, not even Microsoft would support their own product unless you were willing to pay a few hundred dollars for each support incident. After Windows NT 4.0 came out and it still couldn't install the most basic of hardware, run games, or run about half my utilities, I said to hell with it and went back to Windows 98. I didn't update again until Windows XP came out, but I've now converted all of my machines to Windows XP without regrets. That's where I am today, but it was a long road in getting here, as the following history shows.

DOS

It seems appropriate to start my history of Windows with DOS, because it wasn't until the release of Windows NT in 1993 that DOS was no longer the foundation of Windows. Oh, Microsoft tried to tell us all that Windows 95 was a new operating system, but as plenty of writers of the time (most notably Matt Pietrik) discovered all-too-clearly when digging around "under the hood", all the old DOS stuff was still in there. Mind you, DOS wasn't a real operating system by any stretch of the imagination. It couldn't manage any memory to speak of, it supplied no virtualization of hardware, and it had a positively nutty application programming interface (API), if you can call it that, requiring programmers to learn a plethora of ridiculous interrupt codes. In short, DOS was a glorified program loader.

Still, DOS had its charms, first among which was the wonderful fact that if you knew your stuff, you could typically make things to work. I know many people consider editing configuration files the devil's own pastime. Me, I was never particularly intimidated by a CONFIG.SYS or AUTOEXEC.BAT file. Maybe that's why I could always get my stuff to work eventually. I learned all about batch files. I used the debug utility to accomplish simple tasks. I learned all the functions of the command interpreter and came to rely on JP Software's 4DOS product like my own right hand in getting daily work done. Things were pretty good overall. Sure, WYSIWYG wasn't yet a buzzword, and we had to screw around just getting bold and italic text from our word processors—and then only on the printer, not the screen—but things worked.

Probably the greatest challenge of that era was getting new hardware to work. Typically when you came home with some new bit of technology, you had to copy a file or two to your hard disk and then edit your CONFIG.SYS file to load the relevant driver. Sure, that wasn't as easy and idiot-proof as turning on the computer and letting the OS recognize the hardware and set it up for you, but it sure did have its benefits. Whereas it can be just about impossible to get the latest versions of Windows to work with a device that isn't recognized properly, for example, it was merely a matter of editing a text file under DOS.

Windows 1.x

When the first version of Windows came along in 1985, I thought it had to be some kind of joke. Seriously, it was nothing more than a program launcher with a pretty face. I couldn't believe Microsoft even bothered for two reasons. First, it wasn't nearly as powerful as any of the existing multi-tasking programs of that era, programs like Desqview, which did honest-to-God multitasking pretty well. And second, it wanted a heck of a lot more hardware to provide less functionality than its competitors. Imagine the marketing brochure: "Less functional and more expensive—all in one!"

Perhaps that explains why almost nobody wrote any software for the first version of Windows. If you made the mistake of buying it—I didn't, but the company at which I worked at the time did—you were pretty much stuck with the handful of applications that came with it. Microsoft's marketing literature said of it that "Windows will instantly deliver you a more productive present. And a leap into the future." That was pure, unadulterated crap, as Windows 1.x wasn't worth anything. No, as I think about it, that's not true. I did use eventually use it as a doorstop. It just wasn't useful as software.

Windows 1.x didn't even have anything resembling what is by now the familiar WIMP interface. It had no windows (unless you consider the cutesy-colored background a "window") and no icons. Sure, you could use your mouse with the cursor provided, but it amounted to nothing more than a program launcher, the so called "Windows Executive". The paint program was interesting, I guess, but the Macintosh had already been there and done that. And much better to boot. Are you getting the idea yet that Windows 1.x was something of which Microsoft should have been ashamed?

Windows 2.x/286/386

The second release of Windows debuted in late 1987, and it was a significant step forward. The overlapping windows, icons, and other features of the admittedly limited GUI were at least functional, and the first genuinely useful Windows applications appeared during this period. I still remember the first version of Corel Draw. I was working part time at Ford Motor Company, and we had a copy that we used for engineering diagrams. It was quite useful. It was also during this time that I ditched WordPerfect in favor of Microsoft Word and ditched Borland's Quattro Pro in favor of Microsoft Excel.

Still, Windows 2.x was as ugly as it was limited, and it wanted a lot of hardware for those days. In exchange for all that money spent on a fast system, you got the ability to run one DOS application at a time, just like the much cheaper and less crash-prone DOS. This may not seem like much of a limitation, mind you, but remember that the vast majority of the applications in use at that time were still DOS applications. There were some useful Windows applications around, as I've already noted, but the vast majority of users were still spending their days in WordPerfect, Lotus 1-2-3, and dBase. There was no publicly popular Internet, and most folk didn't even have email. If they did, it was typically through CompuServe or some other service with a DOS-based front end and a private backbone.

It wasn't until Microsoft released Windows/386 that things really started to get interesting. To prevent confusion from ensuing, Microsoft renamed Windows 2.x to Windows/286. Functionally, Windows/386 was almost identical to Windows/286. The one, big difference was that Windows/386 could actually multi-task DOS applications if you had the extended memory for it. Ah, that takes me back. Do you remember the days of fussing around with memory? Do you remember the differences between upper-memory blocks, expanded memory, and extended memory? I sure do. I spent more hours fussing with all that crap than I want to admit. Suffice it to say that Windows/386 was actually useful. Of course, it was only now catching up to what Desqview had been doing for years, but Windows/386 went further in its graphical interface and ability to run the increasingly popular Windows applications. It was a harbinger of things to come.

Windows 3.x

I still remember the release of Windows 3.0 in May of 1990. I was busy working at G.R. Potts & Associates, a small hardware and software consulting company in Flint, Michigan. It was my first job out of college, and the company was in the process of going bankrupt. Lord, I learned some hard lessons very quickly at that job. When Windows 3.x came out, I remember telling my boss that this was something we wanted to get into in a big hurry. We didn't have the money to buy many copies or the developer's kit, but I studied on my own nevertheless, convinced that this was going to be The Next Big Thing™.

As it turns out, of course, that was one of those rare occasions when one of my predictions was correct. The great thing about Windows 3.0 was that it finally ran multiple DOS applications simultaneously, preemptively, and with some hardware virtualization for a modicum of safety in the protected mode of the Intel line of CPUs. Better yet, the greatly increased stability of Windows 3.0 ushered in a mad scramble for developers to get into Windows programming. Most companies started developing a Windows version of their software, if they hadn't already. Those that were slow to adopt generally went the way of the dodo, as applications like Borland's Quattro Pro or Lotus 1-2-3 demonstrated only too clearly.

It was also under Windows 3.0 that the majority of my nightmares began. Internally, that operating system was a bloody joke, and developing for it was like trying to extract an elephant through a straw; i.e., all it does is break the straw and annoy the elephant. Seriously, Charles Petzold's original edition of Programming Windows is responsible for more God-awful, switch-statement-infested code than any other programming book in history. We should all be ashamed of those days. The only thing I will say in my defense is that I knew enough to study software design and stop writing such awful code. Unfortunately, too many programmers took that as the wave of the future, and the result was the buggiest bunch of applications I've ever seen.

Microsoft suddenly found themselves in an awful situation, namely, that applications were crashing left and right on people's shiny new Windows-equipped PCs. Plenty of the problems were Microsoft's fault, mind you, but in all fairness many of them weren't entirely their fault. Let me explain for the nonprogrammer. One of the most oft-used functions in the Windows API is CreateWindow. That function takes a bunch of values and creates a new window in accordance with those values. During the Windows 3.0 era, however, Windows itself did not validate the data passed to its API functions in any kind of comprehensive way. So if a program passed a bad value into the OS, to CreateWindow or any other API call, the result was quite frequently a crashed or hung computer. For those inclined to absolve Microsoft of responsibility, let me point out that it's been considered good programming practice since the earliest days of computing that input data be validated. It was positively negligent of Microsoft not to do so.

Fortunately, Microsoft removed its collective head from its collective nether-region in April, 1992, with the release of Windows 3.1. Windows 3.1 added parameter validation to API functions—can you believe the clowns in Redmond actually had the chutzpah to tout parameter validation as a new feature in their Windows 3.1 marketing literature?!—standardized some dialog boxes, fixed a veritable host of bugs, and added some new features as well. The Windows bandwagon was rolling along at full speed at this point, and I (happily) bought stock in Microsoft prior to the release of Windows 3.1. If only I'd bought a few years earlier I would be able to retire now (grin).

At any rate, one absolutely gaping hole remained in the product, namely, networking. Yes, you could make a network functional with Windows 3.0 or Windows 3.1, but it was neither easy nor cheap. Remember, those were the salad days of Novell. And yes, Novell was very functional and relatively easy to use, or at least I thought so, but it was very expensive. The peer-to-peer network model was rare to say the least. If you wanted a decent network, then you really needed to dedicate a computer to act as a server and had to pay lots of money for Novell software. The only other decent alternative, in my estimation, was Artisoft's Lantastic. Even that wasn't cheap, but it was cheaper than Novell, though much less reliable in my experience.

Fortunately, this problem was addressed shortly thereafter with the release of Windows for Workgroups (WfW) in October, 1992. With WfW, networking became simple enough that even Joe User could make it work. Oh, you could still have an awful time if you wanted to put together a serious network—why do you think network managers were paid so much during this era?—but if you had merely a handful or machines or so to administer, WfW was more than enough right out of the box. Windows was finally beginning to come of age, being functional enough to run quite a large number of applications reasonably well, and finally embracing enough networking that it played well with others.

Windows 95

Then everything changed. When Windows 95 was released in August of 1995, it was something genuinely new under the sun, though not in quite the same way that Microsoft claimed it was. The interface was something genuinely new and interesting, far more functional in many ways than that in previous versions. Whereas the previous versions of Windows simply ran a shell program (viz., Program Manager or PROGMAN.EXE), Windows 95 boasted a new approach with an integrated shell.

Of course, Microsoft was still lying to its customers; i.e., they claimed that DOS was no longer in the picture. This was false as many columnists and under-the-hood spelunkers demonstrated, sometimes in positively excruciating detail. Still, Microsoft can be forgiven, for obvious reasons I think, if they were trying desperately to disassociate Windows with DOS. Think about it: would you want it known broadly that your latest and greatest high-tech wonder was still built on top of a 10+ year-old code base?

While Windows 95 was definitely prettier, and finally brought real (i.e., pre-emptive rather than cooperative) multi-tasking to Windows, it also included a host of questionable design decisions. The Windows registry, for example, which was intended to address concerns with the vulnerability of initialization (*.ini) files, made it far more difficult for users in the know to edit the settings that control their machine, and made the entire system far more vulnerable insofar as a single file corruption could essentially prevent Windows from working. Oops. Gee, I sure am glad we got rid of those nasty initialization files.

Overall, though, I have to give Microsoft credit for doing something genuinely difficult, namely, bringing a somewhat 32-bit operating system to life on top of DOS without breaking too many applications. Seriously, Windows 95 was surprisingly backward compatible. Heck, it even made a better gaming platform than DOS did for DOS games! I still remember how pleased I was to see that I could play Darklands (a rather old DOS-based game that needed some ridiculous amount of conventional memory to run along with expanded memory) under Windows 95, when I couldn't play it under DOS!

At any rate, Windows 95 was a good step in the right direction. What it still lacked was stability and completeness. It crashed a lot, it could still be brought down by a single errant DOS or Windows application, and it got some of its new features roughly half right (e.g., plug and play, which should have been named "plug and pray" instead). A second version of the operating system, Windows 95 OEM service release 2 (a.k.a. Win95OEMSR2) fixed several bugs, and addressed a few important deficiencies, but it still was essentially Windows 95 at its core.

Windows 98

Finally we come to the most stable and useful version of Windows until the release of Windows XP many years later. Yes, I realize that various versions of Windows NT were more stable than Windows 98, but I just couldn't stand using them for reasons I'll make clear in a bit. Though the initial release of Windows 98 in June of 1998 was somewhat buggy, Microsoft really made progress. Plug and play actually worked more often than not, and that was a positive change. The OS managed its own resources far more efficiently than previous versions, though it was still a band-aid compared to the Windows NT code base.

Better still was the subsequent Windows 98 Second Edition (a.k.a. Win98SE), though it was really pretty lame of Microsoft to charge essentially full price for what was a glorified service pack. In my view, that's one of the most shameless examples of Microsoft charging customers for fixes to what was broken in the first place. Yes, Win98SE did add internet connection sharing and a couple of other small features, but I think it tolerably clear that these things were intended to be part of the original Windows 98 release and didn't make the cut. Whatever the case, Microsoft definitely screwed its customers by wanting yet more money for Windows 98.

The best thing about Windows 98, in my estimation, is that it finally provided a standard for vendors to target. In those days, you couldn't always count on having drivers or any support for Windows NT. You couldn't always count on things working under either flavor of Windows 95. But you could feel confident that just about any piece of hardware or software you bought was going to work with Windows 98. Because of the limitations of Windows NT, I ended up staying with Windows 98 until early 2002 because it was honestly the best option available.

Windows ME

Like almost the entire decade of the 1970's, Windows Millennium Edition (or Windows ME for short) should never have happened. It's release date, September 14, 2000, is a day that should live in software infamy. The short summary is that Microsoft screwed everybody with Windows ME. They screwed vendors because of the new driver model introduced, which was touted at the time as a step on the road to driver nirvana between the 16- and 32-bit code bases. Worse, Microsoft screwed customers on two counts. First, they again charged for little to no additional functionality. And second, Windows ME broke a lot of applications that had previously worked fine under Windows 98. In short, the world got to pay more money for something less functional and more unstable. Like I said previously, "Less functional and more expensive—all in one!"

To say that Windows ME was a piece of crap would be an injustice to crap everywhere. Frankly, it redefined a new standard of stupidity and incompetence. It locked up more frequently than Windows 98. It ditched support for important features. It broke lots of applications that previously ran just fine. It pretty much guaranteed that you would face fear, uncertainty, and doubt (FUD) when trying to buy new hardware, as you had no reason to believe that good drivers would be available. I guess the one "good" thing it did was generate additional revenue for Microsoft. Maybe that's what they were really concerned about anyway, eh? Let us not speak of this awful thing again.

Windows NT

Ok, it probably isn't fair to lump all of the versions of Windows NT under one heading, but I used them all, and they all had roughly the same set of problems. As such, I think lumping them under one heading helps communicate effectively without making this article longer than it already is. The first time I tried Windows NT was in 1993, shortly after it had been released—at version number v3.1, I should note, in order to avoid the typical critics' charge that it takes Microsoft to v3.x to get anything right.

I was both amazed and disappointed all at the same time, and that attitude stayed with me for a long time to come as regards Windows NT. On the one hand, it was a wonderful departure from Windows 3.x, which is what we were all still using at the time. I was working for other companies as a software developer at that time, and whereas I had to reboot my system at least two-dozen times each day under Windows 3.x, I rarely had to reboot because of crashes under Windows NT 3.1. It was a godsend to developers like me, who had previously struggled with the crap that Windows 3.x was internally.

Yet on the other hand, it was a royal pain in the booty to get Windows NT to do much of anything useful. Just about any device on the market had either a driver for Windows 3.x, or some way you could make it work anyway using a DOS-based driver. With Windows NT, you were pretty much out of luck. And that stayed true of Windows NT all the way through version 4.0. Whenever I called a vendor for support, they pretty much hung up the phone as soon as they found out I was using Windows NT. I document one specific instance of this in another technical article, but it happened all the time.

Eventually, I got so frustrated with the complete lack of support from third-party vendors—and from Microsoft for that matter—that I ditched Windows NT. I used it for years at home, and I was a strong booster for the product, always hoping that maybe, just maybe, Microsoft would really throw their time and energy behind it. But they never did. They just kept turning out more 16/32-bit hybrid crap (again, internally) in the form of Windows 95, Windows 98, Windows 98 SE, and Windows ME. Finally, I just gave up and went with Windows 98.

Yes, it was crap internally. Yes, I had to reboot my systems a dozen times a day (or more if I actually had the gall to play video games). Yes, I had to rebuild my system completely roughly every six months when Windows would crap all over the FAT table, the partition table, its own registry, or generally screw itself completely in some other way. But when it was working, it worked. That is, I could actually run my software and use my hardware. And vendors, insofar as they provided any technical support at all, wouldn't hang up on me immediately anymore.

To be fair, I never used Windows 2000 enough to have a well-supported view of it. But I was pretty much done with Microsoft's "new technology" by then. I was darned well going to wait until the goofballs in Redmond could be bothered to release a consumer-oriented version of it. In other words, I was going to wait until they decided to make NT work for the masses. I know that Windows 2000 finally added plug and play support (gee, a mere five years after its introduction in Windows 95), but the reviews I read said it was still pretty spotty and not a general purpose replacement for the Win9x code base. So I wasn't about to go through the hassle of switching again.

Windows XP

Which brings us, at last, to Windows XP, which was officially launched on October 25, 2001. I had been desperately wanting a replacement for Windows 98 for years, so you can imagine how seriously I read all of the material I could find on the new release. Since all the pundits seemed almost-glowingly positive in their reviews, I decided it was time to take the plunge. I bought a copy of Windows XP and installed it on my desktop machine. Things didn't quite go as well as I had hoped, as I've written elsewhere, but I eventually fixed the various problems I was having. With growing confidence, I bought another copy and installed it on my laptop, a process that went far more smoothly than I had ever imagined.

Suffice it to say that I've since bought two more copies and installed them on our house server and my wife's computer respectively. Windows XP is the first operating system from Microsoft that is actually worth buying in my estimation. To be clear, that's not to say that I suggest you acquire any other Microsoft operating system illegally. Rather, it's to say that I had previously purchased Microsoft's operating systems largely as a necessary evil. I didn't want the rotten things, but I couldn't very well avoid them if I wanted to keep my job and run my software. I actually wanted to buy Windows XP.

Though some will call it too pessimistic, I think it fair to say that the history of Windows, prior to Windows XP, has been a story of getting worse for the consumer in several ways. It started bad, and it stayed bad. Before you dismiss me out of hand, think about it for a moment. After running Windows 95 for a while, I had occasion to visit the friend to whom I had sold my previous system, complete with a copy of Windows 3.1 in place. She needed help with some problems she was having, and I straightened things up for her in pretty short order. What amazed me during the process was that her system was so much nicer to use than mine.

Yes, you read that right. Her computer booted into Windows in a matter of a few seconds. Mine took almost a minute for Windows 95 to load. To fix her problems, I needed to open the SYSTEM.INI file and add a couple of lines. My problems with "plug and pray" under Windows 95 sometimes could not be fixed at all. Sure, it let you pick an alternate hardware configuration for a device that wasn't working, but it was no longer a simple matter of putting a couple of lines in a text file to change the IRQ, DMA, base address, or other important settings. If the alternates didn't fix your problem, you were simply out of luck. Further, all of her software ran far more quickly than mine did. True, it wasn't as "pretty" as Windows 95, but when I left her house, I found myself wondering whether I should switch back to Windows 3.1 instead.

I'm dead serious about this. Remember the "bad old days" of DOS? In those days, my computer started up almost instantly. My programs loaded and ran almost instantly. Fixing any problems or conflicts was much simpler, typically requiring me to add, delete, or change a line or two in the CONFIG.SYS or AUTOEXEC.BAT files. Yes, I did have to reboot my computer from time to time, but it didn't happen nearly as frequently as it did under Windows 9x. Vendors actually had to care about the quality of their software, because it had a very limited amount of memory in which to run. True, I did have the occasional marathon troubleshooting session, but those happened every few months. With current versions of Windows, I go through such ordeals roughly every other week.

Vendors today feel perfectly free to throw gigabytes of crap all over my hard drive. This wouldn't be so bad if their software didn't run so much slower than it should in the first place. Worse, it is frequently buggy as all get out because, after all, a program that crashes won't bring down the whole system. The fact that the operating system will shut down an errant program gives software developers much less incentive to get it right in the first place. After all, they can just tell customers to start the application again. If customers complain about any of this, well, they pretty much get ignored or get told they need to buy more hardware. And, of course, buying the latest and greatest hardware brings whole new sets of compatibility problems while "solving" the original problem for only as long as it takes the vendor to release a newer, more bloated, and buggier version.

Consider a specific example. When Microsoft finally figured out that the Internet wasn't going to go away, they dove headfirst into developing Internet Explorer (IE). Within a few iterations, it was eventually a better (i.e., more functional) browser than Netscape, and these days it's really quite impressive with all that it can do. But it's slow, and it's huge, and it's a toss up as to whether it is more insecure or more buggy on any given day. In contrast, a competing product like Opera, whose authors must clearly give a damn about quality, is much faster than IE, still fits on a single floppy disk, and is quite robust to boot. True, there are some things it doesn't do as well as IE, but many of these things involve Microsoft's proprietary extensions to the standards for web development. In short, I have to wonder: are we really making any progress in terms of getting our daily work done?

Conclusion

Having said all of that, I want to close on a high note, giving credit where credit is due. Windows XP is a product that is worth buying. I do wish it ran more of my programs, so that I wouldn't have to keep a copy of Win98SE around. And I do wish it wasn't such a pig; i.e., the bloody thing wants a minimum of 512 MB of RAM to work worth a darn, and, as I've recently discovered, it works much better with 1 GB. I also wish it wasn't so utterly incapable of shutting down when I tell it to shut down. On my systems, at least, EXPLORER.EXE always refuses to shut down, and the stupid operating system doesn't have the gumption to shut it down without confirmation from me—as if telling the bloody thing to shut down in the first place wasn't enough of a hint that I want to shut down! (sigh)

Still, in spite of its warts, Windows XP is finally an operating system worth buying and using. It works with a broad range of hardware, it runs a very broad suite of applications, and, as Microsoft products go, it manages to stay relatively stable in the process. I still have to reboot my house server at least every few weeks because of various problems, but that's much better than the once or twice a day I had to reboot it under Windows 98. Here's hoping that Windows just keeps getting better. God knows it couldn't get any worse than it has been in the past. My own history with Windows has yet to end. And though I've thought seriously about switching to some other operating system, Windows XP gives me far fewer reasons than I had previously.

03/01/2003

1