November 1, 2002 Final Judgment:

1.2 meg zip file of five PDF files released by Judge Colleen Kollar-Kotelly
(unzipper and Adobe Acrobat Reader required)

November 5, 1999 recommended reading:

ASCII version (400 K) of Judge Jackson's Findings of Fact.
Also, a 128 K zip file of the same thing.


To the extent that browsing-specific routines have been commingled with operating system routines to a greater degree than is necessary to provide any consumer benefit, Microsoft has unjustifiably jeopardized the stability and security of the operating system. Specifically, it has increased the likelihood that a browser crash will cause the entire system to crash and made it easier for malicious viruses that penetrate the system via Internet Explorer to infect non-browsing parts of the system.

-- Fact 174 of 412, Judge Jackson, November 5, 1999     

June 7, 2000 recommended reading:

ASCII version (46 K) of Judge Jackson's Final Judgment.




[Cartoon]

Downsize
Microsoft




The following appeared in Madison PC Users Group's Bits & PCs, Vol.17, No.12, December 1998:

From Love to Hate: Fifteen Years of Microsoft Products

by Daniel Brandt
January 1998

I bought my first computer in 1982, a machine with built-in BASIC that could fit in an overcoat pocket. The batteries last a couple of years, and the programs I've written for it are still quite useful. Today you can't buy anything like it. You might find something about the same size and weight, but it would have icon-like menus pointing to various canned applications, many of questionable utility. It would use about 100 times the memory I have in order to do this, and needs to run much faster just to get anything done at all. Battery life suffers accordingly.

[Cartoon] While it's true that most consumers aren't programmers, this is one example of what has happened in microcomputing. Most BASICs in the early 1980s were licensed by Microsoft, and probably written by Bill Gates himself. This was fine for amateur programmers, which early computer users had to be. At least Bill's BASIC had "garbage collection" -- a type of internal memory management that automatically handles the messy chores that languages often require. And it took minimal effort to get the same BASIC programs working on different platforms, or to convert from one flavor of BASIC to another.

This "garbage collection" made it easier to do "NameBase," a database I began developing in 1982. One of the subroutines still used today was written on that pocket computer, while I was teaching myself BASIC. But I needed floppy disk drives and print-outs, so within a few months I bought a CP/M machine, which came bundled with Microsoft BASIC. Nine months later, NameBase had grown sufficiently so that Bill's "garbage collection" took too long. At that point I purchased the Microsoft BASIC compiler for CP/M ($300). It solved my problem for two additional years of development under CP/M, by collecting garbage so fast that I barely noticed it. I had nothing but praise for Microsoft.

The IBM-compatible PC largely replaced CP/M during those years, and by 1986-1987, Microsoft was enhancing their BASIC. QuickBASIC for MS-DOS appeared, and even a version for Macintosh was produced (it has never been updated, and won't work on today's Macs). Although a compiler for Microsoft's BASIC was already available from IBM, QuickBASIC did its own compilation. It was also a bargain compared to IBM's price. I retired my CP/M machine, which by then I had hacked to support five extra floppy drives, and started using an XT running MS-DOS 2.1. That left only two major problems: the 20-meg hard disks common in those days cost $400 and kept crashing, and Microsoft began spitting out numerous upgrades to QuickBASIC.

Each upgrade had new capabilities and commands, many of which were useful, but each also had some bugs that weren't in previous versions. The upgrade prices seemed reasonable at the time, so I went through QuickBASIC 2.0, 3.0, 4.0, and 4.5 in about eighteen months. In 1990 I coughed up $300 for Professional BASIC 7.0, which was nearly the last non-Windows BASIC produced by Microsoft.

Then in 1991, it became clear that Microsoft had to do something to survive. This was the time of DR DOS (a replacement for MS-DOS with some add-ons that Microsoft should have thought of long ago), WordPerfect for DOS (perhaps the best word processor ever produced), and Lotus 123 for DOS. In other words, the office applications that put microcomputing on the map were happily running on top of DOS, and none of them came from Microsoft. This DOS could be MS-DOS, DR DOS, IBM's PC-DOS, or any other DOS that came along. MS-DOS itself wasn't a big deal; in fact, a number of little companies produced programs that hid DOS applications under a menu, or did DOS functions through a better interface, or managed memory or hard disks better than DOS itself.

