License Agreement


    This License Agreement is entered into as of the ___ day of
____________, ______ by ___________________________ ("Licensor"),
in favor of The Apache Software Foundation, a Delaware nonstock
membership corporation (the "Foundation").

    WHEREAS, Licensor owns or has sufficient rights to contribute the
software source code and other related intellectual property as
itemized on Exhibit A ("Software") under the terms of this agreement
to the Foundation for use within Foundation software development
projects ("Projects").

    NOW, THEREFORE, FOR GOOD AND VALUABLE CONSIDERATION, the receipt
and legal sufficiency of which are hereby acknowledged, the parties
hereto, intending to be legally bound, agree as follows:

1. Subject to the terms and conditions of this License, Licensor
hereby grants to the Foundation:

  a) a non-exclusive, worldwide, royalty-free, irrevocable
     copyright license to reproduce, prepare derivative works of,
     publicly display, publicly perform, distribute and sublicense,
     internally and externally, the Software and such derivative
     works, in source code and object code form; and,

  b) a non-exclusive, worldwide, royalty-free, irrevocable
     patent license under Licensed Patents to make, use, sell,
     offer to sell, import and otherwise transfer the Software
     in source code and object code form. "Licensed Patents" mean
     patent claims owned by Licensor which are necessarily
     infringed by the use or sale of the Software alone.

2. Licensor represents that, to Licensor's knowledge, Licensor is
legally entitled to grant the above license. Licensor agrees to notify
the Foundation of any facts or circumstances of which Licensor becomes
aware and which makes or would make Licensor's representations in this
License Agreement inaccurate in any respect.

3. This Software is provided AS-IS, WITHOUT WARRANTIES OR CONDITIONS
OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, WITHOUT LIMITATION,
ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
OR FITNESS FOR A PARTICULAR PURPOSE.  NEITHER THE LICENSOR NOR ITS
SUPPLIERS WILL BE LIABLE TO THE FOUNDATION OR ITS LICENSEES FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
THE USE OR DISTRIBUTION OF THE WORK OR THE EXERCISE OF ANY RIGHTS
GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

This License Agreement is the entire agreement of the parties
with respect to its subject matter, and may only be amended by a
writing signed by each party. This License Agreement may be
executed in one or more counterparts, each of which shall be
considered an original.

    IN WITNESS WHEREOF, Licensor has executed this License Agreement
as of the date first written above.


    LICENSOR:


    Signed By: _____________________________________

    Print Name: ____________________________________

    Title: _________________________________________

    Representing: __________________________________

    ________________________________________________

    Contact Name: __________________________________

    Contact Email: _________________________________

Exhibit A

List of software and other intellectual property covered by this agreement:


