<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
  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. 
-->
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link rel="stylesheet" href="../style/bootstrap-1-3-0-min.css" type="text/css" />
  <link rel="stylesheet" href="../style/style.css" type="text/css" />
  <script src="https://www.apachecon.com/event-images/snippet.js"></script>
        <title>XYZ Codebase Intellectual Property (IP) Clearance Status - Apache Incubator</title>
  
 </head>
 <body>
 <div class="container">
  <div class="row"><div class="span6"><a href="https://www.apache.org/"><img src="http://www.apache.org/img/asf_logo.png" alt="The Apache Software Foundation" border="0" style="margin-top: 2px" height="88"/></a></div>
<div class="span7"><a href="/"><img src="https://incubator.apache.org/images/incubator_feather_egg_logo_sm.png" alt="The Apache Software Foundation Incubator" border="0" style="margin-top: 2px" height="88"/></a></div>
<div class="span2"><a href="https://www.apache.org/foundation/contributing.html"><img src="https://www.apache.org/images/SupportApache-small.png" height="100" width="100"/></a></div>
</div>
  <div class="row"><div class="span16"><hr noshade="noshade" size="1"/></div></div>
  <div class="row">
   <div class="span4">
    <form action="http://www.google.com/search" method="get">
     <input value="incubator.apache.org" name="sitesearch" type="hidden"/>
     <input size="20" name="q" id="query" type="text" value="search..."
      onclick="if(this.value == 'search...') {this.value = ''}"/>
     <input name="Search" value="Go" type="submit"/>
    </form>
          <div class="menuheader">General</div>
    <menu compact="compact">
          <li><a href="../index.html">Welcome</a></li> 
          <li><a href="../cookbook/">Incubator Cookbook</a></li> 
          <li><a href="../policy/incubation.html">Incubation Policy</a></li> 
          <li><a href="../guides/roles_and_responsibilities.html">Roles and Responsibilities</a></li> 
          <li><a href="../faq.html">General FAQ</a></li> 
          <li><a href="http://wiki.apache.org/incubator">Incubator Wiki</a></li> 
          <li><a href="../whoweare.html">Who We Are</a></li> 
            </menu>
      <div class="menuheader">Status</div>
    <menu compact="compact">
          <li><a href="../projects">Project List</a></li> 
          <li><a href="../clutch">Clutch Report</a></li> 
          <li><a href="../ip-clearance">IP Clearance</a></li> 
            </menu>
      <div class="menuheader">Entry Guides</div>
    <menu compact="compact">
          <li><a href="../guides/proposal.html">Proposal Guide</a></li> 
            </menu>
      <div class="menuheader">Podling Guides</div>
    <menu compact="compact">
          <li><a href="../guides/committer.html">Podling Committers</a></li> 
          <li><a href="../guides/ppmc.html">Podling PMC (PPMC)</a></li> 
          <li><a href="../guides/mentor.html">Podling Mentor</a></li> 
          <li><a href="../guides/releasemanagement.html">Podling Releases</a></li> 
          <li><a href="../guides/branding.html">Podling Branding/Publicity</a></li> 
          <li><a href="../guides/sites.html">Podling Websites</a></li> 
          <li><a href="../guides/graduation.html">Graduation</a></li> 
          <li><a href="../guides/retirement.html">Retirement</a></li> 
            </menu>
      <div class="menuheader">Other Guides</div>
    <menu compact="compact">
          <li><a href="../guides/participation.html">Participation</a></li> 
          <li><a href="../faq.html">General FAQ</a></li> 
          <li><a href="../guides/chair.html">IPMC Chair</a></li> 
          <li><a href="../guides/lists.html">Mailing Lists</a></li> 
          <li><a href="../guides/website.html">Incubator Website</a></li> 
            </menu>
      <div class="menuheader">ASF</div>
    <menu compact="compact">
          <li><a href="http://www.apache.org/foundation/how-it-works.html">How Apache Works</a></li> 
          <li><a href="http://www.apache.org/dev/">Developer Documentation</a></li> 
          <li><a href="http://www.apache.org/foundation/">Foundation</a></li> 
          <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsor Apache</a></li> 
          <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li> 
            </menu>
    <div id="menuheader">
      <a class="acevent" data-format="square" data-width="135" data-mode="light" data-event="random"></a>
    </div>
   </div>
   
   <div class="span12">
            <h2 id='Codebase+IP+Clearance+TEMPLATE'><img src="../images/redarrow.gif" />Codebase IP Clearance TEMPLATE</h2>
