<!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" />
    <link rel="alternate" title="general@incubator.apache.org Archives" type="application/atom+xml" href="http://mail-archives.apache.org/mod_mbox/incubator-general/?format=atom" />
    <title>Process Description - 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='TOC'><img src="../images/redarrow.gif" />Incubation Process: Table of Contents</h2>
<div class="section-content">
<ul>
            <li><a href="#Introduction">Introduction</a></li>
            <li><a href="#The+Process+of+Incubation">The Process of Incubation</a>
            <ul>
                    <li><a href="#Establishment">Establishment</a></li>
                    <li><a href="#Acceptance">Acceptance</a></li>
                    <li><a href="#Review">Review</a></li>
                    <li><a href="#TerminationRetirement">Termination or Retirement</a></li>
                    <li><a href="#Continuation">Continuation</a></li>
                    <li><a href="#Graduation">Graduation</a></li>
            </ul>
        </li>
        </ul>
</div>
        <h2 id='Introduction'><img src="../images/redarrow.gif" />Introduction</h2>
<div class="section-content">
<p>
        This document is an overview of the process. Read it in conjunction with
        the "<a href="Incubation_Policy.html">Incubation Policy</a>" and the
        various <a href="../guides/">guides</a>.
        Also review the
        <a href="../incubation/Roles_and_Responsibilities.html">Roles and Responsibilities</a>
        for a description of the various parties involved in the Incubation
        process.
      </p>
</div>
        <h2 id='The+Process+of+Incubation'><img src="../images/redarrow.gif" />The Process of Incubation</h2>
<div class="section-content">
<p>The incubation process covers the establishment of a candidate,
acceptance (or rejection) of a candidate leading to the potential
establishment of a Podling and associated incubation process, which
ultimately leads to the establishment or a new Apache
Top-Level-Project (TLP) or sub-project within an existing Apache
Project.
</p>
<p>
        <img alt="incubation-process.png" src="incubation-process.png" />
      </p>
<h3 id='Establishment'>Establishment</h3>
<div class="section-content">
<p>
                <a href="./images/howtoincubateaproject.png"><img src="./images/howtoincubateaproject-thumb.png" alt="Illustration of the establishment process" /></a>
        </p>
<p>
                The first thing you will want to do is find a
                <strong><a href="Roles_and_Responsibilities.html#Champion">Champion</a></strong> for your project. 
                One way to do this is to explore the existing
                <a href="http://www.apache.org/foundation/projects.html">Apache projects</a> to find similar projects. 
                Spend some time reading their project web pages and mailing lists (follow links at each project website). 
                By simply lurking on the project mailing lists (and also the 
                <a href="../guides/lists.html#general+at+incubator.apache.org">Incubator general list</a> 
                and other Incubating project lists) you may get ideas about who you
                would like to contact directly to help you with your project proposal.
        </p>
<p>                
                Simply email that person directly (e.g. <code>username@apache.org</code>,
                see the <a href="http://people.apache.org/committer-index.html">committer list</a> to
                find the username), 
                describe informally yourselves and your project,
                and ask kindly if she would be willing to act as your Champion for
                your project within the Apache incubator. Remember that all 
                Apache Committers and Members are volunteers with limited 
                spare time, but you will hopefully find that the person is
                honoured by your request to be a Champion and sees a potential
                for your project as a future Apache project.
        </p>
<p>
                Once you have found an eligible person who is willing to act as Champion, 
                you can use this person to
                help you determine if and how your proposal can fit within the ASF,
                and if the "Apache Way" of open development would be right for your
                project. 
                This might happen over a series of emails, telephone calls or
                online chat sessions, and should cover any practical concerns such as
                project infrastructure (e.g. mailing lists, web, source code repositories, 
                issue tracker, wiki) but also the implications of 
                licensing, governance and Intellectual Property management.          
        </p>
<p>                
                If you and your Champion are convinced that your candidate project
                would fit with the "Apache Way", your Champion can help you to get it
                established.
        </p>
<p>
                The establishment of a candidate involves the preparation of a
                Project Proposal (consistent with the candidate description
                detailed below) endorsed by a <strong>Champion</strong>.
        </p>
