A few days ago I 'finished' the proper rhug integration of Ant and the java bytecode compiler hidden within Eclipse. When built with gcj, I believe we end up with the absolute fastest java bytecode compiler in the world (yes, faster than jikes).
gary was speechless.

I finally set up a wireless network at home. I was mainly interested in not having to run a long cable to the hacked TiVo anymore. But when I realized that my stereo system would have a wireless ethernet bridge behind it, I caved and picked up an AudioTron
on the way home today. A friend of mine recommended the squeezebox, but I like the internet radio feature of the AudioTron. Both work with Linux servers. The squeezebox uses a server app written in Perl and the AudioTron just scans Windows shares (provided by Samba in my case). Highly recommended!

sbb

Strangers are asking me for updates on this, so.. here goes. I got a little distracted this past week with travelling (Chicago & Dallas), FC2 upgrades, and rhug hacking to do much. fitzsim pointed me at sqlite, which I'm now linking to my hacked distcc server in order to map file open requests to local filenames. Seems OK so far. Still lots to do.

random compiler thought

It seems that it should be possible to write a __builtin_memoize() function for GCC. It would take function pointer and return one that would act as a memoizing version of that function. Kind of cool, but useful? Dunno.

Lots of neat things are happening here. I'm running the mozilla
rhino JavaScript implementation, which supports LiveConnect for easy access to the gcj runtime. When my program refers to java-gnome classes, the system class loader knows to dynamically load java-gnome code in shared libraries with magic names (lib-org-gnu-gnome.so, etc).

This brings me to my first of several annoyances with java-gnome. They currently use .so names like libgnomejar2.7.so. This works fine if you're building executables and don't mind linking directly to those libraries. However, if you want to support dynamic discovery and loading of these classes you'll want to use the special naming conventions described in the gcj manual. I worked around this problem with a few symlinks.

There were a few more annoyances with java-gnome, but they are all minor and easily fixable. I'll follow up with those guys soon.

All this software was built with my tweaked jhbuild. I sent my changes to fitzsim, who is also trying to push his changes upstream.

Today is the day that Diego is merging the tree-ssa branch of GCC into mainline.

Here's a brief description of Static Single Assignment. My introduction to SSA form came in the early '90s when I developed a programming environment for a 3D information animation system using SSA based optimizations. The decision to use SSA form was a no-brainer since virtually all optimization algorithms being published back then (and since) assumed you were starting from SSA form. So why wasn't GCC using it?

GCC had grown up using its own low-level internal representation called RTL. And while SSA form saw a sudden explosion in popularity, migrating GCC over to use SSA was going to be a massive effort - more than anyone was willing to invest in themselves. Eventually Red Hat found themselves in a position to put the requisite resources to bear and, once the ball was rolling, support from the rest of the GCC community grew strong.

So this has really been a long time coming for GCC.
Just getting this far has taken several man years of effort, and there's still a lot of work to do. Now that GCC has the basic SSA infrastructure in place, the focus will be on replacing (or supplementing) the old, low level RTL based optimizations with SSA versions.

robilad's recent entry points to an old article by Marc Fleury that includes the following:

"Several people have suggested that JBoss is infringing Sun's copyrights by incorporating some of Sun's code into JBoss. We have carefully reviewed the JBoss code base and are confident that, with the exception of seven jars, all code distributed with JBoss was independently written by JBoss project contributors. As for those seven jars, that code was licensed from Sun under Sun's Binary Code License Agreement, which provides that JBoss can distribute that software in binary code format only. JBoss is fully complying with the terms of that license. "

JBoss version 3.0.4 (released much later than that article) included three source files in jboss-3.0.4-src/security/src/main/javax/security/auth containing Sun copyright notices. The build instructions read:

| Unjar the jaas.jar into the build.classes dir so that we can replace
| the javax.security.auth.login.LoginConfig class with one that uses
| the thread context classloader for LoginModules -->

It looks like they were patching Sun source code for whatever reason. IANAL, but my reading of the JAAS binary code license tells me that they shouldn't be doing this.

Well, this is what my notes tell me at least. Verifying this might be difficult, since the sources for the 3.0.4 release appear to be absent from the download page. I suppose I could be wrong.

During a recent visit to my parents, I upgraded their win95 box to use Mozilla Thunderbird and Firefox by default. This is a real milestone for me since it's the first time I've felt comfortable promoting free software solutions to this particular pair of senior citizens. Real problems are being solved: Thunderbird's spam filtering handles the unbelievable quantities of spam they receive, and Firefox can render modern web sites that the win95 compatible IE can't. Upgrading to XP wasn't even an option, since it won't install on their IBM Aptiva. Hurray for Free Software!

java benchmarks

I really need to update my java benchmarks page now that GCC 3.4 and mono beta 1 are available. Today I found a benchmark that tests thread creation/destruction and I/O that runs almost 4 times faster with gij than IBM's JVM. Definitely one for my fair and balanced benchmark list...

I saw Tim O'Reilly speak the other day. He pointed out some features of amazon.com that I never really took notice of before. And without further ado, I present Music to hack GCJ to.

Last week I started hacking distcc into my remote compilation monster. Rather than try to create clean patches, I'm just hacking like a madman. The build server now requests files from the client during the build process, as in my previous experiment. Still plenty to do, but it's looking neat.

Yesterday Frank Eigler flew me from Raleigh to Toronto in his twin engine plane, a Piper Aztec. It was my first trip in a small plane, and wow - what an experience. This is what you see out the window. A little in-flight incident gave Frank an opportunity to show off what a cool cat he can be under pressure. Three cheers for twin engine planes and quick thinking!

Earlier in the day I attended a face-to-face meeting of Red Hat gcj users and hackers (including tromey, aph, bryce, gbenson, fitzsim and more), so it was a real banner day.

Here's a screenshot of a functional prototype of a distributed compilation tool that supports gcj. The server is running in the bottom window. The client in the top window establishes a connection to the server, and shuttles over files from the local filesystem on demand (driven by the LD_PRELOAD hack). The newly released OpenTNL project made this possible.

Red Hat is having another world-wide company meeting in Raleigh, NC starting this weekend. Among other things, this means that all the Red Hat gcj hackers/users will get to meet face-to-face for the first time in a while. I'm looking forward to seeing everyone.

BuildBorg

This is the nickname for my LiveCD experiment. Everything is working well enough now that it's basically useful as a distcc server. Just pop it in a cdrom and it goes. Now I've been thinking of how to support remote native compilation of java code with gcj. The distcc approach doesn't work because it depends on sending preprocessed source with no external dependencies to the build machine. This won't work with gcj, so my current thinking is to just hook into the build machine's C library by LD_PRELOADing a library like this in order to generate queries back to the user's machine for other sources (jar, class, etc). Will this work?

I like this approach, even for C/C++, since it may enable speculative compilation on the build machines during idle times (different debug or optimization levels).