<div class="section-content">
<pre>-----8-&lt;---- cut here -------8-&lt;---- cut here -------8-&lt;---- cut here-------8-&lt;----</pre>
<h3 id='premable'>Preamble</h3>
<div class="section-content">
<p>This document (or rather the source of it)
        is the template for recording IP clearance on new
codebases. Please store the completed document in this Incubator
repository using a filename that reflects your project.</p>
<p>One of the Incubator's roles is to ensure that proper attention is
paid to intellectual property. From time to time, an external
codebase is brought into the ASF that is not a separate project, but
still represents a substantial contribution that was not developed
within the ASF's source control system. This is a short form of the
Incubation checklist, designed to allow code to be imported with
alacrity while still providing for oversight.</p>
<p>This form is not for new projects. The intent is to simply help to
ensure, and record, that due diligence (Software Grant, Individual CLA, Corporate
CLA, license and dependencies) has been paid to the incoming code, so
that it can be merged into an existing project/module.</p>
<p>Either an Individual CLA or Corporate CLA is preferred to a Software Grant.
All authors must sign an Individual CLA; or all owners of IP must sign
one of the three documents and send to secretary (reference
<a href="http://www.apache.org/licenses/#clas">ASF Licenses</a>).</p>
<p>The receiving PMC is responsible for doing the work. The Incubator is
simply the repository of the needed information. Once a PMC directly
checks-in a filled-out short form, everything is done.</p>
<p>All PMCs must handle incoming code in this way. Any code that was
developed outside of the ASF SVN repository must be processed like
this, even if the external developer is an ASF committer.</p>
</div>
<h3 id='process'>Process</h3>
<div class="section-content">
<ol>
            <li>
IP Clearance processing must be executed either by an Officer
or a Member of the ASF. <em>If you are not an Officer or a Member,
please contact your project chair who will find an appropriate
volunteer.</em> Incubator karma is also required. Please request
karma from the incubator pmc if you do not have it.
            </li>
            <li>
(Optional) <em>Commit an outline <a href="#form-filling">form</a>,
filling those parts which can be (at this stage)</em>.
            </li>
            <li>
A software grant must be provided to the ASF. This grant can either be
done by the ASF Corporate CLA (via Schedule B) or the Software Grant
Agreement. The completed and signed grant must be emailed to
secretary@apache.org
            </li>
            <li>
Receipt of the software grant form <strong>must</strong> be acknowledged
by an Officer of the ASF by recording in the correct file (<em>grants.txt</em> for a License Grant
or <em>cclas.txt</em> for a Corporate CLA). In most normal circumstances,
the officer should be the ASF Secretary, who must be provided a copy of
the grant or CCLA in any case (if not originally sent or Emailed
to him).
            </li>
            <li>
<strong>Note:</strong> the grant form <strong>must</strong> be acknowledged
before continuing. If the source is referenced by checksum in the grant,
commit the canonical tarball for the donated code into the incubator
drop area (/repos/asf/incubator/donations) together with a checksum
and a detached signature. This will ensure that apache has a legal record of
the grant.
            </li>
            <li>
Complete and commit the <a href="#form-filling">completed form</a>.
            </li>
            <li>
Post a message to general@incubator prefixed [IP CLEARANCE] asking for
clearance to be checked. Sign off is by lazy consensus so wait at least
72 hours for a -1.
            </li>
            <li>
Post a [RESULT] to close the thread and let the project know that the
code has been cleared for import.
            </li>
          </ol>
</div>
<h3 id='form-filling'>Filling The Form</h3>
<div class="section-content">
<p>What to do to set it up:</p>
<ul>
        <li>copy this file and re-name it according to
incubator/public/trunk/content/ip-clearance/${project-codebase}.xml</li>
        <li>add a row to the table at
incubator/public/trunk/content/ip-clearance/index.xml</li>
        <li>make a snapshot of the source code available for review</li>
      </ul>
<p>The snapshot should not last long in place before it is moved to the
successful incubation area. The sole purpose is to ensure that IP is
cleared so that the codebase can be merged into the ASF SVN.</p>
<p>For this file:</p>
<ul>
        <li>substitute the XYZ name with the real one</li>
        <li>fill in the description</li>
        <li>fill in the work items</li>
        <li>remove this notice</li>
        <li>set a proper "title" element for the html page</li>
      </ul>
<p>When a work item is done, place the date in the supplied space.</p>
<p><em>On the first edit of this file, please delete this notice.</em></p>
</div>
<pre>-----8-&lt;---- cut here -------8-&lt;---- cut here -------8-&lt;---- cut here-------8-&lt;----</pre>
</div>
        <h2 id='XYZ+Codebase+Intellectual+Property+%28IP%29+Clearance+Status'><img src="../images/redarrow.gif" />XYZ Codebase Intellectual Property (IP) Clearance Status</h2>
