The Appeals Court summarizes this claim as follows:
the District Court condemned Microsoft’s decision to bind IE to Windows 98 ‘‘by placing code specific to Web browsing in the same files as code that provided operating system functions.’’ Putting code supplying browsing functionality into a file with code supplying operating system functionality ‘‘ensure[s] that the deletion of any file containing browsing-specific routines would also delete vital operating system routines and thus cripple Windows’’
Since facts determined by a lower court can only be overturned if they are "clearly erroneous", the Appeals Court cited some supporting testimony to show why this conclusion was plausible:
Another Government expert likewise testified that one library file, SHDOCVW.DLL, ‘‘is really a bundle of separate functions. It contains some functions that have to do specifically with Web browsing, and it contains some general user interface functions as well.’’ (trial testimony of Edward Felten).. One of Microsoft’s own documents suggests as much. (Microsoft document indicating some functions in SHDOCVW.DLL can be described as ‘‘IE only,’’ others can be described as ‘‘shell only’’ and still others can be described as providing both ‘‘IE’’ and ‘‘shell’’ functions)).
This concept is so bizarre that it is difficult for a software professional to decide how to begin to correct it. This is a fine example of the Court system dealing with technical matters belonging to another profession and completely screwing up. To understand just how wrong this is, consider another version of the same problem.
Every day the New Haven Register publishes a morning newspaper. They have to package international, national, and state news with stories from a dozen local communities. Then there are editorials, comics, sports, TV listings, business news, and lots of ads. Somehow the stories have to be organized to fit on a standard size newspaper page, and the pages have to be organized into sections. On a particular Friday, the international, national, and state news and editorials are placed in Section A. The news from various towns, comics, obituaries, and Home page go in Section B. Section C is the Weekend with TV and Movie listings. Then there are the Sports section, and Business. Of course, a story on Enron may go on the front page in Section A even though it deals with a Business topic from Section D.
The groupings are not entirely arbitrary. The TV listings and Movie Guide go in a section that is loosely devoted to "Entertainment". This grouping makes some intuitive sense to everyone. Now assume that some government lawyers and a few Federal Judges declared that the Register had engaged in some conspiracy by putting Comics and Obituaries in the same section. Why? Well clearly cartoon characters have nothing to do with dead people, and by printing the obituaries on the back of one of the comic pages, they clearly made it impossible to divide the paper so that "kids things" (Comics) were in one pile and "adult things" (Obituaries) were in another pile.
Reasonable people may suggest that this is no business of the courts. Reasonable people, however, don't listen to bizarre conspiracy theories. No matter how the paper is packaged, some section will contain some combination of features that doesn't appeal to some group of readers.
Software is written by people. Big software is written by a lot of people. Windows is probably written by ten thousand programmers. The work has to be specified in enough precision that when the parts are written they all work together. The work then has to be subdivided into units small enough for each person to finish his or her task in the allotted time. People who work near each other should work on related parts of the programming so they can collaborate meaningfully.
A conglomerate is divided into companies, divisions, departments, and workgroups. A large program is divided into:
When a component is designed, someone has to decide what functions will be combined in the same source module (and written by the same person), and which modules will be combined in the same library. Generally, things get combined when they do the same thing in the same way, share the same code, or share the same data.
Generally, a component, library, module, or function will be defined by the operation that it performs and not by the caller that it supports. This is not all that different from the way a company is designed. The Telecom department manages phones for everyone in Yale University. It does not give different types of phones to the Physics department than it does to the French department. Web components inside Windows provide support for Web-related services (HTTP, HTML, XML, DOM) for the Browser and for any other component that needs the services.
The HTML document format is used for Web pages. It is also used in Windows for Help files, the Active Desktop, E-Mail messages, and any program that uses a Web-style user interface.
The HTTP network protocol is used by the Browser to fetch files from a Web Server. However, it is also used by XML documents to link to related files, by WEBDAV to access shared disk files, and by any program that names files by a URL instead of a disk path.
The HTTP standard defines a set of "method" operations: GET, POST, HEAD, PUT, DELETE, TRACE, and CONNECT. In practice, Browsers only use GET and POST. The other operations are used by editors, site content management tools, and the WEBDAV protocol.
If you sat down to create a library that provided HTTP services, you would almost certainly support all the operations defined by the standard in the same module. No sane software engineer would break out GET and POST services and put them in a separate library from PUT and DELETE just because the first two are used by Browsers and the second two aren't.
However, if you put all HTTP operations in one piece of code, then you have commingled some code used by Browsers (GET and POST) with other code that would only be used by other programs. If you now decide to add WEBDAV support to Windows, just like MacOS X has WEBDAV support and Red Hat Linux has WEBDAV support, then there would be a module that commingled Browser code with other code required by the operating system.
This means that any rational version of a module, library, or component providing rationally designed HTTP support would break the law, in the words of the court, ‘‘by placing code specific to Web browsing in the same files as code that provided operating system functions.’’ The only way to avoid this is to prohibit all Web related protocols and services from being used in the operating system, because there is no other rational way to divide up the code. Then you have to explain why the same Web protocols are used not just by Windows, but also by Mac and Linux. These protocols are not limited to Web browsers and operating systems. They are also used by the Oracle Database system. They are even built into the Java Runtime Environment.
The commingling charge is ignorant nonsense. The failure of the court to understand even the most basic concepts of software design, development, and distribution indicate a fundamental failure. If the Federal Courts want to pass judgment on something they must first provide a framework to understand the decision they are making. There is no question that the courts failed to do this in the Microsoft Case. The interesting academic question is where to put the blame.
Part of the blame falls on the personal limitations of the District Court judge. Part may be attributed to impatience to get to the end of a seemingly unending process. However, when the court is faced with complex issues in an unfamiliar subject matter, the argumentative adversarial process is more likely to confuse and obscure than to clarify and focus.
Someone familiar with the software development process would immediately point out that the courts were looking at the wrong type of evidence. Before any code is written, every programmer has to know what functions will be exposed, what each module will do, and how everything fits together. Program design leaves behind a massive paper trail of architecture documents, specifications, initial designs, comments, and amendments. You can't build any large program without creating such documents.
If there was any conspiracy to combine code in an unnatural way, the documentation would show that. Programmers know instinctively what functions belong with what other functions. If the code isn't designed right, they would complain and try to fix the design. The DOJ had access to all the paperwork, but it presented not one single document that suggested that any competent programmer ever questioned the assignment of functions to the supposedly "commingled" modules.
The government did present two witnesses. One did not know the C programming language, in which all of the relevant code was written. The other made general statements but specified no particular modules, routines, or lines of code (even though he had access to all the source).
An operating system like Windows has tens of millions of lines of code written by thousands of programmers. If even a single line of code is based on incorrect design, then the entire system can fail. The only way to keep everything working is to define with absolute precision the bounds of responsibility, division of work, overall strategy, and specific rules. This work by the architects, designers, and managers must necessarily generate tons of paperwork. There are proposals, specifications, code designs, module and interface descriptions. This is the process that decides if SHDOCVW will contain specific routines that support the feature of Active Desktop (the "shell") where HTML and JavaScript (normally found on Web Pages) are used to customize the display of folders opened on the user's desktop screen. If there are special shell-related functions in this library different from the functions used when the Browser displays HTML under the control of JavaScript, then the design documents for the component would show the intention of the software engineers.
If Microsoft were trying to package unrelated modules together to make it difficult to delete components from the operating system, then that objective would show up in the endless stream of design documents and specifications. Software design cannot have secrets because a secret design will not work. Programmers aren't stupid. If someone presents a program design that makes no sense, there will be all sorts of complaints, E-Mail, and very loud meetings full of shouting. That would be direct evidence of the anti-competitive intention that the DOJ claimed in its case.