Bosworth, Reardon, and MS's anti-Java WORN(TM) strategy

Rohit Khare
Wed, 22 Jan 2003 01:27:52 -0800

WORN =3D=3D Write Once, Run Nowhere :-)

> "I think it is important to understand that Java is not just a=20
> language," Bosworth began. "If it were just a language, it would not=20=

> be a threat to us. We would and could easily just build the best=20
> implementation of this language and be done. It is, however, much=20
> more. It is an alternative to COM"

> Thomas Reardon, a Microsoft executive in charge of Internet=20
> operations, wrote in November 1996 that "We should just quietly grow=20=

> [Microsoft's Java tools'] share and assume that people will take more=20=

> advantage of our classes without ever realizing they are building=20
> win32-only java apps."

> Java is currently in first place, with a rating of 45.2; the next=20
> language, C, has a rating of 32.2, and C++, ranked third, has a rating=20=

> of 24.6. C# is all the way down at number 9, with a 4.6 rating,=20
> one-tenth that of Java.
> But the headline at the top of January's chart tells another story:=20
> "C# Still on Track to Become Number 1 Within 2 Years Time."

>  But Judge Motz kept his courtroom open, asking the dozens of=20
> attorneys involved in the case to show up through the snow; according=20=

> to one witness in the trial, the judge himself slept in his chambers=20=

> one night to make sure he got to court in the morning. The 42-page=20
> ruling (PDF here) Motz issued a couple of weeks later speaks to that=20=

> determination; it is, if there can be such a thing, a judicial tour de=20=

> force. In a plain, first-person narrative, Motz goes through the=20
> sordid history of the battle between Sun and Microsoft over Java,=20
> grappling with each side's arguments and explaining rather elegantly=20=

> why requiring Sun's Java in copies of Windows would be best for all=20
> parties involved.

Is there hope for Java?
A judge has ordered Microsoft to make it easy for Sun's popular=20
programming language to work with Windows. But the remedy may be too=20
little, too late.
- - - - - - - - - - - -
By Farhad Manjoo

Jan. 21, 2003 =A0|=A0 One Sunday in September 1996, Adam Bosworth, a=20
respected Microsoft software engineer who headed the company's Internet=20=

Explorer division, wrote a long memo to several company executives,=20
including Bill Gates. Bosworth knew that Gates, then the company's CEO,=20=

was about to go on one of his "Think Weeks" -- the monkish retreats=20
during which he pondered Microsoft's long-term business strategies. In=20=

preparation for the week, Bosworth wanted to alert Gates to an emerging=20=


The threat, as Bosworth saw it, was Java, a programming language=20
created by Sun Microsystems that allowed programmers to write code one=20=

time and run it on a number of different operating systems -- and=20
securely over the Web -- without customizing it for each configuration=20=

of computer hardware and OS. "I think it is important to understand=20
that Java is not just a language," Bosworth began. "If it were just a=20
language, it would not be a threat to us. We would and could easily=20
just build the best implementation of this language and be done. It is,=20=

however, much more. It is an alternative to COM" -- which happens to be=20=

the programming model on which Windows is based.

In the course of a thousand words or so, Bosworth explained how easy it=20=

was to program in Java. Doing many tasks in the Windows-Com model,=20
using the C++ programming language, required "quite a lot of hard code"=20=

that was more cumbersome to write "than the Java equivalent," he wrote.=20=

There were some ways that Microsoft could fight Java, Bosworth=20
surmised; one of them was to "quietly offer 'extensions'" to Java that=20=

would have the effect of making Java programs work better on Windows,=20
or not at all on other platforms. He cautioned that this should be done=20=

"in ways that seduce rather than collide." Above all, Bosworth wrote,=20
Microsoft had to realize the power of Java: "We must acknowledge that=20
Java competes with COM in order to understand what to do about it, not=20=

just put our heads in the sand."

Bosworth's memo alarmed Gates. "This scares the hell out of me," he=20
wrote the next day -- words that turned out to be embarrassing when=20
they were eventually presented in the Justice Department's antitrust=20
trial against Microsoft. (The e-mail thread is available in PDF=20
format.) "It is very unclear to me what our [operating system] will=20
offer to Java client applications code that will make them unique=20
enough to preserve our market position. Understanding this is so=20
important that it deserves top priority."

