[3][4] GCJ compiles Java source code to Java virtual machine (JVM) bytecode or to machine code for a number of CPU architectures.
It could also compile class files and whole JARs that contain bytecode into machine code.
[5][6] The GCJ runtime-libraries original source is from GNU Classpath project, but there is a code difference between the libgcj libraries.
[7] In 2007, a lot of work was done to implement support for Java's two graphical APIs in GNU Classpath: AWT and Swing.
The authors of CNI claim for various advantages over JNI:[14] We use CNI because we think it is a better solution, especially for a Java implementation that is based on the idea that Java is just another programming language that can be implemented using standard compilation techniques.