Description of JCNIX

JCNIX is the software equivalent of a headless chicken
running around aimlessly.

JCNIX is basically code that makes it possible to create graphical interfaces using GCJ on a platform supporting the X Window System. The JCNIX code base contains experimental and unstable code that has not yet been committed to the libgcj CVS.

It started out as some simple experimenting with the CNI interface of gcj and Xlib. After a while, development veered into reimplementing significant chunks of the Java 1.3 API.

This code is still in its infancy stage. With time, I'd like the code to evolve into something useful. I don't have any strong opinions concerning licensing, so I've just released it under LGPL. Licensing conditions for future releases is open to discussion. Basically, I want the code to be as useful for the general community as possible.

Concerning package names no.rwr... There does not exist a rwr.no domain. It is totally fictional. I didn't have any suitable package/domain name to place the files under, and I didn't want piggyback on someone else's package hierarchy without getting explicit permission to do so.

The classes within packages that are part of the Java class libraries (such as java.awt.*, etc.) are either meant as minimal stub classes to get things running, or classes that will evolve into full clean room implementations of the original Sun classes. It is not my intention to subvert any APIs within these packages. I may not like parts of the Sun APIs, but I want keep all the non-standard code outside of the standard packages.

The clean room implementation has been done while only referring to the HTML API documenation from the Sun website and various articles and tutorials found on the net concerning the APIs. The API documentation was often open to interpretation, and especially newer API such as Swing are extremely poorly documented. In such cases I've simply made guesses. Very little time has been spent verifying that my implementations act similarly to the Sun classes. Actually, very little time has been spent verifying that the implementations works reasonable at all. This will improve in the future.

The code is currently somewhat messy. Programming started with simple classes for common Xlib abstractions. After the time the code actually started showing windows, the coding has continued in all directions. First creating XImage objects, then renderers for converting 24 bit RGB images to any XImages with any True color packing. Image support has been hacked a bit. To speed up this conversion some native C++ code was created, including a nifty way of specifying arbitrary conversion functions using templates. These templates actually generates some decent code. (Those have later been replaced by the Hermes library.)

Then I realized that some of the rendering infrastructure had much in common with some of the Java 2D classes. So the development shifted to creating clean room implementations of the interesting Java 2D classes, while continuing the work on rendering, now based on the Java 2D classes.

Lately, the main focus has been on creating a clean room implementation of the JDK 1.3 JFC (AWT and Swing) APIs.