And so began Microsoft's effort to stifle Java. Details of its plan=20
have since been exposed in three court cases, though specific=20
conclusions regarding the legality of Microsoft's actions have yet to=20
be reached. The latest scene is a federal district court in Maryland,=20
where several companies are suing Microsoft for alleged damages=20
stemming from its violation of antitrust laws. Ruling on a preliminary=20=

motion in that case in December, U.S. District Judge J. Frederick Motz=20=

ordered Microsoft to include a copy of Sun's Java "runtime environment"=20=

-- the software that allows a computer to run programs written in Java=20=

-- on "any product containing .Net," the nascent programming platform=20
from Microsoft that is seen as a logical competitor to Java. On=20
Wednesday, Motz gave Microsoft 120 days to begin shipping Sun's Java=20
runtime in Windows. Microsoft says it will appeal the order.

Perhaps because it came during the holidays, and several years after=20
the fight between Sun and Microsoft seemed relevant, response to the=20
order was muted. Much of what was said about it reflected the dull=20
he-said, she-said nature of complex corporate disputes; nobody in the=20
industry expected Java to experience an explosion in popularity as a=20
result of the ruling, nor for Microsoft to be brought to its knees. But=20=

if it holds, the ruling could mark a salutary event in the world of=20
software -- the beginning of real competition between two pretty good=20
programming schemes, each theoretically capable of running on multiple=20=

platforms. But it's also possible that the damage may already be done=20
-- that Microsoft's early moves against Java sealed the fate of Sun's=20
programming language and paved the way for Microsoft to take over yet=20
another software market, with .Net.

Since its inception, Java has had mixed success. Not long after it was=20=

released, amid a storm of boom-era hype, Java was criticized for=20
running very slowly on Windows, and -- because of Microsoft's actions,=20=

Sun contends -- the software still carries the burden of that first=20
impression. But Java has made gains in non-Windows environments. The=20
language is, according to some, the most widely used language for=20
network servers and mobile devices. Sun estimates there are about 3=20
million Java developers, and Java has become a primary language taught=20=

in college computer science courses. There are no firm numbers, but=20
Java could be the most popular programming language in the world. In=20
other words, if Java -- a new, improved, fast version of Java -- finds=20=

itself on every copy of Windows, there won't be a shortage of=20
developers to build Java-based Windows programs.

As the court documents show, Microsoft understands the threat from Java=20=

-- that's why it has prepared an alternative to Java called C#=20
(pronounced "C sharp"). Part of the .Net Framework programming model,=20
the C# language looks much like Java; Microsoft even says that, like=20
Java, C# can run on non-Windows machines. To that end, the company has=20=

managed to get ECMA, a European standards body, to bless the language=20
as being "open" and out of Microsoft's direct control. "You really are=20=

seeing a different way of working, from Microsoft's perspective,"=20
Anders Hejlsberg, the chief architect of C# at Microsoft, said last=20

Critics of Microsoft are not inclined to believe that the company has=20
reformed; it's not in Microsoft's interest to see cross-platform=20
languages flourish, and its past behavior proves it. But the beauty of=20=

Motz's decision is that the company itself may now be irrelevant. If=20
Sun's Java and Microsoft's .Net are both supported on future versions=20
of Windows, programmers will have the freedom to use whichever language=20=

fits their needs and not have to worry about whether users will have=20
the software to run it. There may finally be a level playing field, and=20=

in that respect Motz's decision may be the first Microsoft antitrust=20
ruling of any practical importance. Even if Java doesn't bring down=20
Windows -- which might have been Sun's initial goal -- it might at=20
least provide some competition to .Net. And in the world of Windows=20
programming, competition would be a truly novel thing.

In the first week of December, when evidentiary hearings were scheduled=20=

in the Sun-Microsoft case, Baltimore was hit by its largest snowstorm=20
in three years. Much of the city was shut down. But Judge Motz kept his=20=

courtroom open, asking the dozens of attorneys involved in the case to=20=

show up through the snow; according to one witness in the trial, the=20
judge himself slept in his chambers one night to make sure he got to=20
court in the morning. The 42-page ruling (PDF here) Motz issued a=20
couple of weeks later speaks to that determination; it is, if there can=20=

be such a thing, a judicial tour de force. In a plain, first-person=20
narrative, Motz goes through the sordid history of the battle between=20
Sun and Microsoft over Java, grappling with each side's arguments and=20
explaining rather elegantly why requiring Sun's Java in copies of=20
Windows would be best for all parties involved.

