bitwise technical
editor Dermot
Hogan has managed and developed global risk
management systems for several major international
banks and financial institutions. He is known for
his sunny disposition and his jovial personality
(he claims).
In this month's Bytegeist,
Dermot asks: Who are the winners
in Microsoft's war on Java?Linux,
IBM and Google to name but three…
Bytegeist Smells the Coffee...
Last month I just sort of threw in the remark that “Java
was never much of a threat to Microsoft”. That’s
a fairly bold statement – and certainly goes quite
a bit against the received wisdom of a few years back,
and also, incidentally, of today.
I’m not sure of the exact history of Java (there’s
a reasonable summary
on Wikipedia)
but I think you can safely say that it wasn’t designed
to do what it has, in fact, ended up doing: being the
stuff that holds the business logic between a database
and web servers. Though to be fair, it’s also widely
used in mobile phones, which is a bit closer to its original
intentions.
But how Java got to that position is quite interesting – and
while I believe it was never much of an actual threat
to Microsoft, Microsoft’s perception of
the Java threat has had profound consequences. You
could write a book on the subject of how Java
found its place. And yet the explanation of how it arrived
at its present location is, in my view, quite simple:
it boils down to the architecture of web servers
and, yes, Microsoft.
In the mid '90s, when the web was starting to
take off, Intel and the PC architecture were simply not
powerful enough for large web servers. The best architectures
were Unix on Sun’s Sparc, Hewlett Packard’s
PA-Risc or the IBM equivalent. And there wasn’t
a language suitable for web server development. Apart
from Perl, that is – but Perl vs. Java and Sun’s
slippery propaganda is another story.
The main characteristics of Java that made it suitable
for web servers were that it was platform independent
(mostly), it had managed memory and it wasn’t from
Microsoft. Platform independence isn’t actually
that critical. Not many end users moved an entire application
from, say, Sun boxes to IBM machines; but it was important
for application vendors. Being able to sell your product
into several different hardware bases rather than just
one was a big plus. Managed memory is important if your
applications have to run 24/7. A memory leak in Visual
Studio or Opera is annoying but not critical; you just
shut it down every so often and restart. But in an online
banking application? I don’t think so.
“Microsoft is like a huge
shark. If you look around the shark, you
won’t see too many decent sized fish. They’ve
been eaten…”
And so we come to Microsoft…
Now when you get to Microsoft, you have to consider
effects other than technology. Sort of like IBM: in IBM’s
case you can find that IBM has directors on the board
of the company you are trying to sell into. Which can
make life difficult if your product isn’t based
on IBM hardware. That happened to me once. With Microsoft,
the effect is different. Microsoft is like a huge shark
moving in the sea. If you look carefully around the shark,
you won’t see too many decent sized fish. There
are small fish like pilot fish and remoras – but
very few middle sized ones. They’ve been eaten.
Basically, if you are a medium sized company developing
a software product in the Microsoft sphere, you have
to be very careful that you aren’t doing expensive
market research for Microsoft. Let’s say, for example,
that I decide to produce a Visual Basic 6.5 (see last
month’s column). Well, after spending a million
dollars or so, I finally get the thing out the door.
If it’s a failure, then I (or my backers) have
lost a million bucks. Tough. But if it’s a success,
then Microsoft is likely to step in with a Visual Basic
6.6; my Visual Basic 6.5 goes down the pan and I’ve
lost my million bucks. Very tough.
So it’s important that software is developed
in an area where Microsoft isn’t. That’s
why Java took off on the web servers – Microsoft
just wasn’t there. This is independent of the technical
merits or otherwise of Java. In my view, Java is a general
purpose language of no special distinction – a
bit like C# right now. Java will get the job done as
will many other languages. Whether it’s the best
language to use is quite a different argument.
But on the PC, Java had no advantages. The PC is Microsoft’s
absolute fiefdom, so Microsoft wasn’t going to
go out of its way to make life easy for Sun. Also Java
was (and is) slower than compiled C++ code. Even with
today’s decently fast PCs, just ask how many Microsoft
products like Office or Visual Studio are written in
C# - there are none as far as I know. Much more important,
though, with Java you had to program to a different API
specification. You could program to the Windows API,
but it wasn’t exactly encouraged by Sun. Sun’s
early windowing API implementation sucked, the quality
was terrible and it was a fairly steep learning curve.
And as for portability – where were you going
port your nice commercial portable Java application to?
A Macintosh with 3% market share? Or desktop Linux – where
nobody pays for anything on principle? Get real.
And so Java on the PC died. But its ghost has lingered
on, haunting Microsoft and influencing the strategic
direction of Microsoft’s products.
In general over the last few years, the technical push
has been away from building ‘fat’ clients
running on a PC with say, a Visual Basic front end and
a database back end, to a three-tier architecture with
a thin-client browser front end, business logic running
on the server and a database on a different box. Now
this has nothing to do with Java: Perl will do. As will
Ruby on Rails. All you need is something that runs on
the server that implements the business logic. And that
will run under Unix.
“Microsoft has
failed to enable its tools for Unix where the real
business opportunities lie…”
Unix is still the operating system of choice for servers.
It’s an area that Microsoft has signally failed
to address either with its software products or indeed
with any other coherent ideas as far as I can see. It’s
not just that one variant of Unix - Linux - is ‘free’.
That’s really not a consideration for a lot of
companies – the costs of the Oracle database, datacentre
hardware and support staff completely outstrip the cost
of the operating system. It’s simply that Linux/Unix
is a Microsoft-free zone and so that’s where tool
and application companies will tend to develop their
products. Look at Google – it runs on clustered
Linux boxes. Microsoft didn’t even see Google coming
since it was totally fixated on Java at the time.
So, on the one hand, you have Microsoft developing a
Java-like language, C#, because Java is a ‘threat’ and
completely losing the thread on Visual Basic. And on
the other hand, you have Microsoft failing to enable
its tools for Unix where the real business opportunities
lie – and which IBM has grabbed with both hands.
To repeat: the task for Microsoft isn’t to build
a clone of Java to see off Java on the desktop; it’s
to build a toolset that enables people to build applications
that run in a Unix environment – and interoperate
smoothly with the PC environment.
As far as I can see, that just isn’t happening.
We’ve still got the strange situation of people
developing Java code on a PC that that has to be tested
and run in a completely separate environment. The only
example I’ve personally seen at close hand was
certainly not a model of being on-time and on-budget.
Microsoft’s
argument is that if you use Microsoft server products
you won’t end up in this situation. Well that’s
true to a large extent. But do you really want to be
in the firm embrace of a company who can’t be trusted
even to maintain its own products? I’d want to
think long and hard about that.