<p>
                A <strong>Candidate</strong> project description should be submitted to the  <a href="../guides/lists.html">relevant 
                mailing list(s)</a> of a <strong>Sponsor</strong>. The Sponsor is usually the 
          <a href="/">Incubator (IPMC)</a>, (<a href="/guides/lists.html">general@incubator.apache.org</a>),
                assuming your project would aspire to 
                become a top-level project (TLP). In the special case of your project aspiring to become
                a sub-project of an existing Apache top-level project 
                (e.g. a plugin for Apache OpenOffice), then that project 
                should be your champion and their <code>dev@</code> mailing list would 
                 be where to send the proposal first.
        </p>
<p>
                Please see:
        </p>
<ul>
                  <li>a <a href="/guides/proposal.html">Guide to Proposal Creation</a></li>
                  <li>existing <a href="http://wiki.apache.org/incubator/ProjectProposals">project proposals</a> for examples</li>
                </ul>
<p>                
                Typically a <strong>Candidate</strong> is submitted under a message tagged with [PROPOSAL]. 
                Such a message will normally trigger some discussions on the receiving mailing list(s). 
                Your Champion will be involved in these discussions acting as your advocate.
        </p>
<p>
                As a proposer you should consider the feedback and attempt to gauge a
                sense of consensus. Do not be put off by extended threads under your
                initial post that have little or nothing to do with your proposal -
                however, if you feel that your candidate project is not being
                addressed, you may want to specifically request a decision on the
                Candidate by the Sponsor.
                Sometimes a vote will be announced without
                you asking for it (perhaps you have done some homework and have a PMC
                member assisting you though the process), other times you may need to
                cut through discussions and push your request forward for a decision.
        </p>
</div>
<h3 id='Acceptance'>Acceptance</h3>
<div class="section-content">
<p>The decision to accept a project is taken on a vote by the Sponsor.
The format of this vote will depend on the rules of the entity in
question. Here again it helps if you have a PMC Member (or board
member if the Sponsor is the ASF board) aligned with your project
(preferably as your Champion) because you stand a better chance of
getting feedback about what is actually happening. The Sponsor will
typically take about 7-10 days before announcing a vote result.
</p>
<p>If that vote is affirmative, the Sponsor (unless the Sponsor is
          already the Incubator PMC) will propose to the

          <strong>Incubator PMC</strong>(referencing the voting result e-mail) that your candidate project be
accepted by the Incubator as a

          <strong>Podling</strong>. The Sponsor will assign

          <strong>Mentors</strong>. 
The Mentors may include your original Champion. If not, it
is expected your Champion will remain involved during the rest of the
Incubation process, providing as much assistance as possible.

        </p>
<p>The Mentors are there to protect you, but be warned - Mentors
are holding a big stick. The Mentors are members
of the Incubator PMC, and report to both the PMC and the Sponsor
about your overall health and suitability for eventual inclusion
within the Apache Community (or recommendation to terminate).
However, the Mentors (with the assistance of the Champion) are also
looking after you through the incubation.
</p>
<p>One of the roles of the Mentors is to keep away the wolves - and in
the case of incubation the wolf is the Incubator PMC, the policies,
the process, and inevitable bureaucracy and delays. The Mentors can
help you by guiding and protecting you from much of this based on
their experience in the process and familiarity with the policy and
procedures of incubation. In performing their role, the Mentors are
representing the Sponsor.
</p>
<p>Your Sponsor, represented by your Mentors, has specific
responsibilities towards you and the Incubator PMC. There are a bunch
of administrative and technical actions to take care of. Your Mentors
are responsible for ensuring that these things happen quickly and
efficiently. Also, your Mentors are going to help you out with the
getting in place of the policies and procedures you use for
introducing new comitters, decision making, etc. These aspects will
be watched closely by the Incubator PMC as they provide a good
indication of community dynamics, health and correlation with Apache
practices.
</p>
</div>
<h3 id='Review'>Review</h3>
<div class="section-content">
<p>As your project sorts things out and things stabilize
(infrastructure, communications, decision making) you will inevitably
come under an assessment by the Incubator PMC concerning the exit of
your project from the incubator. Keep in mind that exit can be a good
thing and bad thing. Exit via graduation to a top-level project or
perhaps a subproject of an existing PMC would typically be viewed as
a positive exit. On the other-hand, termination is also an exit
condition that may be considered. With an upcoming assessment it is
generally a good idea to have your STATUS file right up to-date and
to ensure that your Mentor is doing his/her job of evangelizing your
project and has good picture of where you are relative to acceptance
or the last assessment point. This information will help the
Incubator PMC to recommend the best action for your project.
</p>
<p>Conclusion of a review process will be a recommendation (to the
Sponsor) of one of the following:
</p>
<ul>
          <li>termination;</li>
          <li>continuation under incubation with recommendations; or</li>
          <li>graduation into Apache.</li>
        </ul>