Who needed Microsoft? The current version of MS-DOS was then 3.3, and it was stable. Once you had it or a close cousin on your hard drive, there was no need for Microsoft. They have never been innovative with their software, with the possible exception of the garbage collector in BASIC. But they had one advantage: through licensing agreements, they monopolized the bundling of MS-DOS with new PC hardware. That's all there's to it -- the beginning and the end of the story. In fact, those who have any experience with CP/M and Unix have long known where MS-DOS comes from. In college they called it plagiarism and flunked you for it.

First Microsoft outmaneuvered IBM with the fine print in their agreement. Then they won the "look and feel" lawsuit filed by Apple. Their strategy was becoming obvious: leverage the Microsoft bundling monopoly to shift from MS-DOS to Windows. This alone would zap the Macs, and then they could gradually expand Windows by bundling major applications with it. After all, there are only a few things you can do on a personal computer: word processing, databases, spreadsheets, accounting, games, and now the Internet. Merely move Windows into each of these areas, and edge out the competition (if you can't beat them, buy them). Since anything Microsoft produced could be bundled with most of the new hardware being sold, they had sufficient instant market share to eclipse any competitor. When an upstart like Netscape makes headway with something new, just clone the upstart's product, bundle it, and drive them out of existence. It matters little if you have to give it away -- if you grab for position now, you can grab for big money later.

This is a strategy of raw power that's disguised as "giving the users the integration and ease of use that they want." It works, but not because users want it. I'm certain they don't want bloated, buggy releases that include dozens of bells and whistles they will never use, only to become obsolete within a year. It works for one reason only: those exclusive bundling agreements that Microsoft finagled with hardware manufacturers.

All this is driven by the fact that ever since Microsoft started, hardware has doubled in speed and storage capacity about every two years. At the same time, the price for a new system has decreased -- my CP/M computer cost the same in 1983 as my XT did in 1986, while my 486 cost less, and so would a new computer. For serious users, it makes little sense to use the same machine for five years; in less time than this, a faster machine pays for itself by increasing productivity. Sensational improvements in hardware are behind Microsoft's success, not innovations in software. This curious fact may someday change for one reason or another, but that's the way it's been for the last 15 years.

[Cartoon] When you buy a new machine, you aren't asked whether you prefer DR DOS or MS-DOS 6.22, or Windows 3.1 rather than Windows 95. You get what Microsoft wants you to get, even if earlier packages would be more efficient for your computing requirements. When I decided to upgrade from a 286 to a 486 computer in 1994, I did it because I needed the speed, but also because if I delayed much longer, my new machine would be bundled with the much-hyped Windows 95. I already knew that Windows 3.1 and MS-DOS were better for me. Based on the stories I've heard about problems with early Windows 95, that was a smart move. If I were to buy a new machine today, I'd reformat the disk and install all of my old software.

I first felt that trouble was brewing in 1993, when Microsoft's development tools for MS-DOS became extinct. I believe I bought one of the last Microsoft C compilers for MS-DOS that summer ($300). I'm glad I did: soon all that Microsoft offered was Visual This and Visual That -- pig packages that required better hardware than mine just to install. I'm even happier that I took the time to learn the C programming language in 1993. Two years later, when Microsoft finally realized that the Internet existed, Unix was already running almost every server out there. Unix is multiuser, which is necessary for servers, and it was built with the C language. While it's text-based and command-line driven like MS-DOS (as opposed to the graphical interface of Windows), Unix is infinitely more powerful and also faster than MS-DOS, and uses a fraction of the system resources required by today's bloated versions of Windows. It's the same story as my 1982 pocket computer, writ large.

In 1994, a public-domain version of Unix became available that can be installed on your hard disk without erasing MS-DOS or Windows. This free version of Unix (called Linux), along with free web server software (Apache), are still widely used on the Internet today. Many experts consider them superior in performance to Microsoft's Windows NT server software, which Microsoft has been developing for years in an attempt to come up with a "Unix killer." Nevertheless, corporations are going with Microsoft, perhaps because NT is priced lower than commercial Unix, and the promise of "consolidation" under Windows appears attractive to buzzword-hungry bosses. No network manager at any corporation would dare suggest using Linux; he'd be laughed out of his job. (In the corporate world, anything that's free is also something that legal and accounting departments can't handle. By definition these departments cannot possibly be worthless, so therefore the item that's free must be worthless.)

Now that I have my Linux, my MS-DOS 6.22, and my Windows 3.1 (when there's no way to avoid Windows altogether), and old applications such as dBase 3+ (which existed until Microsoft purchased FoxPro, a dBase clone), Clipper, Lotus 123, WordPerfect 5.1, and BASIC and C compilers for MS-DOS, and the free C compiler for Linux, I'm feeling quite lucky.

But I don't feel lucky when I scan the "Help Wanted" ads for a job. My skills are utterly obsolete for the job market in microcomputing. Those who might once have hired me, have been furiously converting to Windows for everything. To become marketable again, I'd have to send Microsoft more money. I'm looking at a brochure that they recently sent me. For mere hundreds of dollars I can get a "Visual Studio 97" suite of development tools, including Visual Basic, Visual C++, Visual J++, Visual FoxPro, and more.

Of course I'd need a new computer with tons of memory and a huge hard drive, and I'd have to spend many months learning one or two of these systems. At that point I could put it on my resume, and the number of programming "Help Wanted" ads I could answer would increase about 20 times. But what if I learn the wrong package, and it's obsolete by the time I'm ready to send out my revised resume? And even if I'm eventually able to earn a paycheck by writing programs using one of these development systems, doesn't that make me part of the problem? Can I, in good conscience, support Microsoft's monopoly?

[Cartoon] Hell no, I won't play ball with Bill this time. I'm also not willing to spend big bucks getting Microsoft-certified in network administration or whatever, only to have the certification soon become worthless. (Sometimes college also turns out to be useless, but no one ever expects you to delist your degree due to obsolescence.) Between Microsoft and those prospective employers that buy into everything Microsoft does, I'm getting mad. Fortunately, I've had more electronic hardware jobs than software jobs, so I'm hoping that I can stick to hardware for the paycheck, and save my antiquated software skills for things that matter more to me.

Fifteen years ago I felt that I owed something to Bill Gates, and I was grateful. I still feel that he's a major influence in my life. But now I have an intense dislike for his methods, and I just wish he'd stop doing it to me.

Bending Over for Bill, Part II

by Daniel Brandt
November 1998

It's ten months later, and the Microsoft antitrust trial is in full swing. Much information has found its way into the public record about the long history of anticompetitive practices at Microsoft. A couple of exhaustive internal memos were recently leaked that had Microsoft worrying about the superiority of Linux, which is free, over their own NT server software. There is also a growing awareness, among networking professionals generally, that NT is unstable and should not be used for mission-critical server applications.

The newest NT, recently renamed Windows 2000, is scheduled for release in 1999. It will probably be delayed, because the problem of Microsoft bloat, and the bugs that invariably accompany bloat, may finally be catching up with them. The current version of NT has more than 35 million lines of code, while the Linux kernel is under 1 million lines, with a huge variety of server add-ons that might scale this up to something like 10 million. With Linux, you can install just what you need for a specialized server, disconnect the keyboard and monitor, and stuff the box into a closet. Typically it will run for months without crashing, and like all flavors of Unix, it can be administered 100 percent remotely.

With NT, on the other hand, you get a fancy visual interface instead of a command-line interface, which also means that remote administration is more difficult. And NT's scalability is poor, which is another way of saying that it tends to be an all-or-nothing package, lacking the add-on modularity of Unix servers. Many administrators report that their NT installations crash frequently.

There seems to be little excuse for NT bloat -- even the newest Solaris Unix from Sun Microsystems will have about one-third the amount of code as NT. At the level of the desktop, Microsoft has the advantage over Unix because the Windows interface is used on 90 percent of personal computers, and is perceived to be easy to use. But on servers, other considerations are much more important. This is where NT is having problems.

These and other issues about Microsoft have dovetailed with my personal experiences over the last two months, as I began the huge project of porting the DOS version of NameBase to Windows.

I've thoroughly enjoyed the last seven years of bragging that I don't do Windows. But sales of DOS NameBase were down dramatically during that period, and income from the NameBase website has failed to take up the slack. Furthermore, the word on the street is that Windows 2000 will not support DOS programs at all, which means that users will have to install a third-party add-on just to be able to use a DOS program. It was time to bend over for Bill again.

I'm getting really sore from the experience. In the first place, it was clear that I should start with 16-bit Windows programming. An estimated 50 percent of Windows users are still using 3.1, and Windows 95 reportedly runs the old 16-bit programs just fine. Moreover, while the learning curve from DOS to Windows API programming is steep, the curve from 16-bit Windows API to 32-bit Windows API is trivial by comparison. In fact, memory management is much easier with 32-bit Windows.

But the deciding factor was that my four-year-old 486 computer doesn't have enough disk space to install Windows 95, not to mention the bloated 32-bit C/C++ compiler that would also be needed. I certainly wouldn't want to trade the DOS 6.22, Linux, and Windows 3.1, all of which are productive and stable (apart from occasional weirdness in Windows 3.1), just to make room for Bill's latest buggy outrage. No, the 32-bit version of NameBase for Windows will have to wait until I can afford a new computer. I'm not fixing the software on my 486, because it ain't broke.

Where does one get a 16-bit compiler that will do Windows, when Microsoft has deemed 16-bits obsolete for the past four years? I was very lucky, because in early 1998, an old version of Borland 3.1 for C/C++ on a CD was included with one of those $49 Teach Yourself C++ in 21 Days programming books. Then I got lucky a second time: I needed about seven additional fat books on Windows programming, and found several of these in a used bookstore for under $10 each. Included were Microsoft's own Windows 3.1 programming reference books, which cost $40 each before they became extinct.

I finally had everything I needed, but was not prepared for the changes in software design that were required by Windows. They call this sort of programming "event-driven" or "interrupt-driven," while my DOS version of NameBase is "procedural." I had to chop up my DOS program into dozens of little pieces, and execute them one at a time from a central "dispatch" function that managed these pieces. The reason for this is that all external events, such as a key being pressed on the keyboard, a mouse click, or blanking the screen after it has been resized or moved, are administered by the Windows API (application programming interface). I have to keep "checking back with Bill" to see if the API has a message for me. This "dispatch" function is the place in my program where I can relinquish control to Bill, and then continue where I left off after Bill's API has no more messages that need attention.

For example, if I am waiting for input, I have to essentially leave my program and pass control back to the API, which will send a message to my program when a key is pressed. Or if someone moves my program's window or resizes it, the API wipes it clean and sends me a message, at which point I have to reconstruct the display with no help from the API, which doesn't remember or care what was on it.

This arrangement allows several programs to share the computer screen, and allows multitasking. But it's different from the way that Unix does multitasking. In Unix, the kernel handles multitasking by assigning a slice of time to each process. For the application programmer in Unix, this is invisible. To him it appears as if his program is the only program running, and he has complete control. The old, easy "procedural" approach is all that's required.

By not administering the multitasking at the level of the kernel, Windows makes it necessary for applications programmers to give up control constantly in their programs. It becomes approximately three times more complex to conceptualize and design a program for Windows than it is for DOS or Unix. Of course, Microsoft has additional pig packages (with many shelves of expensive documentation) that are designed to mask this complexity. These are called "visual development tools" and are another way that Microsoft is leveraging their bloat into a fatter bottom line. There are visual tools for various languages, as well as massive systems that essentially disguise Microsoft's hundreds of API functions by overlaying them with macros and additional functions.

While I have only a modest amount of experience with Unix and Windows programming, already I find myself asking whether Microsoft merely evolved into their clumsy approach to Windows application development, or whether there is something more sinister going on. Why wouldn't it be possible to design Windows so that the time-sharing of processor power and peripheral resources is invisible to the applications programmer? Why does it have to be so difficult (and expensive) to write a Windows application? Is it possible that there are slicker ways to write Windows applications, but that Microsoft has reserved these for in-house programmers, with the intention that they will be able to outperform competitors? In other words, was Windows programming made intentionally difficult? Is Microsoft evil, or just plain lazy, or are they stupid?

The social effects of raising the bar to applications development are rarely considered. Gone are the days when a kid with a crude computer could write his own programs in BASIC and discover the magic for himself. The bar to programming is quite high now, because of the learning curve before one becomes productive, as well as the cost of software that must be constantly updated, and the books that must be bought to keep up with the latest software. Although hardware has become much more powerful and less expensive, the Microsoft monopoly has meant that even as we spend more time and money, we're getting less back than we used to. A significant portion of the difference has ended up in Bill's pocket.

It's all become so inelegant, overhyped, and corrupted by greed. On my desk next to my 486 is an old ham radio transmitter and shortwave receiver. I got my license when I was 14; I remember reading a book then titled So You Want to Become a Ham? In those days, a 14-year-old could ride his bicycle down the street, stop at the first house with a ham antenna, and get hobby help from the stranger inside. There was a sense of community, and the bar was kept low for each new generation. But by now the problem with ham radio is that it's so much less powerful and less interesting than computers and the Internet, that I'm never tempted to get on the air.

Microsoft is exactly the opposite of the friendly ham down the street. Bill Gates keeps leveraging his advantage, keeps raising the price of admission, and keeps lowering the productivity of computer users everywhere, while contributing little or nothing that's innovative or educational. If we downsize this blight on our future, someday 14-year-olds around the world may thank us once again.

[Cartoon]

PIR's Fun Facts

A comparison of three versions of the crucial FIND utility

The FIND utility, or some equivalent, has been around since the early days. It searches one or more text files for a pattern (or lack of pattern) in every line, and sends these lines to the output. For power users (i.e., those who use command-line interfaces), it's something that's needed every day.

The three versions under test:

Version 1:   Microsoft's FIND.EXE that came bundled with Version 6.22 of MS-DOS and Windows 3.1. The date stamp and latest copyright date is 1994. It has only four option switches and does not accept wildcards.

Version 2:   Digital Research's FIND.EXE that came bundled with DR DOS in 1990 (ver. R1.43). It accepts wildcards and has numerous other useful features. For his impertinence, the good doctor was tortured to death by Microsoft's market-share conspiracies.

Version 3:   GNU's grep 2.0, written in 1992 and included with Linux in 1994. It does wildcards and has more features than even the DR DOS version, including the option of outputting X number of context lines before and/or after the target line. The source code and executables are available for free on the web. The executable used for this test was a DOS port of the source code done by a helpful programmer in 1995, who then made it available as freeware.

Okay, Microsoft's features suck. But how about speed?

Well, ah, Microsoft keeps on sucking...

Platform for all three tests: 66 MHz 486 running MS-DOS 6.22

Test file: a single 3.25-meg file that is already cached in memory

Time required to find the same string in the same file:

MS-DOS FIND:   8.2 seconds
DR DOS FIND:   4.0 seconds
GNU's grep:   2.0 seconds

Remember, Microsoft had ten years to improve their version.

Microsoft's lawyers and focus-group PR maestros are spinning for dollars. Don't believe anything they say; it's all an insult to our intelligence. When talk-show hosts interview them under the pretense of equal time, it's probably because they're afraid they'll get a call from their boss if they don't. When politicians mention the words "Microsoft" and "importance of innovation" in the same sentence, it means they've been bribed with a campaign contribution.

The well-paid spinners claim that Microsoft is justly famous for its innovation, and that all Microsoft has ever wanted is the freedom to innovate. Microsoft, they say, is too busy writing great software that improves people's lives, and barely has the time and energy to address all these pesky and pointless legal battles.

However, the best comment on Microsoft's commitment to innovation came from Bill Gates himself on November 29, 1989, when he was speaking to his top DOS developers. Gates said, "While DOS continues to be our most important and most profitable product, over the last four years we have done very little with it technically." [ This quotation is from a document introduced in the Caldera lawsuit. ]

[Cartoon] The same can be said for Windows. The more one uses Windows, the more one suspects that at some point, Microsoft engineers gave up trying to track down the source of quirky or bizarre behavior, or even outright crashes, and instead left it to the user to recover as best he could. After all, what's the user going to do? Switch to another operating system? (One hears chuckles from the Microsoft boardroom.) After 14 years of development, Microsoft's Notepad, a plain text editor, still can't open a file that's larger than about 60 K. (Let them eat Word, chuckle, chuckle.)

Anyone who claims that Microsoft is innovative is 1) incredibly stupid or inexperienced in microcomputing, or 2) getting paid by Microsoft, perhaps secretly, or 3) all of the above.


From Barbarians Led by Bill Gates: Microsoft from the Inside by Jennifer Edstrom and Marlin Eller (New York: Henry Holt, 1998), p. 117. Eller was Microsoft's lead developer for graphics on Windows from 1982 to 1995:

"Microsoft didn't want a lot of other companies writing code that could compete. It wanted to keep the barriers to entry very high. The idea, in fact, was to keep raising the bar, putting in more layers of software and APIs, which developers would then have to support. Microsoft wanted to make it so gnarly that anybody who couldn't devote a team of one hundred programmers to every Windows application would be out of the game."


[Cartoon]

Mr. Gates acknowledged today that the company's error reporting service indicated that 5 percent of all Windows-based computers now crash more than twice each day.

-- New York Times, 25 July 2003, p.C2.

NameBase book reviews