What are the complete specifications that must be documented in order to ensure the correct execution of a particular program written in Java? For instance, if one were archiving a program for long-term preservation, and no testing or porting would be done.I need to be able to compile and execute the Java program. Thus preserving the byte code or capturing the whole thing as a VMware image are excluded. The JVM could be saved as a VMware image though, and compiled libraries that are linked to the compiled code are OK, too. However, if there are dependencies on the OS, the architecture of the machine executing the JVM, the networking environment, external libraries, specification of the Java version used, etc. etc. these must all be listed. Some tech leaders in Dig Pres claim that any program written in Java will be executable forever. How to do it?
Requirements for emulation
operating systems;computer architecture;digital preservation
Hoeven et al. studied the problem of digital preservation through emulation:... Digital preservation does not end with the careful storage of digital objects. In orderto keep these objects accessible, a continuous effort towards the development ofstrategies for permanent access is required ....They ended up with a modular emulation model and the need of an Universal Virtual Machine (UVM):... The basis of the modular emulation model is founded on the Universal VirtualMachine (UVM). The UVM is a platform- and time-independent layer on top of theunderlying future host platform. As a result, programs that are developed for theUVM will continue to work even if the host platform changes. It not only consists of a general purpose processor and memory, but also offers additional functionality for input and output (I/O) communication with peripheral devices (like keyboard, storage, graphics,networking) between host and target platform. This will be provided by the interfacelayer... and started the Dioscuri project: a modular emulator for digital preservation. Not surprisingly, they chose Java to implement it: ... Java has been chosen as programming language. The main reason is its possibility to run Java code on a large variety of computer platforms using the Java Virtual Machine (JVM) without the need to recompile the source code. Recompilation is a risk factor since program code is adapted to a specific underlying computer platform. Although todays compilers are very advanced, it can still result in different functionality of the same emulator compiled for different platforms. By avoiding this step, the emulator will be more stable and portable. Using the JVM instead provides similar results to the use of a UVM as discussed above....The papers:Modular emulation as a long-term preservation strategy for digital objects (2005)Emulation for Digital Preservation in Practice: The Results (2007)EDIT: the last changelog  of the Dioscuri project is dated: 19-Jan-2011... so - perhaps - a new project/research should be started: How to preserve the digital preservation tools? :-D :-DEDIT 2: just my personal opinion: if the Java program does useful things, humanity will preserve it without the need of any efforts by its author :-)