This FAQ was started by Javier Fernández-Sanguino who on Feb 1st, 2000 was
(bold?) enough to send a message to the debian-java mailing list with the
subject "How about a Debian-Java-FAQ?". Of course, since "every
idea is a responsibility" he had to do this himself looking through the
three month-long archive of the newborn mailing list.
The purpose of this FAQ is to be a place to look for all kind of question a
developer or user might have regarding Java as far as Debian is concerned, it
includes license issues, development packages available, and programs related
to building a Free Software Java environment.
Thanks go to all the (many) contributors from the debian-java mailing list, who
have made this document possible. Without their knowledge this FAQ would not
be at all possible since I only have a vague knowledge of what they're talking
about when I browse the list.
Special thanks go to Paul Reavis, which I found had written a Debian-JDK
informational page previously, which I used to add more information, and made
useful suggestions to this document. Also to Peter Moulder who revised
thoroughly the FAQ and provided many suggestions, and to Juergen Kreileder,
maintainer of Blackdown's debian packages who pointed out some mistakes.
This document does not address issues with other Linux distributions, or with
non-Debian-specific problems. See the Blackdown pages for information on
these. More specifically you might want to check out the
Java Linux FAQ.
1.2 What is java?
Java is a strongly-typed platform-independant object-oriented programming
language often associated with the World Wide Web. Java was developed by Sun
Microsystems for embedded applications, but has since grown to become a
general-purpose programming language. Java source code can either be compiled
to a machine-independant byte-code that can be run by Java virtual machines, or
it can be compiled directly to executable code for any number of platforms,
including Linux, Win32, and others. A common API, shipped with all Java
development environments, provides socket support, a graphical user interface
widget set, graphical drawing tools, standard IO, events, math, database
interfaces, and multithreading, to name a few. The multithreading support can
happen either in kernel threads or userland threads, depending on the
implementation of the Java virtual machine used.
1.3 Why would I be interested in Java?
TODO
1.4 What is a JIT?
Acronym for Just In Time, A VM plugin to speed up VM execution by compiling
bytecode to native machine code.
1.5 Where can I read more about Java?
Of course, http://java.sun.com
would be the first place to read information on Java, right from the company
who started it. However good places for Java and Linux could be:
The first thing you should understand about the design strategy of Debian is
that our goal is to produce a 100% Free software platform. In that sense, some
of these tools are not available in the standard Debian distribution for
licensing reasons as opposed to some technical motivation.
That said, basically all of the technologies you might ask about can be or are
available for Debian immediately. In order to usefully answer your questions,
however, here you have a status from an Open Source availability perspective.
There is the Kopi Java Compiler written in Java. And the super fast Jikes
written in C++.
Gcj can also compile .java to .class. CVS version currently does handle inner
classes, as well as any other jdk 1.1 constructs, but might not be able to
compile a complicated program like the XSL processor xt. It is written in C,
so is reasonably fast. It generates reasonably good bytecode. And of course
being able to use the same compiler for .java to .class and .java to native has
its advantages.
1.6.2 Java1 JVM/JIT
Kaffe 1.0.5 is largely feature complete and now includes support for RMI. It
is not clear as to whether Kaffe's serialization is "binary
compatible" with Sun's implementation in all cases so there may be
interoperation issues in some casses. Kaffe comes with a big class library.
Japhar is also available.
libgcj (the run-time library for gcj) now includes an interpreter and
ClassLoader.
tya, a JIT compiler, is also available.
1.6.3 Java1 native compiler
GCC, the Gnu Compiler Collection comes with GCJ, the Gnu Compiler for Java
1.6.4 Java2 native compiler
It is unclear whether native compiler refers to the adaptive JIT capabilities
in Java2 or to a compiler that understands Java2 semantics. In either case,
Kaffe's JIT strategy is not adaptive but performs correctly, and improving, it
is believed IBM's Jikes compiler understands Java2 concepts such as weak
references.
1.6.5 Java2 foundation libraries
Many of these components have been cloned under a Free Software license. Kaffe
provides many of these routines, including an up-to-date RMI implementation.
There are, however, definitely shortcomings. Swing, as far as we know, has not
been cloned.
1.6.6 Debugger (jdb equivalent)
Debian has no debugger currently.
Gdb can debug native code produced by Gcj. Stuart Grossman (Cygnus) also wrote
support for Gdb to debug other VMs using JVMDI. This has not been released,
because the Gdb internals were changed at the same time, and no-one has had
time to re-integrate the changes. We can probably get Cygnus to release the
old code, if someone wants to look into getting this stuff working with the
current Gdb internals. (A non-trivial job.)
1.6.6.1 What free edit-interactive/graphical debugging tools are available on Debian?
jde, ddd, more?
One of the some nice features of jde are autoindention and syntax highlighting,
but it also supports debugging and compilation.
1.6.6.2 Known problems
My version of jdb (jdb version 98/01/06) terminates after a
program finishes execution, and I have to reset every breakpoint if I want to
run through the program again. This makes using jdb extremely frustrating.
Jdb also can't (easily) print the values in an array which is more than three
elements long. Ddd lets me work around both of these annoyances.
ddd 3.1 and earlier would "hang" when receiving certain
prompts with wierd thread names from jdb. This made it very hard to use ddd
with jdb. This has been fixed in ddd 3.2. It doesn't look like ddd 3.2 has
been packaged yet. I suspect the current packaged version of ddd won't work
well with jdb.
1.6.7 Appletviewer tool
There are some alternatives for an appletviewer tool:
Blackdown's appletviewer (in jdk1.1).
Kaffe's appletviewer.
Ibm's appletviewer (in ibm-jdk).
1.6.8 Jar tool
FastJar which is indeed very fast.
1.6.9 Javadoc tool
doc++ can work with C++ and Java.
1.6.10 Enterprise Java Beans (EJB)
There is activity in this area, the most noteworthy being the Open Source EJB
implementation from Bull in France called Jonas. I have done some work with
this system and it provides a good start towards a full EJB feature set. In
particular, it provides a transaction monitor and a container based persistance
implementation. I have used this system on Linux with free databases such as
Postgresql. I have not been able to get the system fully operational on Kaffe.
Additionally, the system depends on many Sun APIs which have not been cloned
(JTA, JNDI, and EJB itself).
1.6.11 JAIN
It seems to be a system for controlling large scale, integrated communications
infrastructures and modeling events with such networks via the JavaBeans API.
The scale of this effort seems very large and encompasses the work of many
organizations. The work is very new and seems to tie into Sun's SCSL strategy,
which leads us me to believe that there is not much in the way of Open Source
options in this area. However, some protocols such as H.323 are genuinely open
and are even cloned so it is possible that chunks of the JAIN system may exist
in a scattered manner. We have no knowledge of a serious Free Software
implementation of RTP or the H.323 infrastructures in Java.
1.6.12 Jini
Jini presents an especially pronounced Free Software problem. Jini is only
available as source from Sun and that source is only available under the SCSL.
The SCSL is not compatible in any sense with either the legal mechanics or the
political spirit of Free Software. The SCSL also makes cloning the API of an
SCSL implementation illegal which precludes even a clean room replication of
Jini. If you are interested in tuple space type implementations there are Open
Source options.