Judges presiding over litigation involving complex technology often=20
seem adrift in the jargon. Motz, though, gives the impression of=20
someone well-schooled in Java and .Net, and his support of Sun's=20
position -- he almost completely sides with Sun -- and rejection of=20
Microsoft's is grounded in tech and business realities. His theory, in=20=

brief, is this: The sorry state of Java on desktop computers -- the=20
"fragmented" market, in which most computers have old versions of the=20
Java software, and some people have a bastardized, Microsoft-friendly=20
version, causing developers to sour on the platform -- is probably the=20=

result of Microsoft's "anticompetitive conduct." Although the issue=20
will be fully argued in an eventual trial, Microsoft, he says, appears=20=

to have used its Windows monopoly to destroy "Sun's channels of=20
distribution" for Java; and now, having done that, Microsoft wants to=20
introduce into this rigged marketplace its alternative to Java.

The only way to set the market right, Motz says, is to attempt to=20
reverse Microsoft's actions. Requiring Microsoft to offer Sun's Java in=20=

Windows, he wrote, "is designed to prevent Microsoft from obtaining=20
future advantage from its past wrongs and to correct the distortion in=20=

the marketplace that its violations of the antitrust laws have caused."

Who caused Java to fail on the Windows desktop? Of all the questions=20
argued in the various trials involving Microsoft, this one is perhaps=20
the most difficult to answer. Certainly, as the evidence shows, the=20
people at Microsoft were intent on seeing Java fail. But many say that=20=

just because Java did fall flat on its face, and just because Microsoft=20=

pushed it a little here and there, one can't conclude that Microsoft=20
deserves all the blame. Java, people point out, had a slow graphical=20
interface and generally poor performance otherwise -- couldn't it have=20=

tripped up all on its own?

Greg DeMichillie, who used to work at Microsoft on its C#, C++ and Java=20=

programming applications, and who's now an analyst at the firm=20
Directions on Microsoft, is one such skeptic. "There's a lot of people=20=

who say that Microsoft wanted to kill Java" because it was "write-once,=20=

run-anywhere," he says. "But really, people at Microsoft just thought=20
that was a ridiculous notion, and they didn't pay any attention to it.=20=

They said, 'For technological reasons, we don't think write-once will=20

DeMichillie concedes that Microsoft added many "extensions" to Java in=20=

its programming environment that, when used in a program, would cause=20
the program to run only on Windows. But he says that those extensions=20
were put in to improve Java on Windows, not to pollute Java. "What they=20=

liked about Java was that it was easier to write applications in it.=20
They liked it better as a programming language. And so they said,=20
'Let's make Java a good way to write a Windows application.' And of all=20=

the stuff that's been said of what Microsoft did to Java, it's good to=20=

point out that they did make a better version of Java. Microsoft does=20
have some really sharp people, and they know Windows inside and out,=20
and so if anyone were to make Java faster on Windows they were the ones=20=

to do it."

He also says that Microsoft did not do any of this quietly; Microsoft=20
warned developers that its tools could result in Windows-only=20
applications. "I remember they were very upfront about it," DeMichillie=20=

says. "When they came out with their Java tools that had=20
Windows-specific features, they were very clear, in their communication=20=

with developers, that it was Windows-specific. The notion that=20
Microsoft was trying to make people think they were building=20
cross-platform applications when they weren't, that's not true."

Perhaps DeMichillie is right, but his version is not supported by the=20
facts. In his opinion, Motz cites numerous internal Microsoft documents=20=

-- such as the Bosworth memo and Gates' reaction to it -- that suggest=20=

a company-wide effort to dupe developers into thinking they were=20
building cross-platform programs that in truth ran only on Windows.

For example, Thomas Reardon, a Microsoft executive in charge of=20
Internet operations, wrote in November 1996 that "We should just=20
quietly grow [Microsoft's Java tools'] share and assume that people=20
will take more advantage of our classes without ever realizing they are=20=

building win32-only java apps." Significantly, too, the findings of=20
fact from the government's antitrust trial -- 412 very damaging=20
statements about company behavior that may, in time, turn out to be the=20=

most important legacy of the never-ending federal case -- state that=20
the company didn't start warning developers about compatibility issues=20=

with Microsoft's Java tools until 1998, when it was ordered to do so by=20=

