The Deletion of gcj

I originally posted this on G+ but I thought maybe I should expand it a little and archive it here.

The patch to delete gcj went in recently.

When I was put on the gcj project at Cygnus, I remember thinking that Java was just a fad and that this was just a temporary thing for me. I wasn’t that interested in it. Then I ended up working on it for 10 years.

In some ways it was the high point of my career.

Socially it was fantastic, especially once we merged with the Classpath community — I’ve always considered Mark Wielaard’s leadership in that community as the thing that made it so great.  I worked with and met many great people while working on gcj and Classpath, but I especially wanted to mention Andrew Haley, who is the single best debugger I’ve ever met, and who stayed in the Java world, now working on OpenJDK.

We also did some cool technical things in gcj. The binary compatibility ABI was great, and the split verifier was very fun to come up with.  Per Bothner’s early vision for gcj drove us for quite a while, long after he left Cygnus and stopped working on it.

On the downside, gcj was never quite up to spec with Java. I’ve met Java developers even as recently as last year who harbor a grudge against gcj.

I don’t apologize for that, though. We were trying something difficult: to make a free Java with a relatively small team.

When OpenJDK came out, the Sun folks at FOSDEM were very nice to say that gcj had influenced the opening of the JDK. Now, I never truly believed this — I’m doubtful that Sun ever felt any heat from our ragtag operation — but it was very gracious of them to say so.

Since the gcj days I’ve been searching for basically the same combination that kept me hacking on gcj all those years: cool technology, great social environment, and a worthwhile mission.

This turned out to be harder than I expected. I’m still searching. I never thought it was possible to go back, though, and with this deletion, this is clearer than ever.

There’s a joy in deleting code (though in this case I didn’t get to do the deletion… grrr); but mainly this weekend I’m feeling sad about the final close of this chapter of my life.


  • You have been my inspiration for joining the Free Software movement. You introduced me to challenging, but friendly, open collaboration all those years back. Contributing those first small patches to gcj was so scary. I remember sending out patches for gcj and being so nervous about what people would say that I could hardly sleep. But then the next morning when I woke up there would be a review by you. Always encouraging, always technically fair. It changed my life.

    Any community that you participate in will be technically interesting, have a great social environment and a worthwhile mission. Just because it includes you. Thanks.

  • Same here… Back when a different me started working on GNU lightning, you wrote to me mentioning how working on free software was the only kind of software engineering work that made sense to you, or something like that (that email is long lost, unfortunately). And when I started looking for a job at Red Hat a few years later I remembered that email, and you ended up on a short list of the three people that helped me getting that job. We never met in person, but I would really like to. 🙂 Thanks!

  • I had the most fun by closing all of those bugs. I waited almost 24 hours to see if anyone else would but they did not so I went crazy. Closing over 200 bugs is fun.

  • So many memories from the time GCJ first appeared. I never touched it for maybe 10 years but I learned much by then.

    Bye Gcj!

  • Wait, you’re removing gcj entirely?

    That’s a bit much. There’s a bunch of code that wasn’t so useful just a few years ago that’s suddenly quite powerful. Look at machine learning, which picked up the old neural network algorithms that couldn’t scale pre-GPU.

    Fully static compliation of Java has its uses, if not today, then maybe in five years. Never burn the old books.

  • Dan – yeah, it’s gone now.

    The main issue is that nobody was developing it. Pretty much the only changes it got were global changes across gcc. It wasn’t keeping up with changes in Java; for example, no changes since about the 1.6 timeframe were incorporated. At the same time, building it was quite expensive.

    Also, there weren’t any users of note. Everybody moved on to OpenJDK.

    Maybe it could have been salvaged if someone had had the idea that the Mono folks had, and moved strongly into mobile. But nobody did, and Android picked some other AOT technology instead.

    It could be resurrected if there’s ever sufficient reason. The code will live on forever in version control history, and the mailinst list archives will presumably continue to exist. But I doubt any resurrection will occur.

  • Years ago (2007-2008 I think), I played with GCJ (both on Windows & Linux). It was nice to have a free Java compiler which is able to produce native executables ala GCC.

    Too bad the development is not on par with Sun/Oracle. Of course, cannnot blame the small GCJ developer team. And Apache Harmony is already retired.

    Guess we don’t have many free Java implementations 😐

    Thanks for the memory, though 🙂

  • Time to hit the beach, get laid more times than you can keep count, and live life till your breath your last breath dude. As you said, it’s a close to a chapter. Time to start a new one.

  • Tom, if you can find the time, could you please write a detailed history of GCJ, for posterity?

    While a lot of it was developed out in the open, I am sure that there was nevertheless much discussion, development and decision that wasn’t made publicly, especially in the early days.

    I think that computing historians will look at GCJ much like they do Multics; its own success may have been limited in scope, yet the impact it had on the wider software development community was intense.

    – Simon

  • Well – working on Java can lead to such a depression. 🙂

  • Thanks for the very kind words.

    It was, in a weird way, a great honour to be the one to administer the coup de grace. Sure, it’s a very big chapter of my life gone, but we had a lot of fun and did something that turned out to be important. We’ve had to get used to the idea that a project can be superseded by something better, and in the end what matters is what’s best for free software, not what’s best for the developers.

    For the record, this wasn’t a decision taken without a lot of consideration. I’ve thought long and hard about some way to revive GCJ and turn it into a performant implementation, using the OpenJDK class libraries. But I just couldn’t figure out how to do it with a reasonable amount of effort.

    GCJ is dead. Long live OpenJDK! Long live Free Software!

  • Wow. I have to second Mark, it was a great pleasure to work with you in the GNU Classpath community.
    I can only hope that one day we’ll meet again.

  • A few random thoughts…

    As a mostly autodidact, working on gcj was one of the most rewarding learning experiences I have had.

    Working with you, aph, and others was always a positive experience. I think there is value in recognizing that the community around gcj was enjoyable to work in, and that the leadership had something to do with this.

    Code built with gcj and libgcj/Classpath actually shipped in commercial products (on the order of 10^6 HD television sets). I don’t think anybody got rich off of it, but it was not a purely academic exercise.

    Just because it has come to a close, does not have to diminish its importance. I prefer to think about the things I work on as works of art. If they were of high quality, we can draw meaning from that that can never be taken away.

  • 🙁

  • I recall doing work on gcj to improve its use on FreeBSD and allow it to build in the default bootstrap thereupon. RIP, gcj. -Loren

  • I think, there is still space, for an OpenSource Java Native Compiler like gcj or Excelsior JET.
    But currently we have additional to the GNU Compiler Collection (GCC) the LLVM.
    So, would it be better to have a Native Java-Compiler based on GCC (like gcj), based on LLVM or having a completly independent project (like the closedsource Excelsior JET) ?

    Also it would be easier, to don’t write something like the sourcecode to nativecode-binary part, as GCJ additional supports. It is easier to do it like Excelsior: Only compiling Java-binaries to native-binaries.

  • Why did they get rid of gcj?
    Natively compiled Java runs a *lot* faster, and has no dependencies on the JRE so it’s easier to install applications and they’ll use fewer resources.

    Did the whole software industry just decide that efficiency doesn’t matter anymore?

  • […] Java avec gcj (qui est mort); […]

Join the Discussion

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>