<!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" />
        <title>Zookeeper Intellectual Property (IP) Clearance Status - Apache Incubator</title>
  
 </head>
 <body>
 <div class="container">
  <div class="row">
<div class="span12">
  <a href="http://www.apache.org/"><img src="http://incubator.apache.org/images/asf_logo_wide_small.png" alt="The Apache Software Foundation" border="0" style="margin-top: 2px" width="62%"/></a>
</div>
<div class="span4">
<a href="http://incubator.apache.org/"><img src="../images/egg-logo2.png" alt="Apache Incubator" border="0"/></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="../incubation/Process_Description.html">Incubation Overview</a></li> 
          <li><a href="../incubation/Incubation_Policy.html">Incubation Policy</a></li> 
          <li><a href="../guides/index.html">Incubation Guides</a></li> 
          <li><a href="../incubation/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> 
          <li><a href="../sitemap.html">Site Map</a></li> 
            </menu>
      <div class="menuheader">Status</div>
    <menu compact="compact">
          <li><a href="../projects/index.html">Project List</a></li> 
          <li><a href="../clutch.html">Clutch Report</a></li> 
          <li><a href="../ip-clearance/index.html">IP Clearance</a></li> 
          <li><a href="../history/index.html">Incubator History</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/pmc.html">Incubator PMC (IPMC)</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>
    <!-- start Ads Server -->
    <iframe src="http://www.apache.org/ads/buttonbar.html"
     style="border-width:0; float: left" frameborder="0" scrolling="no"
     width="135" height="265"></iframe>
    <!-- end Ads Server -->
   </div>
   
   <div class="span12">
            <h2 id='Zookeeper+IP+Clearance'><img src="../images/redarrow.gif" />Zookeeper IP Clearance</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 is code for the zookeeper tool that was developed by Yahoo, which
will be used and maintained with Hadoop to provide distributed coordination 
between servers. The tool was previously licensed under the Apache License 
2.0 and has now been granted to the ASF.</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 traditional
License Agreement. Acceptable methods of sending the grant to the
ASF includes:
<ul>
<li>snail-mail to the ASF office and/or ASF officer</li>
<li>FAXing to the ASF office and/or an ASF officer</li>
<li>Emailing the scanned document to secretary@apache.org
   <em>and</em> legal-archive@apache.org.</li>
 </ul>
            </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 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>This file 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='Zookeeper+Codebase+Intellectual+Property+%28IP%29+Clearance+Status'><img src="../images/redarrow.gif" />Zookeeper 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>This is code for the zookeeper tool that was developed by Yahoo, which
will be used and maintained with Hadoop to provide distributed coordination 
between servers. The tool was previously licensed under the Apache License 
2.0 and has now been granted to the ASF.</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: Hadoop</li>
      </ul>
<ul>
        <li>Into which existing project/module: Hadoop/Zookeeper</li>
      </ul>
<ul>
        <li>Officer or member managing donation: Owen O'Malley</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>2008-07-15</td>
            <td>https://issues.apache.org/jira/secure/attachment/12383599/zk-dump.bz2 md5 =  0b293ed960cf7bc84af4825aa9b33b66</td>
          </tr>
        </table>
<h4 id='Copyright'>Copyright</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2008-06-12</td>
              <td>Grant received by ASF</td>
            </tr>
          </table>
<p>
Identify name recorded for software grant: <em>the name of the grant as record 
in the grants.txt document so that the grant can be easily identified</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> Yahoo!</li>
            </ul>
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2008-07-15</td>
              <td>All active committers have a signed CLA on
                  record.</td>
            </tr>
            <tr>
              <td>2008-07-15</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>2008-07-15</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>2008-07-15</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: &lt;C6F0B17B-4ECC-419E-91B1-81470D83FA62@yahoo-inc.com&gt; on private@hadoop
        </p>
</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-2016 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>
