<!--
  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.
-->
<body>
Apache Derby is a pure Java, standards-based relational database engine.
Derby provides an easy to use data management solution for
software developers with zero administration for end users.
<p>
Derby runs on any Java SE 6 platform or higher with 4.0, 4.1, and 4.2.
For Java 8, Derby can also run on constrained devices
with a runtime as specified by OpenJDK JEP 161, i.e. Compact Profile 2
or higher.
</p>
Derby's database format is platform independent allowing databases to be copied to
any machine type.
<P>
Apache Derby is a subproject of the Apache DB project, and is
licensed under the Apache License, Version 2.0 (the "License"); you may not use these files except in compliance with the License. You may obtain a copy of the License at:
<BR>
<a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>

<P>
You can find Derby on the web at:
<BR>
 <a href="http://db.apache.org/derby/">http://db.apache.org/derby/</a>

<P>
Apache Derby releases can be downloaded from the following page:
<BR>
<a href="http://db.apache.org/derby/derby_downloads.html">http://db.apache.org/derby/derby_downloads.html</a>
</body>
