# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
# 
#     http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

/**
\mainpage
<p>
To port the class libraries to a new VM, the VM writer must implement certain
<a href="#KernelJavaClasses">Kernel Java classes</a> to the full Java 1.4.2
API specification. (The VM writer must also implement the documented C
<a href="../../vm_doc/html/index.html">VM Interface</a> which contains the VM entry
points required by other class library natives.)

 <a name = "KernelJavaClasses"><h2>Kernel Java Classes</h2></a>

<p>
The Kernel Java classes are those classes which are tied to the structure of
the VM, or whose structure is known by the VM.
Most of these classes are defined by the Java 1.4.2 API specification. The IBM
VM implementations of these classes are provided in open source. The IBM
implementations rely on the presence of (typically) VM specific natives
to implement the required Java APIs. Other VM writers can choose to use
these implementations, but this forces the writer to use the reference design and
the writer must then implement the natives, for which minimal documentation
is provided.</p>

All but one of the kernel classes are defined by the public Java 1.4.2 API.
These classes, described further in the
doxygen <a href="annotated.html">class list</a>, belong to the
following packages:<br>

<ul>
  <li><span style="font-family: monospace;">java.lang</span></li>
  <li><span style="font-family: monospace;">java.lang.reflect</span></li>
  <li><span style="font-family: monospace;">java.lang.ref</span></li>
  <li><span style="font-family: monospace;">java.security</span></li>
</ul>

The other class is in the <span style="font-family: monospace;">org.apache.harmony.kernel.vm</span>
package.

Some of the documented classes must be entirely implemented by the VM writer.
For other classes the implementation is mostly provided. Some classes are documented
so the implementation details can be used by the VM writer. Below is a summary of
all the Kernel classes.

 <a name = "KernelClassDetails"><h3>Kernel Class Details</h3></a>
 
The VM writer is expected to entirely implement the classes below. A small number
of non-public methods must be implemented in these classes to support other
classes (such as <span style="font-family: monospace;">java.lang.SecurityManager</span>)
as documented in the method descriptions.

<ul>
  <li><span style="font-family: monospace;">java.lang.Object</span></li>
  <li><span style="font-family: monospace;">java.lang.Class</span></li>
  <li><span style="font-family: monospace;">java.lang.ClassLoader</span></li>
  <li><span style="font-family: monospace;">java.lang.Compiler</span></li>
  <li><span style="font-family: monospace;">java.lang.Package</span></li>
  <li><span style="font-family: monospace;">java.lang.Runtime</span></li>
  <li><span style="font-family: monospace;">java.lang.Thread</span></li>
  <li><span style="font-family: monospace;">java.lang.reflect.AccessibleObject</span>
  	<ul>
  		<li><span style="font-family: monospace;">java.lang.reflect.Constructor</span></li>
  		<li><span style="font-family: monospace;">java.lang.reflect.Field</span></li>
  		<li><span style="font-family: monospace;">java.lang.reflect.Method</span></li>
  	</ul></li>
  <li><span style="font-family: monospace;">java.lang.reflect.Array</span></li>
  <li><span style="font-family: monospace;">java.lang.ref.Reference</span> (PhantomReference, SoftReference, WeakReference)</li>
</ul>

The implementation of <span style="font-family: monospace;">org.apache.harmony.kernel.vm.VM</span> must
be provided by the VM writer. This class provides class loading and stack walking methods
that are not available in the public Java API such as a method which enables its caller to
obtain the caller's class loader. This class also provides an intern(String) method, which
the intern() method of the String implementation in Harmony will call.

The class <span style="font-family: monospace;">org.apache.harmony.luni.internal.process.SystemProcess</span> 
is implemented, but is documented so the VM writer can use this class to implement
<span style="font-family: monospace;">java.lang.Runtime.exec()</span>.

The class <span style="font-family: monospace;">java.lang.ref.ReferenceQueue</span> is
implemented, but is documented so the VM writer can use the non-public fields and methods
in the implementation of
<span style="font-family: monospace;">java.lang.ref.Reference</span> and its subclasses.

The following classes are implemented, but require a small number of methods to be
implemented by the VM writer to complete the implementation. Alternatively, the VM
writer can provide their own implementations of these classes.

<ul>
  <li><span style="font-family: monospace;">java.lang.Throwable</span></li>
  <li><span style="font-family: monospace;">java.security.AccessControlContext</span></li>
  <li><span style="font-family: monospace;">java.security.AccessController</span></li>
</ul>

The class <span style="font-family: monospace;">java.lang.StackTraceElement</span> is
implemented, but is documented so the VM writer can use the non-public fields and methods
in the implementation of <span style="font-family: monospace;">java.lang.Throwable</span>.

The implementation of <span style="font-family: monospace;">java.lang.ThreadGroup</span>
is provided. Certain non-public methods are documented as they are used by the VM when
booting the class libraries.

*/
