First tarball in the java-gnome 4.0 series released!

After 9 months of design, engineering, and mad coding, I am pleased at long last to make the first public release of the new java-gnome bindings.

We are now at the state where we have not just a theory but a working architecture that has been validated through interaction online and at conferences with the community around the world. My firm, Operational Dynamics, has sponsored the work to this point, and we are now seeking revenue to carry out the engineering necessary to take the bindings from a prototype with coverage of 0.1% to the level where it will be a fully usable binding. If you think your firm would be interested in engaging us to this end, or to ensure a piece of GNOME that you need is present, then please contact Andrew Cowie, andrew@operationaldynamics.com.

If it isn’t obvious, there’s still quite a bit of fluidity, and so I recommend to our downstream that it’s not quite yet time to package up java-gnome 4.0 for your distro. I’ll be in touch with the individual package maintainers in the coming months. Likewise for developers, yes, it’s exciting, but no, it’s not really ready for writing full apps with (though one guy did write something to show the cricket scores!). So while it is not really prime time (indeed, me even blogging about it smacks a bit of preemption), the open source vibe has ever been to release early and often so that others can participate. If you want to have a voice in the shape of the Java bindings for GTK and GNOME, you’re welcome to get involved.

The rest of this blog post is the release note from the NEWS file which you can read online or in the sources, of course!


java-gnome 4.0.1 (05 Jan 2007)

It’s not really a prototype anymore! the design works, and so the code that is here is forming the foundation of the new Java bindings for GTK and GNOME.

While there are some significant pieces of engineering that are yet to be done, and of course a universe of coverage yet to write, we’re pleased to mark the milestone of the prototype having proved itself to be stable and the strong foundation that we need. In this release:

Project documentation

Import project documentation, initially consisting of the re-engineering emails written by Andrew Cowie to the java-gnome-hackers mailing list, and expanded to include top level README and HACKING files, and a style guide for contributors to follow. All documentation [re]formatted in Markdown syntax so as to be renderable to web pages. See doc/design/ and doc/style/.

Project website

Create an entirely new website for http://java-gnome.sourceforge.net/, introducing sections “About“, “Documentation“, “Download” and “Interact” to discuss the the project as a whole, to be a home for the documentation, to provide instructions on how to get java-gnome, and information about the mailing lists and IRC channel, respectively. Also include a page thanking the previous generations of maintainers for their hard work and noting that the 2.x bindings have been unmaintained for some time now and are formally deprecated.

The website is no longer a wiki but is entirely within the source code of java-gnome itself. See the web/public/ directory; improvements welcome.

Major engineering

Quite significantly, the infrastructure to get a Proxy or Constant instance for any arbitrary C side pointer or enum is complete, involving significant work to the Plumbing classes, along with the corresponding C side code, especially in GValue.c

This was a necessary building block in order to complete the generalized getProperty() mechanism that, while hidden from public view, is nevertheless a major aspect of the GObject tool chest and is usable by bindings hackers when necessary. The generalized instance mechanism was the last major engineering hurdle that needed to be achieved in order to prove the new bindings design.

New coverage

Label, Fixed, Box, VBox, HBox and corresponding [working] mockup translation and native code.

Compliments to Srichand Pendyala from Bangalore, India for being the first external hacker to have a patch accepted to mainline! He contributed methods to Label and initiated the implementation of the Fixed class. In so doing, he also helped work the bugs out of the bzr bundle submission process. Awesome.

Build improvements

java-gnome now builds on Ubuntu and OpenSolaris in addition to its home turf of Gentoo. Thanks to John Rice of Sun Microsystems who provided the guidance allowing us to port Equivalence to Solaris some months ago, and Laszlo Peter, also of Sun Ireland, for several fixes to allow configure to recognize a wider range of Solaris environments.

The tiny example program that we have been using to validate the code, Experiment is now compiled by the build system if you so request. Try make demo.

API documentation

Extensive attention has been paid to the JavaDoc for the few methods that are presented so as to clearly set the standard required. The canonical JavaDoc for the project is available at the website with a stable URL and can be linked to.

All source code [comments, ie JavaDoc] have been spell checked! Initial top level overview.html and package.html files have also been written to help round out the JavaDoc.

java-gnome 4.0.0 (26 Nov 2006)

Initial release of the java-gnome 4.0 prototype, corresponding to the first public demonstration of the new bindings done at foss.in/2006 at Bangalore, India.

The prototype is fully functional and is intended to prove the design and architecture we have arrived at as a result of the re-engineering process. It includes both real wrapper layer classes that are the seed from which our public API will grow, along with the infrastructure that the wrapper layer depends on.

Initial coverage

Wrapper layer presenting the public API to developers: Widget, Container, Bin, Button, Window, along with complete translation layer implementations.

At present the bindings mock up the code that will be generated with temporarily hand written substitutes (ie, those in italics above) for both translation (Java) and native (C) layers. These will do until we receive the funding to make the code generator a reality; we certainly don’t want to be writing much more translation layer Java and C code by hand. Yuk.

Signal API

The defining aspect of GUI programming is, of course, that it is event driven. In addition to the “forward” direction of making calls to the native library and having return values bubble back up, there is the “reverse” direction of connecting callback handlers to the various signals that different Widgets offer, and having those signal events result in those handlers being invoked.

java-gnome 4.0 has an entirely new and redesigned signal connection and callback API. This functionality was demonstrated, and coverage of Button.CLICKED and Window.DELETE is now present and functional! The APIs used by GNOME language bindings to achieve this are some of the most voodoo I have ever seen. But it’s hooked up, and it works. It’s like black magic :)

Build

java-gnome is configured and built using Andrew Cowie’s Equivalence build scripts. It builds on Gentoo and should build on a Debian or Fedora derived system as well. See README for further details.

At the moment, java-gnome is a single source package. That may or may not change.

The source code is available via bzr. Again, see README.


You can download java-gnome from ftp.gnome.org but at this stage you’re just as well off to get the code from mainline in our DVCS. I’m pleased to say it’s moving quickly. :)

AfC