Changing Soapboxes Midstream

Dr. Dobb's Journal February 2001

By Al Stevens

Al is DDJ's senior contributing editor. He can be contacted at astevens@ddj.com.

I recently ported Quincy 2000, the current ongoing column project, to the Enterprise Edition of Visual Studio 6.0's Visual C++. The CD-ROM for my copy of Version 5.0 was damaged, and I could not reinstall the compiler following recovery from a hard disk crash, so I decided to upgrade. Version 5.0 has some unresolved issues, mostly with respect to Standard C++ compliance, and I looked forward to seeing how 6.0 addresses these issues.

Converting a major application to a new compiler version sometimes involves problems, particularly when the language definition has changed in the meantime, but this one was a breeze. There were only two things to change. Quincy used an object of the std::set<T>::iterator class initialized by and compared with the std::set<T>::end() member function that is no longer supported. I had to change the code to use the const_iterator class. The second change was because VC++ 6.0 issues a warning if you use the new operator to instantiate an object without assigning the returned address to a pointer when the class constructor does not specify the throw() qualifier. VC++ warns you that memory leaks might occur if the constructor throws an exception. Adding the throw() qualifier to the constructor's signature removes the warning.

I was disappointed to see that whereas VC++ supports the new-style Standard C++ headers for Standard C functions (<cstdio>, <cstring>, and so on) and did in prior versions, it still does not place the Standard C functions in the std namespace when you include those headers. There is no good reason why the newest version of a contemporary C++ compiler fails to comply with the Standard in this respect. The framers of the Standard allowed for continued support for legacy code by not prohibiting a complying compiler from supporting the legacy header format (<stdio.h>, <string.h>, and the like), which leaves the Standard C functions in the global namespace. The other, newer format should be fully conforming, and it is not in VC++.

My understanding is that Microsoft's representatives on X3J16 opposed putting the C functions into std. Irrespective of the merit of their arguments, the committee passed the measure by majority vote, and Microsoft, being a willing participant in that particular democratic process, should ensure that its compiler complies.

I sincerely hope that VC++ 7.0 will correct these deficiencies, that it's all a matter of priorities. Until I know otherwise, my only recourse is to assume that since VC++ is the dominant C++ development environment for Windows, which is the dominant operating environment, all of which is controlled by Microsoft, the Microsoft developers think they can do what they want. In this case, they want to defy the will of the majority and go their own way. So what else is new? This attitude reminded me of the Microsoft Windows-only Java implementation, which started a lawsuit over license violation, which got me thinking about Microsoft business practices, current events, and how it all affects programmers.

Brace yourself for some Microsoft bashing, the industry's most popular indoor sport, but one that I, until now, have not participated in with much enthusiasm.

Breaking Up Is Still Hard to Do

A while back, I characterized the Microsoft breakup ruling as being punitive and unnecessary. Since writing that opinion, I've read more about the case and the events leading up to the ruling, and I've changed my opinion — not the part about it being punitive, I still believe that. But I've revised my thinking about the necessity of the action, particularly as it affects programmers.

My earlier attitude reflected what I perceived was best for programmers and computer users, which I can describe this way: A single, common operating environment best serves the majority of computer users who are relatively unsophisticated and who need and care only about having something productive and easy to use. An operating environment platform with a common API that implements a common user interface is also best for programmers who need a solid foundation upon which to build reliable, usable applications — a foundation that users embrace so that a market exists for those applications.

Given a dominant operating environment, even when there are not competing versions from competing companies, it is convenient to conclude that whatever business and technology model ensures the success of that environment and its company, monopolies notwithstanding, is best for users and applications developers.

In other words, to borrow cartoonist Al Capp's parody of an infamous quote of the 1950s, "What's good for General Bullmoose is good for the country," implying that when you look out for the interests of big business, the people automatically benefit from trickled-down advantages. Of course, centuries of industrial misdeeds necessitating social reform and legal remedies have proven just the opposite.

My earlier opinions were reinforced by the observation that the Department of Justice (DOJ) lawyers and the bench did not seem to understand the technical issues that underpin some of their objections to Microsoft's actions, and that Microsoft's defense team, including Microsoft's technical and management witnesses, did an abysmal job of explaining those issues.

Case in point: One of the DOJ's charges was that by "tying" Internet Explorer (formerly a standalone program) to Windows, the OS that virtually everyone uses, which unquestionably constitutes an operating-system monopoly, Microsoft applied predatory practices to eliminate browser competition, essentially putting Netscape's browser out of the running.

