OpenJDK port: final report

Blog post by hamish on Sun, 2012-08-26 23:43

Since my three-quarter term report I’ve been working on adding audio input support to the jsound port and fixing various bugs in the JDK. Since the AWT/Java2d and jsound ports are now completed, my goals for the summer have been accomplished! The OpenJDK port is now in a fairly usable state, and community members have been using it to run some large scale Swing apps such as NetBeans and ThinkFree office.

The next thing I would like to do is merge my work in to the Haiku port repository at the OpenJDK project. From there I’d like to look into the possibility of acquiring access to the Java TCK, which will allow for comprehensive testing of the port. This will no doubt uncover many bugs and keep me busy for a while. Here are some other possible areas of expansion for the future:

OpenJDK port: three quarter term report

Blog post by hamish on Sun, 2012-08-05 22:03

Since midterm I have been working on the jsound port, which provides audio, MIDI input/output and the ability to control mixer volume and other parameters.

After getting my head around some of the media kit concepts the implementation has gone smoothly. I implemented audio output support first, as I guessed this would be the most used component. It works well. Then I implemented MIDI input and output support. This is untested so far because I don’t have any MIDI hardware. In the end I will probably end up constructing some dummy MIDI endpoints in another app for rudimentary testing. Audio input support is awaiting the availability of the SoundConsumer class, which might be included as a private API in libmedia, as the file cannot be included in OpenJDK because of licensing restrictions. Once this is in place I’ll get working on the audio input support.

OpenJDK port: midterm report

Blog post by hamish on Sat, 2012-07-14 23:47

After my quarter term report I worked on various bugs in the AWT port reported by testers, such as keyboard input problems. I also began reading up on the media kit in preparation for the next part of my project: the jsound port. This will bring audio and MIDI functionality to the OpenJDK port. Over the last week I made a start on the implementation for PCM input/output.

OpenJDK port: quarter term report

Blog post by hamish on Fri, 2012-06-22 01:32

Since my last blog entry I have mostly completed the implementation of the AWT/Java2D port. It is still in need of a lot of testing, but it is stable enough to run a lot of Swing apps out of the box. For example, here’s jEdit and SwingSet:

OpenJDK port: community bonding report

Blog post by hamish on Thu, 2012-05-24 20:09

Over the community bonding period I’ve been researching the best approach to take for the AWT port, and over the past week or two I’ve been implementing a prototype.

AWT demands the implementation of a number of ‘peers’ for buttons, text boxes, etc. which have historically been implemented using the native widgets of the underlying platform. The time taken to implement and maintain these peers is quite large, especially considering that these AWT widgets have been superseded by Swing and are rarely used anymore.

An alternative implementation approach used by the Caciocavallo project involves providing native heavyweights for the windows and views and then calling on Swing to provide drawing and event handling for the various widgets. This eases the porting of AWT and reduces the amount of platform-specific code to maintain. This approach is also taken by the recent port of OpenJDK to Mac OS X.

Over the past week or two I’ve written a prototype implementation using the Caciocavallo Swing AWT peers. It’s very incomplete thus far, but I’ve got drawing working pretty reliably, as well as some event handling including mouse input. Screenshot below the fold.

GSoC Introduction: OpenJDK port

Blog post by hamish on Fri, 2012-04-27 16:38

My Google Summer of Code project for this year is to provide a complete port of OpenJDK 7 to Haiku. Over the past few months I've been working on putting together a bootstrapping environment for building OpenJDK on Haiku, and porting the virtual machine and core libraries. Over the summer I hope to bring the port to a mostly-complete state by adding support for AWT, Java2d and jsound. This will allow Swing and AWT-based applications to run on Haiku. Here is an outline of my plans:

Community bonding period

  • Continue to work on getting the virtual machine and core libraries self-hosting.
  • Eradicate as many bugs as possible from the virtual machine and core libraries to give me a stable base to work from.
  • Familiarise myself with Bryan Varner and Andrew Bachmann's AWT/Java2d code from their Java 1.4.2 port, and see what needs to be done to update it to the OpenJDK 7 codebase.

Summer

  • Update the existing AWT/J2d port to the OpenJDK 7 codebase and implement the missing functionality.
  • Write a jsound port using the Media and MIDI kits.

Future

  • Get my work uploaded to the Haiku port project at OpenJDK to make it more official.
  • Create a Haiku look & feel for Swing.
  • Merge in the updates from the jdk7u project.
You can find my work and a quick attempt at build instructions on Bitbucket: https://bitbucket.org/hamishm/haiku-jdk. The entire source is split across multiple repositories; check my Bitbucket profile for the rest. In the coming weeks I also hope to release some binaries so interested parties can more easily test it out.