a court. (Because those facts were set down during previous litigation,=20=

Microsoft has little room to re-argue them in this case; Motz presumed=20=

them to be true. In the past, though, Microsoft has argued that what=20
executives write in e-mail doesn't necessarily reflect company policy.)

So the question lingers -- was Java on the desktop always broken, or=20
did Microsoft break it? In the end, we may never get an answer; but as=20=

Sun will point out, it's telling that Java did well in all markets=20
where Microsoft didn't have a monopoly. Why did that happen? Eight=20
years after the introduction of Java, it seems clear: The language was=20=

successful because, some initial problems notwithstanding, it provided=20=

a much needed, innovative programming interface at just the right time.

Every month, TIOBE Software, a Dutch company that makes developer=20
tools, publishes a survey of the most popular programming languages in=20=

use. The company uses Google to approximate the number of engineers who=20=

are expert in the language, the availability of courses taught in it,=20
and how many companies sell software using the language. TIOBE comes up=20=

with a three-digit "rating" based on the count. Java is currently in=20
first place, with a rating of 45.2; the next language, C, has a rating=20=

of 32.2, and C++, ranked third, has a rating of 24.6. C# is all the way=20=

down at number 9, with a 4.6 rating, one-tenth that of Java.

But the headline at the top of January's chart tells another story: "C#=20=

Still on Track to Become Number 1 Within 2 Years Time." According to=20
TIOBE, the popularity of C# is rising faster than that any other=20
language; Java is relatively steady. This shouldn't come as a surprise=20=

-- in a sense, it's to be expected, as more people are starting to use=20=

C# because it's new.

But the chart prompts two interesting questions: How did Java become so=20=

popular? And why is it not popular enough to beat out C#?

In the early 1990s, Sun Microsystems made what could have been an=20
unfortunate business misstep; the company bet that the era of PCs -- a=20=

business in which Sun did not have much of a foothold -- was on the=20
wane, and that the influence of the personal computer would quickly be=20=

eclipsed by that of consumer electronics devices like set-top boxes.=20
(In retrospect, that hypothesis was early rather than wrong.) To take=20
advantage of the new market, Sun sequestered about a dozen of its=20
brightest engineers in an nondescript office park in Silicon Valley,=20
telling them to come up with something. A year and a half later, they=20
did: They'd built a device called StarSeven that could control a number=20=

of home appliances from the touch of a button; at its heart was Oak, a=20=

new programming language developed by a Sun engineer named James=20

In time, Sun realized that the Internet, and not set-top boxes, would=20
rule the new digital landscape; and by 1995, when Oak was renamed Java=20=

and officially released, the language was anointed as the first=20
programming system of the Internet era. Sun basked in the Internet=20
glory. Java, which was soon being released with the Netscape browser,=20
could do Web animations, and for a while that was its main claim to=20

The Java language was innovative in two main respects. First, Java is=20
what's called an "interpreted language." There are many technical ways=20=

to define this, but essentially it means that a Java program doesn't=20
give instructions directly to the machine it's running on; instead,=20
Java code tells an "interpreter" what to do, and the interpreter then=20
tells the computer. Interpretation is what allows Java to work on many=20=

different computer systems, from all flavors of PCs to mobile phones to=20=

large servers. To run a Java program on a specific system -- the Mars=20
Pathfinder rover, say -- all one has to do is write an interpreter for=20=

that system. (It's the interpreter -- called the Sun Java Virtual=20
Machine -- that Microsoft was ordered to carry in its products.=20
Interpretation has also been blamed for Java's performance problems;=20
but Sun and, now, Microsoft in .Net, have improved their interpreters=20
to a point that there is often no significant performance penalty to=20
Java and C#.)

Java was also interesting to programmers because it was one of the=20
first easy-to-use "object oriented" languages. In the early 1990s,=20
object orientation was the new wave of programming; it's beyond the=20
scope of this article to get into the specifics of the technology,=20
except to say that OOP, as it's called, is a design construct that=20
helps programmers code small pieces of an application separately,=20
breaking up the code into reusable bits called "classes" or "modules."=20=

(A good FAQ on OOP is here.)

Before Java, C++ was the foremost object-oriented language -- but, even=20=

though OOP was supposed to make programming easier, teaching object=20
orientation in C++ was difficult. When Java was released, "the=20
universities were in a superheated state," says Robert Harper, a=20
computer scientist at Carnegie Mellon. "They were bursting for some=20
alternative to C++, because they wanted to teach object-oriented=20
programming, but using C++ for beginners is just cruel. So from an=20
education point of view many people jumped on Java for their=20
introductory courses." Several other professors said much the same=20
thing; Java is thought to be the premier introductory language on=20
college campuses, and advanced placement high school students use it as=20=


Many people say that Microsoft's C# is just a variation of Java; it=20
does some things better, some things not as well, but mostly the=20
languages are very close. "C# is to Java as the Windows interface is to=20=

the Mac OS," Harper said.

Anders Hejlsberg, who designed C#, has acknowledged that the new=20
Microsoft language is similar to Java; C# is also object-oriented and=20
interpreted. But Hejlsberg also says that there are significant=20
differences between the languages and that C#, and .Net, are=20
improvements over Java.

According to various developers who've used both systems, the nicest=20
thing about Microsoft's .Net is that it uses multiple languages. The=20
system doesn't lock people in to one language, as the Java platform=20
does; instead, developers can write code in almost anything -- whether=20=

in C++, C, C#, or even in Java -- and then have it all translated into=20=

what Microsoft calls the Common Language Runtime (CLR). It's this code=20=

that is run in an interpreter on your machine.

Miguel de Icaza, the co-founder of the open-source software company=20
Ximian, leads the Mono Project, which has created a Linux version of=20
.Net. He says the advantage of .Net is that it lets developers protect=20=

their "code investment." All the code they've already written in C++ or=20=

C can be translated -- or "compiled" -- to the CLR. Then, additions to=20=

the old code can be added with C#, which will also compile to CLR.=20
Everything will work together as one application, even though many=20
languages may have been used in the creation.

Conversely, "the Java solution to reuse your code investment is to=20
throw everything out and do everything in Java," he said.

Some developers are OK with making that sacrifice in order to use Java,=20=

because they see .Net as having one big risk: It will become a=20
Windows-only language. Microsoft denies this charge and points to the=20
standardization of C# as proof. But Rick Ross, the founder of=20
Javalobby, a Web forum for Java developers, said that although he's=20
used C# and likes some aspects of it, he thinks of it as a=20
"Windows-only" language.

What about projects to port .Net to other systems? "I don't expect=20
those to come to fruition in the way that Java is cross-platform," he=20
said, echoing the sentiments of many Java developers. "I know the=20
amount of work that Sun has done to create portability: the fixing of=20
bugs, really working hard to be cross-platform. And Microsoft is not=20
doing that kind of work, and I don't think they'd dispute that. Only=20
small parts of C# got standardized. So yeah, maybe you can you see C#=20
on other platforms, but I wouldn't expect to build a cross-platform=20

But de Icaza disputes such claims. "There's a lot of crack being=20
smoked," he said. "I'm going to tell you what it is -- there are very=20
very very hard parts in .Net, extremely hard parts to do, and those are=20=

the things that got standardized. The binary file formats for .Net=20
applications, that got standardized. Everything else that was easy=20
didn't get standardized, but the important parts did."

As a consequence, he said, .Net on Linux is a reality, "and Mono is=20
good proof of it.=94 De Icaza said that Ximian is already coding some of=20=

its programs in C#, and he expects that in time its flagship programs=20
-- like Evolution, the company's mail program -- will be coded, in=20
part, in the .Net scheme.

But even so, de Icaza concedes that it will take a while to create=20
applications in .Net for Windows that can also easily run on Linux in=20
Mono. That's because key parts of what makes an application work in=20
Windows aren't available in Mono. And some of those parts are very=20
closely guarded pieces of the Microsoft empire -- so is it reasonable=20
to expect the company to let that stuff go to other platforms? That's=20
not likely.

When asked to guess whether C# or Java would be more popular in the=20
long run, almost every programmer contacted for this article demurred=20
-- and then waxed philosophical on the nature of languages. Programming=20=

languages, several said, are like religions; programmers grow=20
accustomed to a language, or a family of languages, and despite all=20
logic or argument or practical necessity, they will stick with it=20
because it's what they know, what they believe in.

In the end, C# and Java are perhaps best analyzed in that light. They=20
may be similar languages, but there's a philosophical gulf between the=20=

two. The people who ultimately choose Java will likely value=20
compatibility over the performance gains you get from building a=20
program specifically for one system. They'd prefer that everything ran=20=

everywhere, even if they have to lose their "code investment." The=20
people who choose .Net may also care about going cross-platform, but=20
they'd like some flexibility in the matter. They'd like to be able to=20
build a program that runs only on Windows, so it works with all their=20
other programs that also work only on Windows.

What will the majority choose? That question could have vast=20
implications for the world of software. Not least would be the one that=20=

scared the hell out of Gates in 1996: If Java wins, and most programs=20
run across all software, what use will any of us have for Windows=20