In the first place, IE and Netscape Navigator are not really products — they are gifts, free to anyone who wants to download them. They exist as incentives for users to use the companies' real products. In the second place, we must view the desktop from a larger perspective. Here is where I think the defense really screwed up. If I had been called as a technical witness, and if those technically challenged lawyers would have asked the right questions, I would have offered an explanation but with this qualification: The litigators and the bench need to be more than casual computer users to understand these points. If his honor and learned counsel do not understand the nature of desktops, icons, folders, file systems, subdirectories, documents, applications, URLs, and such, they are unqualified to make this case or rule on it, should recuse themselves, and should find qualified people to take over. Of course, at that point I would have found myself invited off the witness stand and out of the courtroom, probably with a contempt citation, which would have been appropriate.

Nonetheless, here is the argument I think the defense should have made. If they made it (I have not read the complete transcript), they either made it ineffectively, made it to those who did not understand, or made it to those who already had their minds made up.

A browser on a desktop is not really an application. Things on the desktop typically represent locations where other things can be found. Among those things are mass storage devices and subdirectories within mass storage devices. Some of those devices are connected to the local computer; others are connected to other computers in the local network; others still are connected to remote computers that are part of the Internet. You might argue that by hosting HTML documents, encryption, and Java applets, the browser is more of an application than Windows Explorer, which only displays the hierarchy of file systems. The browser does add functionality, but that functionality is limited. You don't modify or update the content you view except by passing data to a real application in the server, and browser-launched Java applets don't do anything important to your computer's local contents. The browser's main purpose is to let users view things on the Internet and send things to servers, which can be seen as little more than an extension of the local computer's operating environment (desktop or command line), which is, indeed, a function of the OS.

Microsoft did not tie an application to the OS; Microsoft extended the OS to include integrated Internet browsing. If that's tying products, then so is adding support for LANs, CD-ROMs, and DVDs.

But even if you insist that IE is an application, one of the tests litigators apply to determine if tying two products constitutes unfair monopolistic practices is whether consumers would gain equal benefits by acquiring the products separately. Microsoft's technical witness really blew it when he testified they would. The value of IE over Netscape is its degree of integration with Windows Explorer, which no one has suggested should not be a part of the OS. The benefit gained from an integrated browser is the seamless integration of the user's access to content in a unified user interface. You look at a local hard disk's subdirectories, applications, and documents by using the same kind of window that you use to look at documents on the Web. The window changes its configuration to accommodate its current purpose, but it is the same kind of explorer window nonetheless. Each window has an address bar into which you can enter the address of any of the many places that holds things to view; the window system seamlessly responds to those entries appropriately.

And that application of a common user interface is the advantage an integrated Internet Explorer offers that an add-on Netscape Navigator does not. A small benefit to be sure, but a benefit nonetheless, and one that passes the test against tying. It is merely a technical detail that the IE was, under Windows 95, distributed separately and installed and integrated with Windows Explorer. That detail makes the browser no less a part of the OS than, say, an installable device driver.

But Microsoft did not make these arguments. It simply said, "It's my OS, and I'm Microsoft, and you can't tell me what I can put in it."

These are, of course, technical arguments and only a small part of the case against Microsoft. And if that's all there was to it, I'd continue to oppose breaking up the company. Other elements of the case caused me to reconsider my position, however. One is the Microsoft attitude, epitomized in public statements by Bill Gates and Steve Ballmer during the process, indicating that because they are who they are, they can do whatever they want. The attitude is painfully apparent, too, in Gates's famous taped deposition and the testimony of most management witnesses for the defense. Such arrogance begs a comeuppance. Such evasion begs for accountability. Now, that's not a legal opinion, it's just my reaction to the swaggering and posturing of a couple of neighborhood bullies.

Gates said publicly that whoever came up with the charges against the company and the subsequent recommendations for a remedy don't know anything about the software business. He's only partially right. They don't seem to understand software. But I think they understand business and, more specifically, business practices, which leads to the second element of the case.

Technology empowers new behavior and, consequently, changes culture and eventually law. As I opined a few months ago, the technology that enables personal file sharing will necessarily change the nature of intellectual property law in this century. Certainly a lot about the new economy will modify how things are done, too. But some things remain constant, and one of those things is that companies ought to obey certain rules of ethical behavior. Microsoft has traditionally ignored that aspect of doing business, choosing to use power rather than excellence to eliminate competition. When a monopoly successfully stifles competition by means other than producing superior products and providing superior service, innovation is likewise stifled. The incentive to compete is removed; consequently the absence of competition suppresses any innovative advances the industry might otherwise make.

Without innovation, the consumer loses in the long run, and my argument that a common UI platform for users and programmers is best takes second chair to the more compelling argument that an absence of competition retards the growth of technology. This situation has a profound effect on programmers because it diminishes what we are likely to be willing and able to do in the future.

There are years-old precedents that document the Microsoft attitude about grabbing good ideas. Many features in MS-DOS and Windows today were originally available as add-on products from other companies. File compression (Pkzip), disk compression (Stac), media streaming (RealAudio), local networking (Netware), shell extenders (4Key), multitasking (Desqview), the GUI desktop (the Mac and GEM), and so on. Even the first Microsoft C compiler came from a respected compiler vendor (Lattice) whom Microsoft dumped as soon as it had its own compiler almost working. Borland invented the integrated development environment that QuickC and later Visual C++ appropriated. Visicalc begat Lotus 1-2-3, which begat Excel. Visual Studio includes many developer features originally found in other products. Even MS-DOS is a knock-off of CP/M.

Microsoft has no qualms about appropriating a good idea and no conscience about the effect it has on whoever had the idea first. You might argue that the consumer wins because all the cool features are eventually included in the bundle, but take a wider view from farther back. The next cool feature might never see the light of day because small developers like us are reluctant to expend time, effort, and resources to implement new ideas knowing our products' markets dry up when Microsoft rips off the ideas and gives them away. Microsoft is known to be a fairly good implementer, but not big on original ideas (unless, of course, you think .NET is a good idea).

You might wonder why Microsoft does that. Why clone something someone else is selling and then give it away? My guess is that since a company generates continuing software revenue by upgrading products with new features and selling new versions, and when the company is not itself an innovator, ideas for new features have to come from somewhere.

The evidence indicates that Microsoft coerced its hardware OEM partners into bundling only Microsoft software, specifically IE, with the OEMs' products. Further testimony indicates that Microsoft threatened to cancel the Mac Office 2000 project if Apple did not distribute IE exclusively with the Mac. With no Office 2000, and not being a Wintel machine, the Mac would have no compelling killer applications. Then, Microsoft lobbied Intel to close down an Internet software project that targeted nonMicrosoft solutions. If the OEMs, Apple, and Intel capitulate, two Microsoft competitors, Sun and Netscape, fall to the same stone (slung by Goliath, this time) and Microsoft owns the Internet server market.

These coercions are the gravest of Microsoft's peccadilloes. I don't think anyone should be punished for developing a browser, integrating the browser into and bundling it with their OS, even if the OS constitutes a monopoly. I agree with Gates on that point. No one, least of all the government, should be able to tell him what he can and cannot put into his operating system. Let the competition build better browsers and let consumers choose. Precedence exists for better OS enhancements from third parties. WinZip works better than the Plus! compressed folder feature, for one example. Building better software is not unfair competition. But putting the screws to your business partners such that they either buy into your agenda or go out of business is unfair coercion and ought not to go unpunished. I don't know what they call it in Redmond, but on the streets it's called "selling protection."