<div class="section-content">
</div>
        <h2 id='Description'><img src="../images/redarrow.gif" />Description</h2>
<div class="section-content">
<p>Describe the incoming codebase, including whether it is a large set
of patches, new functional modules, etc.</p>
</div>
        <h2 id='Project+info'><img src="../images/redarrow.gif" />Project info</h2>
<div class="section-content">
<ul>
        <li>Which PMC will be responsible for the code</li>
      </ul>
<ul>
        <li>Into which existing project/module</li>
      </ul>
<ul>
        <li>Officer or member managing donation:</li>
      </ul>
<p>
        <em>Completed tasks are shown by the completion date (YYYY-MM-dd).</em>
      </p>
<h3 id='Identify+the+codebase'>Identify the codebase</h3>
<div class="section-content">
<table class="colortable" width="100%">
          <tr>
            <th>date</th>
            <th>item</th>
          </tr>
          <tr>
            <td>....-..-..</td>
            <td>If applicable, make sure that any associated name does not
                already exist and is not already trademarked for an existing software
                product.</td>
          </tr>
        </table>
<p>
MD5 or SHA1 sum for donated software:  (<em>Note versioned software used to calculate sum in parentheses</em>).
        </p>
<h4 id='Copyright'>Copyright</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>....-..-..</td>
              <td>Check and make sure that the papers that transfer rights to
                  the ASF been received. It is only necessary to transfer
                  rights for the package, the core code, and any new code
                  produced by the project.</td>
            </tr>
            <tr>
              <td>....-..-..</td>
              <td>Check and make sure that the files that have been donated
                  have been updated to reflect the new ASF copyright.</td>
            </tr>
          </table>
<p>
Identify name recorded for software grant: <em>the name of the grant as recorded
in the foundation/officers area, in either grants.txt or cclas.txt, so that the 
grant can be easily identified. If recorded in the grants.txt document, use the 
"for" or title. If recorded in the cclas.txt document, use the company name
(field 2 without submitter name) and the "form on file" name (field 4, without 
any people's names).</em>
          </p>
</div>
<h4 id='Verify+distribution+rights'>Verify distribution rights</h4>
<div class="section-content">
<p>
Corporations and individuals holding existing distribution rights:
            </p>
<ul>
<li>
<em>For individuals, use the name as recorded on the committers page</em>
</li>
            </ul>
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>....-..-..</td>
              <td>Check that all active committers have a signed CLA on
                  record.</td>
            </tr>
            <tr>
              <td>....-..-..</td>
              <td>Remind active committers that they are responsible for
                  ensuring that a Corporate CLA is recorded if such is
                  required to authorize their contributions under their
                  individual CLA.</td>
            </tr>
            <tr>
              <td>....-..-..</td>
              <td>Check and make sure that for all items included with the
                  distribution that is not under the Apache license, we have
                  the right to combine with Apache-licensed code and
                  redistribute.</td>
            </tr>
            <tr>
              <td>....-..-..</td>
              <td>Check and make sure that all items depended upon by the
                  project is covered by one or more of the following approved
                  licenses: Apache, BSD, Artistic, MIT/X, MIT/W3C, MPL 1.1, or
                  something with essentially the same terms.</td>
            </tr>
          </table>
<p>Generally, the result of checking off these items will be a
             Software Grant, CLA, and Corporate CLA for ASF licensed code,
             which must have no dependencies upon items whose licenses that
             are incompatible with the Apache License.</p>
</div>
</div>
<h3 id='Organizational+acceptance+of+responsibility+for+the+project'>Organizational acceptance of responsibility for the project
</h3>
<div class="section-content">
<p>
Related VOTEs:
        </p>
<ul>
          <li><em>The VOTE thread accepting the donation may happen either
before or after IP clearance. Adoption by lazy concensus is acceptable but
not recommended.</em></li>
        </ul>
</div>
</div>
       </div>
   </div>
  
   <div class="row"><div class="span16"><hr noshade="noshade" size="1"/></div></div>
  <div class="row">
   <div class="span16 footer">
     Copyright &#169; 2009-2024 The Apache Software Foundation<br />
     Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.<br/>
     Apache Incubator, Apache, the Apache feather logo, and the Apache Incubator project logo are trademarks of The Apache Software Foundation.
     
     
    </div>
  </div>
 </div> 
 </body>
</html>
