2004-03-21 (Sunday)

by havoc

Been getting more and more email on the subject of Java, Mono, C++,
etc.; not clear I can ever reply to all the points raised 😉 I still
don’t think anyone has addressed my #1 worry however, as I tried to
point out in my last blog post: forking and fragmentation are the
outcome if current trends continue
. Debating which course of
action is better in an absolute sense is pretty pointless unless that
debate results in a direction with sufficiently broad support.

Put very bluntly, do we think Sun will ship a desktop with Mono no
matter how long we discuss and advocate it? Though less clear-cut, do
we think IBM (for example) will? Or from the other side, do you think
GNOME or Mozilla or for that matter Red Hat or Debian will accept a
proprietary JDK dependency, no matter how long it’s discussed? I just
don’t see these positions changing. And if we then push on without
consensus, we are going to have a hell of a fiasco – at least if you
judge our success in part by how many users we have.

The Linux desktop has maybe 2% marketshare; it’s not time yet to start
shedding allies.

Here’s a question: would we rather wait indefinitely to get
consensus and legal clarity on the most controversial courses of
action
, or go ahead and move forward on a compromise course of
action
? Are we looking to ensure the perfect solution with
indefinite delay, or can we find a 90%-as-good solution we can use
right away?

Some quick summary thoughts on technical and legal issues, though
again as I keep repeating, we have a higher-order problem that
rightness-in-absolute-terms matters nothing without real-life
consensus.

Technical: I agree that C# has some incremental improvements
over Java. But the two systems are essentially similar, and when you
compare them to C instead of to each other, they look much more alike
than different. Cross-language in Java can certainly be done (cf. Jython for example) and can be
improved with existing technology such as CNI or UNO. There’s no
reason it’s hard to do a P/Invoke equivalent for Java, either.
This stuff could even go in the Java spec eventually.

Legal: This topic is huge, but a quick thought I have had. We’re
talking as if Mono and Java have entirely distinct sets of patents
that apply to them; but the technologies are quite similar. It’s
possible (though I’m speculating) that the patents overlap
heavily. (Though the overlap isn’t quite symmetrical, since Java
predates C#.) And for that matter many large companies probably happen
to have patents that apply. At some point Stick with C/C++
looks pretty attractive.

Another angle on the law: a problem with legal issues is that none of
us are lawyers, and generally it’s not possible to post or republish
legal advice if we receive it. Because the legal matters are a
complex risk analysis, not black and white, to me what it comes down
to is whether those who have something to lose, and have gotten legal
advice, are willing to ship a particular piece of software.

As a number of mails I’ve received argue, we should remember that
sticking with C++ or Python or the like is an option. We don’t
have to buy into anything more – and may be unable to,
because legal experts will have final say.

At the same time, what really interests me is the possibility of
getting enough consensus today to start using a managed
language. Right now the community seems to be in “wait and see” mode
while companies are in multiple, incompatible “full speed ahead”
modes.

(This post was originally found at http://log.ometer.com/2004-03.html#21.5)

My Twitter account is @havocp.
Interested in becoming a better software developer? Sign up for my email list and I'll let you know when I write something new.