<!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>Zookeeper 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='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-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>