<p>Note that whilst this is a recommendation, it carries a lot of
weight. A Sponsor will only over-ride the recommendation of the
Incubator in exceptional circumstances, and even then it is likely
that the issue in question would be escalated to the ASF board for
their consideration.
</p>
</div>
<h3 id='TerminationRetirement'>Termination or Retirement</h3>
<div class="section-content">
<p>There are two ways for a project to cease incubation: Termination
or Retirement. 

If you receive a recommendation for termination then you have a
problem. Chances are that there are either legal or structural
problems with your project that in the opinion of the Incubator PMC
are not resolvable within a reasonable time frame. A termination
decision is basically time to close down the project. However, you do
have the right to appeal a termination decision with the Board of
Directors and/or your Sponsor. You should be aware that several
Members of the Board are also Members of the Incubator PMC and as
such, an appeal is unlikely to be successful.

Retirement is typically an internal decisions by PPMC. A retired project
is a project which has been closed down by the PPMC or by the IPMC for 
various reasons. It is not longer developed at the Apache Incubator and 
does not have any other duties.

Retirement can also be suggested by IPMC on the grounds of lack
of releases for more than a year. However, since unlike termination, 
retirement is a voluntary process, the suggestion will have to be 
discussed and voted upon.

It's important to view this process as being the retirement of the podling
community, not the code. It should not be implied that the code is not for 
use - just that it has no community. The source code of a retired project 
is available in ASF repository, when the copyright requirements are fullfilled. 
This is indicated through the incubator status page. For more details on
Retirement please see our <strong><a href="../guides/retirement.html">Guide to Retirement</a></strong> 
</p>
</div>
<h3 id='Continuation'>Continuation</h3>
<div class="section-content">
<p>A recommendation by the Incubator PMC for continuation of incubation
shall include development recommendations. The Incubator PMC has a
responsibility to ensure that the recommended actions are tangible
and quantifiable. For example, an assessment could be that your
project has not established a sufficient community to be viable, in
which case the Incubator PMC is obliged to state specific targets
that they consider as viable. This does not necessarily mean that if
you meet this target by the next review that you are out of
incubation - but it does give you concrete achievements that you can
cite. Your Mentor is also specifically accountable to you for
ensuring that the recommendations for continuation are usable,
substantive and tangible. If this is not the case, you have every
right to appeal an Incubator decision to the Apache Board. However,
if your Mentor is doing a good job, neither of these scenarios should
arise.
</p>
</div>
<h3 id='Graduation'>Graduation</h3>
<div class="section-content">
<p>For Podlings that aim to establish sub-projects or products within
existing communities you are almost home-free. The main issues you
need to deal with now is migration of your code into the target
project, something you should be confident in doing based on the
contacts and understanding you gained during initial establishment
and incubation.
</p>
<p>For projects aiming to be a Top-Level-Project (TLP), you have an
additional obstacle, namely the ASF Board. While the ASF Board might
be your Sponsor, this does not mean they have formally accepted you
as a TLP. To establish a TLP you need to draft a board motion that
identifies the project scope, mission and charter. You can submit the
motion to the Board using the board at apache dot org email address.
Well-prepared projects will have already developed contacts with
members of the Board so this should not be a surprise agenda item.
Keep in mind that the Board can approve your motion as supplied,
amend it, or reject it. If you are rejected then you need to sort
this out with the Incubator PMC and allies you have developed during
the incubation process. In other words, for a TLP objective the
Incubator PMC okay is only half of the story.
</p>
<p>However, in practice, assuming you are building contacts with members
in Apache, the Incubator PMC, and the ASF Board, the transition from
Podling to TLP should be a smooth and painless process.
</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>
