   =====================================================================
   ==  DO NOT PANIC!  This is a draft for discussion purposes only.   ==
   ==  It has not yet been approved. It does not yet apply to any     ==
   ==  software distributed by the Apache Software Foundation.        ==
   ==                                                                 ==
   ==  This would be executed when an entity donates an existing      ==
   ==  source code base to the ASF.                                   ==
   ==================================+==================================


                      The Apache Software Foundation
                     Software Grant License Agreement
                      http://www.apache.org/licenses/


       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"), 1901 Munsey Drive,
   Forest Hill, MD 21050-2747, U.S.A.

       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 perpetual, non-exclusive, worldwide, fully paid-up, royalty
          free, irrevocable copyright license to reproduce, prepare
          derivative works of, publicly display, publicly perform,
          sublicense, and distribute the Software and such derivative
          works; and,

      (b) a perpetual, non-exclusive, worldwide, fully paid-up, royalty
          free, irrevocable (subject to the conditions in this section)
          patent license to make, have made, use, offer to sell, sell,
          import, and otherwise transfer the Software and derivative
          works thereof, where such license applies only to those patent
          claims licensable by Licensor that are necessarily infringed
          by the Software alone.

      Licensor's patent grant above shall terminate with respect to any
      party that institutes patent litigation against the Licensor
      (including a cross-claim or counterclaim in a lawsuit) alleging
      that the Software constitutes direct or contributory patent
      infringement, as of the date such litigation is filed.

   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. Disclaimer of Warranty. This Software is provided on an "AS-IS"
      BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
      express or implied, including, without limitation, any warranties
      or conditions of NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR
      A PARTICULAR PURPOSE.

   4. Limitation of Liability. Under no circumstances and under no legal
      theory, whether in tort (including negligence), contract, or
      otherwise, shall the Licensor be liable to any person for any
      direct, indirect, special, incidental, or consequential damages of
      any character arising as a result of this License or the use of
      the Software including, without limitation, damages for loss of
      goodwill, work stoppage, computer failure or malfunction, or any
      and all other commercial damages or losses. This limitation of
      liability shall not apply to liability for death or personal
      injury resulting from Licensor's negligence to the extent
      applicable law prohibits such limitation.

   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: ____________________________________________

                     ____________________________________________

                     ____________________________________________

   Exhibit A

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