Motive frequently entered the DOJ's case against Microsoft. It was argued that Microsoft wanted people using IE rather than Netscape because they wanted to corner the Internet software market. IE would work better with Microsoft servers, so server operators would tend to use Microsoft server software if everyone was using IE to browse. Furthermore, if Microsoft ignores the growing potential of Java to develop platform-independent Internet applications, Microsoft's grip on the operating-system platform market is threatened; Windows becomes just another local file manager/program launcher upon which users run portable Internet applications. But by displacing Java with something that Microsoft controls (C#, perhaps?) and controlling the browser and server software that accesses the Internet, Microsoft controls the API. By controlling the API, Microsoft corners the Internet applications market. When that happens, Microsoft owns the Internet.

A lot of time was spent during the trial establishing motive by introducing e-mail and meeting notes wherein Microsoft executives vow to eradicate the competition. This evidence wastes time and energy. Intent is neither relevant nor proven by records of what folks say to one another. I know they make a big deal about it in court, but actions are important here, not intent. People say all kinds of things in the heat of the moment and when they have an expectation of privacy. The only time such evidence should be relevant is when the prosecution tries to prove conspiracy charges against individuals or when the coercion at issue takes place in the e-mail or at the meeting. Internal talk about squashing competition is what business people do, typically with brutal, chest-thumping, half-time, locker-room, pep talk language. Lawyers and politicians can get as sanctimonious as they want and spout their self-righteous indignation about what someone said to someone else, and I am not impressed. What convinces me that Microsoft stepped out of bounds is the evidence of its deeds, not its words.

I've never understood why Nixon didn't burn the tapes, and I do not understand why Gates didn't erase the e-mail. Perhaps the analogy is closer than we think. Perhaps the megalomania that drove both men and the power they wielded blinded them to the fact that their acts have consequences and that separate institutions exist with the power to monitor the actions of the mighty with an eye on the interests of the meek.

This issue pulls at me from two sides. I am best described as a bleeding heart liberal, a badge I wear proudly. Show me a child who goes to bed hungry and my heart bleeds. Show me an elderly couple choosing between food and medicine, and my heart bleeds. Show me people targeted for police profiling and harassment based on how they talk or what they look like, and my heart bleeds. Show me a family living in a packing crate under a bridge, and my heart bleeds. Show me racial imbalance in our criminal judicial actions, and my heart bleeds. Show me children armed and dangerous in the streets and schoolyards, and my heart bleeds. To those ends, I want the government at some level to intervene, help, and bring about change. That's what government is for — to provide help and protection to the people in matters where they cannot do it for themselves.

At the same time, I have conservative views. I do not like government intrusion where it is neither needed nor wanted, particularly when it comes to market-driven free enterprise and most particularly when it comes to telling us programmers what code we can write. My first reactions when government lawyers and politicians interfere with business in areas they do not understand are to assume they are misinformed and misguided, assume their actions reveal hidden agendas and political motives, and generally lobby for the other side.

I guess the best way to reconcile these opposing voices from within myself is like this: Show me a mom-and-pop store pushed out of business by a huge chain's cold, calculated, predatory, lowball pricing strategies, and my heart bleeds.

So what good does a Microsoft breakup do for technology? Perhaps without a powerful autonomy controlling the direction the Internet takes, it can evolve in a healthier, market-driven environment where the needs of consumers rather than the ambitions of a couple of billionaire plutocrats influence and direct the evolution.

And we programmers can have more and better choices about what to work on and what to work with.

Imagine that Microsoft's actions went unchecked and it was permitted to continue with business as usual, which is what happens if the final remedy addresses behavioral rather than structural corrections. Imagine also that another cool Internet feature is wafting about waiting to be implemented, perhaps your idea. Unless you work for Microsoft, you don't waste time doing it because you know Microsoft will use its power to either kill the feature (like it tried to kill Java) or clone and appropriate it. Either way, you lose. Assume you work for Microsoft. If good ol' Bill doesn't think your feature is cool for any reason whatsoever, it never sees the light of day; and you, the Internet, and its billions of users lose. That's just too much influence for one person to have.

The judge ordered a two-way breakup that doesn't make a lot of sense to me. The Attorneys General of several states got together and recommended a stupid remedy that would have Microsoft license the source code of Windows to other developers, essentially creating not an open-source environment, but a nightmare of software-configuration management, or rather, the lack of it. I am certain that those who recommended the remedies do not understand the malady.

Perhaps Microsoft ought to be broken into not two companies as the judge ruled, not three as the DOJ suggested, but four separate companies. One company would have the workstation operating-system market, including whatever programs provide access to the Internet from the desktop. The second company would have the Internet server market, including all server-side systems programs. The third company would have the applications market, including desktop and server-side applications, database managers, and so on. The fourth company would have the developer tools market and would implement language translators and libraries to support the APIs that the other three companies specify. These companies would operate independently and would have to talk not only to each other but to all the other companies in the same business. We've come far enough that ANSI/ISO could take on the standardization of the packets and protocols with which these various entities communicate. Such a restructuring would necessarily involve longer periods of time before some things got implemented, what with the various lines of communication, fiefdoms, NIH syndromes, and all. But in the long run, the Internet would be market driven and, consequently, created in the image of the people who use it rather than those who profit by it.

Which billionaire gets to run which company? I don't give a rat's ass. If we're lucky, they'll be so weary of the whole thing by then that they'll retire to their gardens, golf courses, and philanthropies, and the rest of the world can get back to work.

What good would such a Microsoft breakup do for society? As the son of a prison guard, raised in the shadow of a federal penal institution, submitted to the occasional lectures of my correctional officer Pop who understood the system, I long ago learned that institutionalized punishment has five clear objectives: Protect society from repeat offenses by the perpetrators; deter other potential perpetrators from doing similar deeds; punish convicted perpetrators; give victims and society some sense of revenge and closure; and rehabilitate the perpetrators. Protection, deterrence, punishment, revenge, and rehabilitation. Getting four out of five wouldn't be too shabby.

DDJ