<?xml version="1.0"?>

<rss version="2.0">
  <channel>
    <title>Andrew Cowie</title>
    <link>http://research.operationaldynamics.com/blogs/andrew/software/free-java/</link>
    <description>Blog postings by Andrew Cowie about Open Source and Software Development</description>
    <language>en</language>
    <copyright>Copyright (c) 2008 Operational Dynamics Consulting Pty Ltd. All rights reserved. Not for redistribution or attribution without permission in writing.</copyright>

    <image>
      <url>http://research.operationaldynamics.com/images/andrew_Hackergotchi.png</url>
      <title>Operational Dynamics Research</title>
      <link>http://research.operationaldynamics.com/blogs/andrew/software/free-java/</link>
      <width>80</width>
      <height>86</height>
    </image>

    <lastBuildDate>Tue, 18 Nov 2008 01:36:00 GMT</lastBuildDate>

    <item>
      <title>Sun&#8217;s secret web server</title>
      <link>http://research.operationaldynamics.com/blogs/andrew/software/free-java/sun-secret-webserver.html</link>
      <description><![CDATA[<p>For a while now I&#8217;d been looking for something to just run up an HTTP server to answer simple queries. </p>

<p>The Java Servlet APIs are comprehensive, and there are a number of very good implementations (we use <a href="http://www.caucho.com/">Resin</a> in highly loaded environments and it scales like a dream; we recommend it heartily to our clients). Nevertheless, sometimes you&#8217;re working on something small or ad-hoc, and you just want a simple web server that doesn&#8217;t involve application descriptors, XML, configuring an entire service instance, and everything else. Somewhat to everyone&#8217;s long standing annoyance (not to mention the derision of people who work in other languages), there is nothing in the Java standard library to just get on with this.</p>

<p>In their release of Java 1.6, however, Sun quietly included such a server. Apparently it had been around for some time powering internals of various other projects, but in 1.6 they exposed it as a public library, in package <code>com.sun.net.httpserver</code>, and it ships alongside the rest of their Java VM and standard library.</p>

<p>It&#8217;s got a rather nice API. You fire up a server and add one or more handlers:</p>

<pre><code>        addr  = new InetSocketAddress("localhost", 8000);
        server = HttpServer.create(addr, 10);
        server.createContext("/eg", new ExampleHandler());
        server.start();
</code></pre>

<p>the &#8220;contexts&#8221; are paths from root that are handled by different <code>HttpHandler</code> instances; implementing that interface is simply:</p>

<pre><code>    public void handle(HttpExchange t) throws IOException {
        ...
    }
</code></pre>

<p>Once there, you&#8217;ve got a number of really straight forward methods on <code>HttpHandler</code> to get done what needs doing:</p>

<pre><code>        t.getProtocol();
        t.getRequestMethod();
        t.getRequestURI();
        t.getRequestHeaders();
        t.sendResponseHeaders(code, length);
</code></pre>

<p>for the metadata, and an <code>InputStream</code> and an <code>OutputStream</code> from:</p>

<pre><code>        t.getRequestBody();            
        t.getResponseBody();
</code></pre>

<p>respectively. You write the response to the later. Too easy. I did up a modified version of the example they have in the package description file as something that echos back the HTTP request as the response and it was quite straight forward. Java programmers can glance at <a href="/files/andrew/EchoServer.html"><code>EchoServer.java</code></a> if they&#8217;re interested.</p>

<h2>The catch</h2>

<p>Nothing is ever simple. The bytecode for the <code>com.sun.net.httpserver</code> package is bundled in with the <code>rt.jar</code> that comprises the bulk of the standard library, but for whatever reason they didn&#8217;t include the JavaDoc for these classes in the same tree as the rest of the API documentation.&#185; This is a <em>huge</em> pain, because once you&#8217;ve told Eclipse where to look for the docs for a given blob (in this case, for <code>rt.jar</code>) you can&#8217;t then tell it to look somewhere else for a sub part. And if you&#8217;re trying to develop something in a beautiful IDE like Eclipse, the idea of not having inline popup documentation and completion working properly is just a non-starter.</p>

<p>You can point Eclipse at either a JavaDoc tree, or at the raw sources and it&#8217;ll just extract the documentation on the fly. But since the <code>src.zip</code> shipping with Sun&#8217;s proprietary Java 1.6 didn&#8217;t include the classes for this web server code, that didn&#8217;t work either.</p>

<p>So that would have been the writing on the wall for Sun&#8217;s <code>httpserver</code>.</p>

<h2>Open Java to the rescue</h2>

<p>After chatting with some people in <code>#gentoo-java</code> and <code>#classpath</code>, we suddenly realized that the solution was at hand. Source code to Open Java <em>is</em> available.&#178; And even though it&#8217;s <em>still</em> not yet a fully Libre replacement for Sun&#8217;s proprietary Java 1.6 (the size of the binary proprietary plugs you have to drop into it to make it work is staggering), it does contain most of the sources to the Java standard library. So we grabbed a copy of the <code>openjdk 1.6 b08</code> code drop, and just pointed Eclipse at it as the sources for <code>rt.jar</code> for cases where it couldn&#8217;t find the JavaDoc when it was looking something up. And ta-da!</p>

<p>So, amidst considerable astonishment but great pleasure, here was an example of something someone had Open Sourced working in a synergistic way but in a way that they hadn&#8217;t quite expected.  This wouldn&#8217;t have worked if Sun hadn&#8217;t Open Sourced (most of) Java; but because they have we were able to use those sources to solve a problem. Thanks to the heroes at Sun Microsystems who made this possible!</p>

<p>Eclipse users will have to adjust their filters so that <code>com.sun.*</code> <em>isn&#8217;t</em> excluded from Type completions and what not; While we&#8217;ve all loved our <code>com.sun.*</code> excludes, it blots out <code>com.sun.net.httpserver</code>. If you plan on using it, then I suggest switching to excluding <code>com.sun.org.*</code> and <code>com.sun.xml.*</code>, etc. A pain, but that&#8217;s what we get for Sun not having put this into the standard library.</p>

<p>Speaking of which, I doubt we&#8217;ll ever see this as a part of the &#8220;Java&#8221; (wouldn&#8217;t <code>java.net.httpserver</code> just do the trick?) because the marketing side of Sun has a fairly strong fixation on &#8220;Servlets are what you use for everything&#8221;. Oh well. It would be a really pleasant surprise, though. Here&#8217;s hoping.</p>

<h2>But not really</h2>

<p>We would never use this in something we were distributing to anyone outside; after all, they might be using some other VM and <code>com.sun.net.httpserver</code> isn&#8217;t available as a standalone library. And that&#8217;s not to mention scalability; if you need something bulletproof then use the Resin servlet runner. But if you need a quick-and-dirty but easy-to-use HTTP server and you happen to have Sun Java or the future tense Open Java available, then this should do the trick for you. And if you&#8217;re feeling like whipping up something of your own, this really does have a nice API (somewhat a rarity in the Java landscape) and so this might be a good starting point for you. Either way, have a look.</p>

<p>AfC</p>

<p>&#185; As mentioned, the API docs for <code>com.net.sun.httpserver</code> are <em>not</em> in the usual location at <a href="http://java.sun.com/javase/6/docs/api/overview-summary.html"><code>docs/api/</code></a> along with the rest of the standard library but at <a href="http://java.sun.com/javase/6/docs/jre/api/net/httpserver/spec/overview-summary.html"><code>docs/jre/api/net/httpserver/spec/</code></a> of all places. Who knows what they were smoking that day.</p>

<p>&#178; I am very tired of apologizing to people who have just installed &#8220;Java&#8221; on their Linux boxes that they have to download something else. I&#8217;ve given up trying to explain the difference between a JRE and a JDK to people; even after I do people respond with <em>&#8220;who cares; I just want a working Java that I can use to build your software.&#8221;</em> Sun having attempted to brand their Libre implementation of Java as &#8220;Open JDK&#8221; just perpetuates this nonsense. Not including the compiler classes in something that is already 18 MB big is stupid, and it&#8217;s not like the desktop VM is what you use on a resource limited embedded device. Open Java works just fine as a name, thank you very much, and it is (almost) a Free Java. Almost.</p>
]]></description>
      <author>andrew@operationaldynamics.com (Andrew Cowie)</author>
      <category>/andrew/software/free-java</category>
      <pubDate>Thu, 10 Apr 2008 14:27:00 GMT</pubDate>
      <guid isPermaLink="false">sun-secret-webserver</guid>
    </item>

    <item>
      <title>Fascinating thread: FOSS Quality Control</title>
      <link>http://research.operationaldynamics.com/blogs/andrew/software/free-java/fascinating-classpath-quality-control.html</link>
      <description><![CDATA[<p>A long-time critic of things Open Source showed up on the Classpath project&#8217;s mailing list and asked some rather provoking questions in a thread titled &#8220;Quality control and FOSS rant&#8221;. He at least ended with: &#8220;I suppose this is more of a troll than a criticism, sorry about that.&#8221;</p>

<p>Despite the flame bait, the <a href="http://developer.classpath.org/pipermail/classpath/2008-January/002397.html">thread</a> contained some surprisingly insightful replies. It&#8217;s always great to hear some of the top software developers in the world noting their motivations and why they believe what they do works.</p>

<p>From <a href="http://kennke.org/blog">Roman Kennke</a>: </p>

<blockquote>
  <p>Both approaches (closed and open) apparently tend to produce relatively high
  quality code (or really crappy code, happens in both camps), where with
  the closed approach the developers (or vendors) have to take over 100%
  responsibility (because the end user has no way to interact with the
  development), which usually makes things very formal and slow, where the
  open approach relies very much on the end users reporting problems. In
  most active projects these are fixed really quickly, giving both the
  developers and the end users a warm fuzzy feeling ;-)</p>
</blockquote>

<p>From <a href="http://blog.fuseyism.com/">Andrew John Hughes</a></p>

<blockquote>
  <p>There&#8217;s a lot to be said for feedback and interaction with your users that&#8217;s
  often overlooked.  All the ideas of complicated quality control
  processes in the world is not going to make a user feel as loved as
  seeing someone responding quickly to their bug and fixing it in a
  short space of time.</p>
</blockquote>

<p>From <a href="http://gnu.wildebeest.org/diary">Mark Wielaard</a>, a remark on the complex administrative process used by the project to review contributed code:</p>

<blockquote>
  <p>We do have a flow chart that people have to follow when contributing&#8230; It is all very formal really: <a href="http://gnu.wildebeest.org/~mark/patch.png">http://gnu.wildebeest.org/~mark/patch.png</a></p>
</blockquote>

<p>and from <a href="http://people.freebsd.org/~archie/">Archie Cobbs</a>, a reminder about the track record of a certain formerly proprietary process on solving bug desperately desired by their user community:</p>

<blockquote>
  <p>The number #1 voted <a href="http://bugs.sun.com/view_bug.do?bug_id=4670071">bug</a> in their bug database has been unfixed for over 5 YEARS!</p>
</blockquote>

<p><em>The comments on that bug make for hilarious reading, but the bigger point is this: the identity of the people making the decisions about the relevance of the issue are hidden. That sort of thing doesn&#8217;t inspire much hope for people on the outside. It&#8217;s not like we&#8217;re talking about national security or the future of western democracy; it&#8217;s a bug report that turned into a feature request for a piece of software that many, many people depend on! No one likes to be fed the line that their problem is so</em> <span style="color: red;">Top Secret</span> <em>that they won&#8217;t be told when (or even if) the problem will be addressed. The cloak of anonymity strikes again</em>.</p>

<p>Fascinating thread.</p>

<p>AfC</p>
]]></description>
      <author>andrew@operationaldynamics.com (Andrew Cowie)</author>
      <category>/andrew/software/free-java</category>
      <pubDate>Fri, 11 Jan 2008 02:30:00 GMT</pubDate>
      <guid isPermaLink="false">fascinating-classpath-quality-control</guid>
    </item>

    <item>
      <title>Can&#8217;t find the comment</title>
      <link>http://research.operationaldynamics.com/blogs/andrew/software/free-java/still-looking.html</link>
      <description><![CDATA[<p>I was just about to post an essay when one of my reviewers asked me:</p>

<p>&#8220;Hey, are you sure we did that? I can&#8217;t find it.&#8221;</p>

<p>&#8220;Sure,&#8221; I replied. &#8220;I put your project&#8217;s file name in our source code for reference. Let me pull it up.&#8221;</p>

<p>Tap tap tapity tap.</p>

<p>&#8220;Hm. Wait a minute. That&#8217;s not the right file after all.&#8221;</p>

<p>&#8220;Cause it sure seems strange that we would have done that, and I can&#8217;t find it there. You sure it wasn&#8217;t an older version?&#8221;</p>

<p>&#8220;No, I don&#8217;t think so. I only pulled the code out of VCS the other day. I&#8217;m sure that&#8217;s what I was looking at. In fact, I wouldn&#8217;t have noticed it <em>except for the comment that explained what your code was doing</em> which shocked me into reading it more closely. It was so unconventional, so amazing, so inspiring! I&#8217;m sure I saw it in here!&#8221;</p>

<p><strong>Still looking</strong>.</p>

<p>It&#8217;s hard to credit someone for a good idea when you&#8217;re sure you got it from them but no one can find it anymore. And I&#8217;m an engineer. I know about writing things down. {sigh}</p>

<p>AfC</p>
]]></description>
      <author>andrew@operationaldynamics.com (Andrew Cowie)</author>
      <category>/andrew/software/free-java</category>
      <pubDate>Tue, 29 May 2007 03:00:00 GMT</pubDate>
      <guid isPermaLink="false">still-looking</guid>
    </item>

    <item>
      <title>Taking Java out for a spin</title>
      <link>http://research.operationaldynamics.com/blogs/andrew/software/free-java/cacao-and-hotspot.html</link>
      <description><![CDATA[<p>Not four hours after Sun released Java under the GPL + Classpath Exception,
Edwin Steiner, one of the hackers on the <a href="http://www.cacaojvm.org">Cacao</a> Java VM, gave the HotSpot VM a
spin and <a href="http://c1.complang.tuwien.ac.at/pipermail/cacao/2006-November/000195.html">posted some analysis</a>.</p>

<p>He notes that he did hit one stumbling block:</p>

<blockquote>
  <p>&#8220;Building is very easy, but I found out that the disassembler does not
  seem to be supplied.&#8221;</p>
</blockquote>

<p>But check this out:</p>

<blockquote>
  <p>&#8220;So I quickly hacked in the cacao disassembler, and it
  works! :)&#8221;</p>
</blockquote>

<p>Awesome! And the cool part is, as <a href="http://www.advogato.org/person/mjw/">Mark Wielaard</a> observed,
since both are GPL, the disassembler hack is just fine to distribute.</p>

<p>Freedom to do your own thing. <strong>That</strong>, ladies and gentlemen, is the freedom in
Software Libre.</p>

<p>AfC</p>
]]></description>
      <author>andrew@operationaldynamics.com (Andrew Cowie)</author>
      <category>/andrew/software/free-java</category>
      <pubDate>Mon, 13 Nov 2006 22:05:00 GMT</pubDate>
      <guid isPermaLink="false">cacao-and-hotspot</guid>
    </item>

    <item>
      <title>Encumbrance of the class libraries?</title>
      <link>http://research.operationaldynamics.com/blogs/andrew/software/free-java/java-is-libre.html</link>
      <description><![CDATA[<p>Well it&#8217;s official. <a href="http://www.sun.com/software/opensource/java/">Sun is releasing Java under the GPL</a>
+ Exception, just like Classpath is licenced!</p>

<p>The initial release includes the HotSpot VM, their Java compiler, and a few
other tidbits.  And get this: even the image of Duke, the Java mascot, has been
released under an Open Source licence! These people really get it!</p>

<p>The reference implementation of the libraries aren&#8217;t out yet, though, so
naturally what everyone wants to know is what the encumbrance situation is with
the various classes in that library. Based on comments from various Sun people
in <code>#open-source-java</code> on OFTC (and they&#8217;ve promised a full list shortly), it
would seem the only major problems are in the areas of colour, font
rasterization and graphics rasterization.</p>

<p>These were characterized as fairly major issues; it was funny to see the
Classpath community respond with a unanimous &#8220;not for long they won&#8217;t be!&#8221;</p>

<p>Java Libre!</p>

<p>AfC</p>
]]></description>
      <author>andrew@operationaldynamics.com (Andrew Cowie)</author>
      <category>/andrew/software/free-java</category>
      <pubDate>Mon, 13 Nov 2006 21:31:00 GMT</pubDate>
      <guid isPermaLink="false">java-is-libre</guid>
    </item>

    <item>
      <title>Trial Balloons</title>
      <link>http://research.operationaldynamics.com/blogs/andrew/software/free-java/trial-balloons.html</link>
      <description><![CDATA[<p>Well it&#8217;s all over the net now. <a href="http://ddj.com/dept/java/193600404">Sun just might actually release Java
under the GPL</a>.</p>

<p>Before we get all excited, I would observe that this article, from <em>Doctor Dobb&#8217;s Journal</em>
(ordinarily quite a respected publication) cites &#8220;several industry sources&#8221;.
That&#8217;s not exactly a convincing reference. And even if it is hard news, my guess is that this
is just an official trial balloon to see what industry reaction will be. Fair enough.</p>

<p>Now that I&#8217;ve been sufficiently pessimistic, listen to this:</p>

<blockquote>
  <p>The company is very close to announcing that it will put the mobile
  (ME) and standard (SE) editions of the Java platform into the GNU
  General Public License (GPL), with the Java Enterprise Edition and
  GlassFish reference implementation to follow</p>
</blockquote>

<p>They then quote a developer as saying &#8220;I think Sun realizes that their other pseudo-open source efforts don&#8217;t work&#8221; &#8212; which is very true. Community reaction to CDDL has always been weak. It&#8217;s just too bloody complicated.</p>

<p>The article goes on to say:</p>

<blockquote>
  <p>Offering Java only under the GPL would have a cataclysmic effect on the software industry, forcing Java platform developers to freely release their contributions if they continue developing around the platform&#8217;s GPL code. &#8230; A more likely scenario is that Sun would offer dual licensing for Java</p>
  
  <p>According to a Sun executive &#8230; dual-licensing is the plan. Sun will have open-source and commercial licenses, differentiated by their IP indemnifications</p>
</blockquote>

<p>Awesome.</p>

<p>I noted in an article about <a href="http://www.operationaldynamics.com/reference/articles/BarbariansGate/">Open Source Java</a> a few months ago that Sun had indeed made it quite clear that this time they were listening and that they had made a real effort to get connected with the Free Java community. So if this is a trial balloon, then everyone who cares about software freedom needs to express their support and to continue encouraging Sun to choose this course. And if this is for real, then wow, and congratulations to Sun!</p>

<p>AfC</p>
]]></description>
      <author>andrew@operationaldynamics.com (Andrew Cowie)</author>
      <category>/andrew/software/free-java</category>
      <pubDate>Wed, 08 Nov 2006 12:11:00 GMT</pubDate>
      <guid isPermaLink="false">trial-balloons</guid>
    </item>

    <item>
      <title>Learning about Java bytecode</title>
      <link>http://research.operationaldynamics.com/blogs/andrew/software/free-java/about-bytecode-bcel.html</link>
      <description><![CDATA[<p>There is a project out there called the <a href="http://jakarta.apache.org/bcel/">Byte Code Engineering Library</a> (<code>BCEL</code>), these days under the Apache Jakarta umbrella. It has been around for quite a long while and is both widely used and well regarded. They have a <a href="http://jakarta.apache.org/bcel/manual.html">documentation page</a> which has some surprisingly informative background material which caught my eye.</p>

<p>Long as I&#8217;ve been working with Java, I&#8217;ve never bothered much learning about the internals of the language that Java Virtual Machines interpret or of how class files are laid out. The overview in the <code>BCEL</code> manual of the <code>.class</code> file format and how Java VMs work on bytecode is excellent &#8212; far more informative than the introductory material in the more usual official references. In particular, <a href="http://jakarta.apache.org/bcel/manual.html#2 Java Virtual Machine">section 2</a>, describing the general design of the Java Virtual Machine, including a section on the <a href="http://jakarta.apache.org/bcel/manual.html#2.1 Java class file format">Java class file format</a>, <a href="http://jakarta.apache.org/bcel/manual.html#2.2 Byte code instruction set">bytecode instruction set</a> will be a fascinating read for anyone interested in language design issues.</p>

<p><em>In case you&#8217;re wondering why this came up, I&#8217;ve been working on a design review for how we might go about re-engineering</em> <code>java-gnome</code><em>, and have been doing one last analysis of the more outlandish outlying possibilities (ie unlikely to be chosen, but still worth a bit more investigation). Quite a number of problems would go away if we could do runtime class generation. It might be possible through BCEL.</em></p>

<p><em>As it happens I am extremely reluctant to follow this path largely because it&#8217;s a hell of a lot easier to express one&#8217;s ideas in Java and let a compiler generate the bytecode than attempting to muck about with bytecode oneself. Nevertheless, it may offer a  possibility  in terms of things like GObject properties which are largely only available via introspection at run time.</em></p>

<p><em>Naahhhh.</em> <code>:)</code></p>

<p>AfC</p>
]]></description>
      <author>andrew@operationaldynamics.com (Andrew Cowie)</author>
      <category>/andrew/software/free-java</category>
      <pubDate>Fri, 20 Oct 2006 14:09:00 GMT</pubDate>
      <guid isPermaLink="false">about-bytecode-bcel</guid>
    </item>

    <item>
      <title>A little searching is good for the soul</title>
      <link>http://research.operationaldynamics.com/blogs/andrew/software/free-java/soul-searching.html</link>
      <description><![CDATA[<p>It&#8217;s been an interesting week in Free Java land. The buzz, of course, is about that fact that Sun may finally open source Java after all. All still rumour and speculation (you can easily find comments ranging from &#8220;<em>why it will never happen</em>&#8221; to &#8220;<em>It&#8217;s already open source, didn&#8217;t you know?</em>&#8221; [and no, while Sun finally relenting and allowing the community distros to actually redistribute their JDK binaries is a nice step in the right direction, it&#8217;s still non-free, and that&#8217;s that]. Still and all, the man has said that Java will be free. It might take them a while, but there&#8217;s really no reason to doubt that it will happen.</p>

<p>Which leads people in the Free Java communities to suddenly ponder their own <em>raison d&#8217;&eacute;tre</em>.</p>

<p>It takes a lot of guts to ask yourself uncomfortable questions. &#8220;Has what I&#8217;ve been working on for the last many years suddenly become irrelevant?&#8221; has gotta be pretty high up on the discomfort list. What takes real courage, however, is to pose such rhetorical questions in the open, in a public forum, exposed by the harsh glare of the internet to the scrutiny, criticism and scorn of the world.</p>

<p>Regarding the possible freedom of Sun&#8217;s proprietary Java VM and class libraries, <a href="http://homepages.peakpeak.com/~tromey/blog/2006/05/19/#happenings">Tom Tromey</a>, one of the hackers working on <code>gcj</code> and <code>Classpath</code> recently wrote:</p>

<blockquote>
  <p>&#8220;This makes me feel very weird. I assume for a moment that it is true and that it happens under acceptable conditions: it comes pretty soon, it is complete, it is under a non-crazy license. On the one hand, hallelujah! This is what we&#8217;ve wanted these 10 years.</p>
  
  <p>On the other hand&#8230; I wonder what I&#8217;ll do with myself. I suppose there are plenty of interesting things to work on. Even the Sun JDK I suppose. But the dislocation goes far beyond my future to-do list. What does this mean about all the work I&#8217;ve done? Is it a waste?</p>
  
  <p>I do have my own answers for those questions. Everything is born, lives for a while, and dies; our programs are no different. That they die early or late doesn&#8217;t render them meaningless &#8212; only dead. And meaning itself is something we bring, in interpretation; it isn&#8217;t an intrinsic quality. Of course it is one thing to think that and another to know.&#8221;</p>
</blockquote>

<p>The commentary around Java of late is, in the main, entirely predictable. Some ask if Java is at some perilous crossroads. Others cry out that somehow Java will become irrelevant if it becomes free software. I suspect, however that most prognosticators who write for a living have missed a bet.</p>

<p>More than anything, the one thing that has kept Free and Open Source Software thriving as a phenomenon are its ability to embrace competing views. Not always <em>well</em>, not always <em>politely</em>, but taking in the phenomenon as a whole, competition is at its heart. Sometimes one approach wins out over the others to such a significant degree that the competitors fade away. Sometimes new developments occur in fields long thought static which suddenly shake the industry to its foundations and start entirely new fields off at a run. But quite often, several projects poodle along in the same space quite happily. The constant lament from you read in the trade press is &#8220;there&#8217;s too much choice&#8221; which really makes me laugh. In all the business textbooks on my wall, I can&#8217;t find one reference to a company that was dismayed that amongst its suppliers there was competition.</p>

<p>That means that existence of Free Java will continue to have great merit. The <a href="http://developer.classpath.org/"><code>Classpath</code></a> project, along with <a href="http://www.kaffe.org/">the</a> <a href="http://gcc.gnu.org/java/">libr&eacute;</a> <a href="http://www.cacaojvm.org/">VMs</a> <a href="http://jamvm.sourceforge.net/">that</a> <a href="http://sablevm.org/">use</a> <a href="http://jikesrvm.sourceforge.net/">it</a> provide an active and viable alternative to [at the moment] proprietary Java. One factor is the sheer number of platforms that these VMs run on, many which would never have been supported by the dominant player in the industry. Free Java has likewise been the catalyst for radical innovations (witness the marvel that is <a href="http://gcc.gnu.org/java/"><code>gcj</code></a>). But most of all, because it&#8217;s competition for the incumbent, people on all sides keep their creative juices flowing.</p>

<p><a href="http://gcc.gnu.org/ml/java/2006-05/msg00120.html">Per Bothner</a> raised this very constructively in a recent post to the <code>gcj</code> mailing list:</p>

<blockquote>
  <p>What with the Harmony project, and possible sometime-in-the-future
  open-sourcing of JDK, we need to think about how can gcj &#8220;compete&#8221;.
  I think we need to start focusing more on performance (both speed
  and footprint), and otherwise &#8220;leverage&#8221; of the advantages of
  ahead-of-time-compiling.</p>
</blockquote>

<p>which is indeed an astute conversation for them to have &#8212; and this from a project that <em>already</em> has a strongly performing platform.</p>

<p>The one thing Sun has done really good job of (at least from the corporate perspective that I certainly have) is preserving the Java specification. As we go forward into somewhat uncertain waters, the one thing above all that will remain critical is the ability of someone to tell whether a given implementation is compatible &#8212; and that&#8217;s why it&#8217;s so important that the compatibility, compliance and testing kits be made libr&eacute; available. With that in hand, then the fragmentation of the Java platform that the pundits are proclaiming won&#8217;t ever be a problem.</p>

<p>Even without it, people have done a pretty good job. The <a href="http://www.kaffe.org/~stuart/japi/htmlout/h-jdk14-classpath">99.06%</a> API coverage that <code>Classpath</code> has reached is pretty damn good.</p>

<p>AfC</p>
]]></description>
      <author>andrew@operationaldynamics.com (Andrew Cowie)</author>
      <category>/andrew/software/free-java</category>
      <pubDate>Thu, 25 May 2006 13:40:00 GMT</pubDate>
      <guid isPermaLink="false">soul-searching</guid>
    </item>


  </channel>
</rss>
