VI. MICROSOFT'S RESPONSE TO THE THREAT POSED BY SUN'S IMPLEMENTATION OF JAVA 386. For Microsoft, a key to maintaining and reinforcing the applications barrier to entry has been preserving the difficulty of porting applications from Windows to other platforms, and vice versa. In 1996, senior executives at Microsoft became aware that the number of developers writing network-centric applications in the Java programming language had become significant, and that Java was likely to increase in popularity among developers. Microsoft therefore became interested in maximizing the difficulty with which applications written in Java could be ported from Windows to other platforms, and vice versa. A. Creating a Java Implementation for Windows that Undermined Portability and Was Incompatible with Other Implementations 387. Although Sun intended Java technologies eventually to allow developers to write applications that would run on multiple operating systems without any porting, the Java class libraries have never exposed enough APIs to support full-featured applications. Java developers have thus always needed to rely on platform-specific APIs in order to write applications with advanced functionality. Recognizing this, Sun sponsored a process for the creation of a software method that would allow developers writing in Java to rely directly upon APIs exposed by a particular operating system in a way that would nevertheless allow them to port their applications with relative ease to JVMs running on different operating systems. 388. On March 12, 1996, Sun signed an agreement granting Microsoft the right to distribute and make certain modifications to Sun's Java technologies. Microsoft used this license to create its own Java development tools and its own Windows-compatible Java runtime environment. Because the motivation behind the Sun-sponsored effort ran counter to Microsoft's interest in preserving the difficulty of porting, Microsoft independently developed methods for enabling "calls" to "native" Windows code that made porting more difficult than the method that Sun was striving to make standard. Microsoft implemented these different methods in its developer tools and in its JVM. Microsoft also discouraged its business allies from aiding Sun's effort. For example, Gates told Intel's CEO in June 1996 that he did not want the Intel Architecture Labs cooperating with Sun to develop methods for calling upon multimedia interfaces in Windows. 389. Since they were custom-built for enabling native calls to Windows, and because they were developed by the firm with the most intimate knowledge of Windows, the native methods that Microsoft produced were slightly easier for developers to use than the method that derived from the Sun-sponsored effort, and Java applications using Microsoft's methods tended to run faster than ones calling upon Windows APIs with Sun's method. If a developer relied on Microsoft's methods rather than Sun's, however, his Java application would be much more difficult to port from the Windows-compatible JVM to JVMs designed to run on different operating systems. 390. Microsoft easily could have implemented Sun's native method along with its own in its developer tools and its JVM, thereby allowing Java developers to choose between speed and portability; however, it elected instead to implement only the Microsoft methods. The result was that if a Java developer used the Sun method for making native calls, his application would not run on Microsoft's version of the Windows JVM, and if he used Microsoft's native methods, his application would not run on any JVM other than Microsoft's version. Far from being the unintended consequence of an attempt to help Java developers more easily develop high-performing applications, incompatibility was the intended result of Microsoft's efforts. In fact, Microsoft would subsequently threaten to use the same tactic against Apple's QuickTime. Microsoft continued to refuse to implement Sun's native method until November 1998, when a court ordered it to do so. It then took Microsoft only a few weeks to implement Sun's native method in its developer tools and JVM. 391. Although the Java class libraries have yet to provide enough functionality to support full-featured applications, they have gradually expanded toward that goal. In 1997, Sun added a class library called Remote Method Invocation, or "RMI," which allowed Java applications written to call upon it to communicate with each other in certain useful ways. Microsoft was not willing to stand by and allow Java developers to rely on new Java class libraries unimpeded. The more that Java developers were able to satisfy their need for functionality by calling upon the Java class libraries, the more portable their applications would become. Microsoft had developed a set of Windows-specific interfaces to provide functionality analogous to the functionality RMI offered; it wanted Java developers to rely on this Windows-specific technology rather than Sun's cross-platform interface. Microsoft thus refused to include RMI as a standard component of the Java runtime environment for Windows that it shipped with Internet Explorer 4.0. 392. The license agreement it had signed with Sun the previous year obligated Microsoft to offer RMI, at a minimum, on its developer Web site. Microsoft did so, but with respect to the RMI beta release, it buried the link in an obscure location and neglected to include an entry for it in the site's index. Referring to RMI and any Java developers who might access Microsoft's site looking for it, a Microsoft employee wrote to his approving manager, "They'll have to stumble across it to know it's there. . . . I'd say it's pretty buried." 393. It is unclear whether Microsoft ultimately placed RMI in a more prominent place on its developer Web site. Even if it did, the fact that RMI was not shipped with Microsoft's Java runtime environment for Windows meant that Java developers could not rely on its being installed on consumers' PC systems. If developers wanted their Java applications to call upon communications interfaces guaranteed to be present on Windows users' systems, they had no choice but to rely on the Microsoft-specific interfaces instead of RMI. Microsoft undertook the effort to remove RMI from the rest of the Java class libraries, instead of simply leaving it in place and allowing developers to choose between it and Windows-specific interfaces, for the sole purpose of making it more difficult for Java developers to write easily portable applications. 394. In a further effort intended to increase the incompatibility between Java applications written for its Windows JVM and other Windows JVMs, and to increase the difficulty of porting Java applications from the Windows environment to other platforms, Microsoft designed its Java developer tools to encourage developers to write their Java applications using certain "keywords" and "compiler directives" that could only be executed properly by Microsoft's version of the Java runtime environment for Windows. Microsoft encouraged developers to use these extensions by shipping its developer tools with the extensions enabled by default and by failing to warn developers that their use would result in applications that might not run properly with any runtime environment other than Microsoft's and that would be difficult, and perhaps impossible, to port to JVMs running on other platforms. This action comported with the suggestion that Microsoft's Thomas Reardon made to his colleagues in November 1996: "[W]e should just quietly grow j++ [Microsoft's developer tools] share and assume that people will take more advantage of our classes without ever realizing they are building win32-only java apps." Microsoft refused to alter its developer tools until November 1998, when a court ordered it to disable its keywords and compiler directives by default and to warn developers that using Microsoft's Java extensions would likely cause incompatibilities with non-Microsoft runtime environments. B. Inducing Developers to Use the Microsoft Implementation of Java Rather than Sun-Compliant Implementations 395. If all Microsoft had done to combat the growth of easily portable Java applications had been to increase the incompatibility between its Java implementation and ones complying with Sun's standards, the effect might have been limited. For if Sun could have assured developers that a Windows-compatible Java runtime environment that complied with Sun's standards would be installed on as many Windows PCs as Microsoft's version, and that it would run Java applications as well as Microsoft's, developers might have considered the cost in portability associated with relying on Microsoft-specific technologies and instead written their Java applications using Sun's developer tools. When Netscape announced in May 1995 that it would include with every copy of Navigator a copy of a Windows JVM that complied with Sun's standards, it appeared that Sun's Java implementation would achieve the necessary ubiquity on Windows. 396. Determined to induce developers to write Java applications that relied on its version of the runtime environment for Windows rather than on Sun-compliant ones, Microsoft made a large investment of engineering resources to develop a high-performance Windows JVM. This made Microsoft's version of the runtime environment attractive on its technical merits. To hinder Sun and Netscape from improving the quality of the Windows JVM shipped with Navigator, Microsoft pressured Intel, which was developing a high-performance Windows-compatible JVM, to not share its work with either Sun or Netscape, much less allow Netscape to bundle the Intel JVM with Navigator. Gates was himself involved in this effort. During the August 2, 1995 meeting at which he urged Intel to halt IAL's development of platform-level software, Gates also announced that Intel's cooperation with Sun and Netscape to develop a Java runtime environment for systems running on Intel's microprocessors was one of the issues threatening to undermine cooperation between Intel and Microsoft. By the spring of 1996, Intel had developed a JVM designed to run well on Intel-based systems while complying with Sun's cross-platform standards. Microsoft executives approached Intel in April of that year and urged that Intel not take any steps toward allowing Netscape to ship this JVM with Navigator. 397. By bundling its version of the Windows JVM with every copy of Internet Explorer and expending some of its surplus monopoly power to maximize the usage of Internet Explorer at Navigator's expense, Microsoft endowed its Java runtime environment with the unique attribute of guaranteed, enduring ubiquity across the enormous Windows installed base. As one internal Microsoft presentation from January 1997 put it, the company's response to cross-platform Java entailed "[i]ncreased IE share -- integrat[ion] with Windows." Partly as a result of the damage that Microsoft's efforts against Navigator inflicted on Netscape's business, Netscape decided in 1998 that it could no longer afford to do the engineering work necessary to continue bundling up-to-date JVMs with Navigator. Consequently, it announced that, starting with version 5.0, Navigator would cease to be a distribution vehicle for JVMs compliant with Sun's standards. 398. The guaranteed presence of Microsoft's runtime environment on every Windows PC and the decreasing likelihood that the primary host of the Sun-compliant runtime environment (Navigator) would be present, induced many Java developers to write their applications using Microsoft's developer tools, for doing so guaranteed that those applications would run in the Java environment most likely to be installed on a Windows user's PC. Owing to Microsoft's deliberate design decisions, more developers using Microsoft's Java developer tools meant that more Java applications would rely on the Windows-specific technologies in Microsoft's runtime environment and thus would not be portable. 399. Microsoft was not content to rely solely on its anti-Navigator efforts to ensure that its Java runtime environment would be the only one guaranteed to be present on Windows PC systems. After all, Netscape was not the only ISV capable of placing copies of a runtime environment on users' systems. Many developers of network-centric applications were just as capable of bundling compatible runtime environments with their applications as they were of bundling browsing software. If the right runtime environment already came bundled with the right browsing software, all the more convenient for the ISV. If not (as would increasingly be the case after Netscape stopped bundling a runtime environment with Navigator), though, the ISV could still separately obtain the desired runtime environment and bundle it with every copy of its product. 400. Recognizing ISVs as a channel through which Java runtime environments that complied with Sun's standards could find their way onto Windows PC systems, Microsoft induced ISVs to distribute Microsoft's version instead of a Sun-compliant one. First, Microsoft made its JVM available to ISVs separately from Internet Explorer so that those uninterested in bundling browsing software could nevertheless bundle Microsoft's JVM. Microsoft's David Cole revealed the motivation for this step in a message he wrote to Jim Allchin in July 1997: "[W]e've agreed that we must allow ISVs to redistribute the Java VM standalone, without IE. ISVs that do this are bound into Windows because that's the only place the VM works, and it keeps them away from Sun's APIs." 401. Microsoft took the further step of offering valuable things to ISVs that agreed to use Microsoft's Java implementation. Specifically, in the First Wave agreements that it signed with dozens of ISVs in 1997 and 1998, Microsoft conditioned early Windows 98 and Windows NT betas, other technical information, and the right to use certain Microsoft seals of approval on the agreement of those ISVs to use Microsoft's version of the Windows JVM as the "default." Microsoft and the ISVs all read this requirement to obligate the ISVs to ensure that their Java applications were compatible with Microsoft's version of the Windows JVM. The only effective way to ensure compatibility with Microsoft's JVM was to use Microsoft's Java developer tools, which in turn meant using Microsoft's methods for making native calls and (unless the developers were especially wary and sophisticated) Microsoft's other Java extensions. Thus, a very large percentage of the Java applications that the First Wave ISVs wrote would run only on Microsoft's version of the Windows JVM. With that in mind, the First Wave ISVs would not have any reason to distribute with their Java applications any JVM other than Microsoft's. So, in exchange for costly technical support and other blandishments, Microsoft induced dozens of important ISVs to make their Java applications reliant on Windows-specific technologies and to refrain from distributing to Windows users JVMs that complied with Sun's standards. The record contains no evidence that the relevant provision in the First Wave agreements had any purpose other than to maximize the difficulty of porting Java applications between Windows and other platforms. Microsoft remained free to hold the First Wave ISVs to this provision until a court enjoined its enforcement in November 1998. 402. In addition to the First Wave agreements, Microsoft entered an agreement with at least one ISV that explicitly required it to redistribute Microsoft's JVM to the exclusion of any other and to rely upon Microsoft's native methods to the exclusion of any other methods. Such agreements were also prohibited by the November 1998 injunction. 403. Microsoft anticipated that the Java language would become a popular medium in the multimedia arena. It thus wanted to ensure that the Java software created to deliver multimedia content would not rely on Java implementations that fostered portability. RealNetworks developed the most popular software for the creation and play-back of streaming multimedia content. Therefore, Microsoft sought to ensure that, to the extent Java developers relied on RealNetworks' technologies, they would not be relying on a Java implementation that complied with Sun's standards. So, in the July 18, 1997 agreement that it entered with RealNetworks, Microsoft conditioned its agreement to distribute RealNetworks' media player with Internet Explorer on RealNetworks' agreement to exert its best efforts to ensure that its player primarily use Windows-specific technology, rather than any analogous interfaces that Sun or Netscape might develop, to display multimedia content. Absent this obligation, there would have been no technical reason why RealNetworks could not have designed its media player to support both Microsoft's technologies and ones developed by Sun or Netscape. Although RealNetworks subsequently announced that it planned to continue developing its own fundamental streaming software, the July 18 agreement limited the extent to which that software would include Java technologies that complied with Sun's standards. C. Thwarting the Expansion of the Java Class Libraries 404. As discussed above, Microsoft's effort to lock developers into its Windows- specific Java implementation included actions designed to discourage developers from taking advantage of Java class libraries such as RMI. Microsoft went further than that, however. In pursuit of its goal of minimizing the portability of Java applications, Microsoft took steps to thwart the very creation of cross-platform Java interfaces. The incorporation of greater functionality into the Java class libraries would have increased the portability of the applications that relied on them, while simultaneously encouraging developers to use Sun-compliant implementations of Java. In one instance of this effort to stunt the growth of the Java class libraries, Microsoft used threats to withhold Windows operating-system support from Intel's microprocessors and offers to include Intel technology in Windows in order to induce Intel to stop aiding Sun in the development of Java classes that would support innovative multimedia functionality. 405. In November 1995, Microsoft's Paul Maritz told a senior Intel executive that Intel's optimization of its multimedia software for Sun's Java standards was as inimical to Microsoft as Microsoft's support for non-Intel microprocessors would be to Intel. It was not until 1997, though, that Microsoft prevailed upon Intel to not support Sun's development of Java classes that would have allowed developers to include certain multimedia features in their Java applications without sacrificing portability. 406. In February 1997, one of Intel's competitors, called AMD, solicited support from Microsoft for its "3DX" technology, which provided sophisticated multimedia support for games. Microsoft's Allchin asked Gates whether Microsoft should support 3DX, despite the fact that Intel would oppose it. Gates responded: "If Intel has a real problem with us supporting this then they will have to stop supporting Java Multimedia the way they are. I would gladly give up supporting this if they would back off from their work on JAVA which is terrible for Intel." Near the end of March, Allchin sent another message to Gates and Maritz. In it he wrote, "I am positive that we must do a direct attack on Sun (and probably Oracle). . . . Between ourselves and our partners, we can certainly hurt their (certainly Sun's) revenue base. . . . We need to get Intel to help us. Today, they are not." Two months later, Eric Engstrom, a Microsoft executive with responsibility for multimedia development, wrote to his superiors that one of Microsoft's goals was getting "Intel to stop helping Sun create Java Multimedia APIs, especially ones that run well (ie native implementations) on Windows." Engstrom proposed achieving this goal by offering Intel the following deal: Microsoft would incorporate into the Windows API set any multimedia interfaces that Intel agreed to not help Sun incorporate into the Java class libraries. Engstrom's efforts apparently bore fruit, for he testified at trial that Intel's IAL subsequently stopped helping Sun to develop class libraries that offered cutting-edge multimedia support. D. The Effect of Microsoft's Efforts to Prevent Java from Diminishing the Applications Barrier to Entry 407. Had Microsoft not been committed to protecting and enhancing the applications barrier to entry, it might still have developed a high-performance JVM and enabled Java developers to call upon Windows APIs. Absent this commitment, though, Microsoft would not have taken efforts to maximize the difficulty of porting Java applications written to its implementation and to drastically limit the ability of developers to write Java applications that would run in both Microsoft's version of the Windows runtime environment and versions complying with Sun's standards. Nor would Microsoft have endeavored to limit Navigator's usage share, to induce ISVs to neither use nor distribute non-Microsoft Java technologies, and to impede the expansion of the Java class libraries, had it not been determined to discourage developers from writing applications that would be easy to port between Windows and other platforms. Microsoft's dedication to the goal of protecting the applications barrier to entry is highlighted by the fact that its efforts to create incompatibility between its JVM and others resulted in fewer applications being able to run on Windows than otherwise would have. Microsoft felt it was worth obstructing the development of Windows-compatible applications where those applications would have been easy to port to other platforms. It is not clear whether, absent Microsoft's interference, Sun's Java efforts would by now have facilitated porting between Windows and other platforms enough to weaken the applications barrier to entry. What is clear, however, is that Microsoft has succeeded in greatly impeding Java's progress to that end with a series of actions whose sole purpose and effect were to do precisely that. VII. THE EFFECT ON CONSUMERS OF MICROSOFT'S EFFORTS TO PROTECT THE APPLICATIONS BARRIER TO ENTRY 408. The debut of Internet Explorer and its rapid improvement gave Netscape an incentive to improve Navigator's quality at a competitive rate. The inclusion of Internet Explorer with Windows at no separate charge increased general familiarity with the Internet and reduced the cost to the public of gaining access to it, at least in part because it compelled Netscape to stop charging for Navigator. These actions thus contributed to improving the quality of Web browsing software, lowering its cost, and increasing its availability, thereby benefitting consumers. 409. To the detriment of consumers, however, Microsoft has done much more than develop innovative browsing software of commendable quality and offer it bundled with Windows at no additional charge. As has been shown, Microsoft also engaged in a concerted series of actions designed to protect the applications barrier to entry, and hence its monopoly power, from a variety of middleware threats, including Netscape's Web browser and Sun's implementation of Java. Many of these actions have harmed consumers in ways that are immediate and easily discernible. They have also caused less direct, but nevertheless serious and far-reaching, consumer harm by distorting competition. 410. By refusing to offer those OEMs who requested it a version of Windows without Web browsing software, and by preventing OEMs from removing Internet Explorer -- or even the most obvious means of invoking it -- prior to shipment, Microsoft forced OEMs to ignore consumer demand for a browserless version of Windows. The same actions forced OEMs either to ignore consumer preferences for Navigator or to give them a Hobson's choice of both browser products at the cost of increased confusion, degraded system performance, and restricted memory. By ensuring that Internet Explorer would launch in certain circumstances in Windows 98 even if Navigator were set as the default, and even if the consumer had removed all conspicuous means of invoking Internet Explorer, Microsoft created confusion and frustration for consumers, and increased technical support costs for business customers. Those Windows purchasers who did not want browsing software -- businesses, or parents and teachers, for example, concerned with the potential for irresponsible Web browsing on PC systems -- not only had to undertake the effort necessary to remove the visible means of invoking Internet Explorer and then contend with the fact that Internet Explorer would nevertheless launch in certain cases; they also had to (assuming they needed new, non-browsing features not available in earlier versions of Windows) content themselves with a PC system that ran slower and provided less available memory than if the newest version of Windows came without browsing software. By constraining the freedom of OEMs to implement certain software programs in the Windows boot sequence, Microsoft foreclosed an opportunity for OEMs to make Windows PC systems less confusing and more user-friendly, as consumers desired. By taking the actions listed above, and by enticing firms into exclusivity arrangements with valuable inducements that only Microsoft could offer and that the firms reasonably believed they could not do without, Microsoft forced those consumers who otherwise would have elected Navigator as their browser to either pay a substantial price (in the forms of downloading, installation, confusion, degraded system performance, and diminished memory capacity) or content themselves with Internet Explorer. Finally, by pressuring Intel to drop the development of platform-level NSP software, and otherwise to cut back on its software development efforts, Microsoft deprived consumers of software innovation that they very well may have found valuable, had the innovation been allowed to reach the marketplace. None of these actions had pro-competitive justifications. 411. Many of the tactics that Microsoft has employed have also harmed consumers indirectly by unjustifiably distorting competition. The actions that Microsoft took against Navigator hobbled a form of innovation that had shown the potential to depress the applications barrier to entry sufficiently to enable other firms to compete effectively against Microsoft in the market for Intel-compatible PC operating systems. That competition would have conduced to consumer choice and nurtured innovation. The campaign against Navigator also retarded widespread acceptance of Sun's Java implementation. This campaign, together with actions that Microsoft took with the sole purpose of making it difficult for developers to write Java applications with technologies that would allow them to be ported between Windows and other platforms, impeded another form of innovation that bore the potential to diminish the applications barrier to entry. There is insufficient evidence to find that, absent Microsoft's actions, Navigator and Java already would have ignited genuine competition in the market for Intel-compatible PC operating systems. It is clear, however, that Microsoft has retarded, and perhaps altogether extinguished, the process by which these two middleware technologies could have facilitated the introduction of competition into an important market. 412. Most harmful of all is the message that Microsoft's actions have conveyed to every enterprise with the potential to innovate in the computer industry. Through its conduct toward Netscape, IBM, Compaq, Intel, and others, Microsoft has demonstrated that it will use its prodigious market power and immense profits to harm any firm that insists on pursuing initiatives that could intensify competition against one of Microsoft's core products. Microsoft's past success in hurting such companies and stifling innovation deters investment in technologies and businesses that exhibit the potential to threaten Microsoft. The ultimate result is that some innovations that would truly benefit consumers never occur for the sole reason that they do not coincide with Microsoft's self-interest.