= Incubation Policy
Apache Incubator PMC
2002-10-16
:jbake-type: policy
:jbake-status: published
:idprefix:
:toc:
:imagesdir: ../images/

In October 2002 the Board of Directors of the Apache Software Foundation passed 
a resolution to establish the Apache Incubator PMC. Quoting the 
link:https://www.apache.org/foundation/records/minutes/2002/board_minutes_2002_10_16.txt[October 16th, 2002 Board Minutes]:

[quote, ASF Board Meeting, October 16th 2002]
...establish a Project Management Committee charged with
       accepting **new products** into the Foundation, providing **guidance
       and support** to help each new product engender their own
       collaborative community, **educating new developers in the
       philosophy and guidelines** for collaborative development as
       defined by the members of the Foundation, and proposing to the
       board **the promotion of such products to independent PMC
       status** once their community has reached maturity.

See the October 2002 link:https://www.apache.org/foundation/board/calendar-1999-2004.html#2002 [Board report] for the resolution.

The Incubator has the following responsibilities:
- Welcoming new Podlings to become part of the Apache Software Foundation (ASF).
- Guiding Podlings to govern and grow their communities according to *link:https://www.apache.org/theapacheway/[the Apache Way]*, the ASF's philosophy and guidelines for collaborative development.

- Reporting monthly to the board on the progress of Podlings.
- Graduating Podlings to top level Apache Software Foundation projects.
- Retiring Podlings when needed.
- Accepting IP donations.

== About this Document

This document is the reference for the policies and procedures put in place by the Incubator PMC for the incubation process. 

The document makes use of the terms MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, MAY and OPTIONAL. Where capitalized, these terms are used as defined in link:http://www.ietf.org/rfc/rfc2119.txt[RFC 2119].

Like many policy documents this is not the most fun thing to read. Our link:/cookbook[Cookbook] 
provides more concrete information on the incubation process.

== Scope
This document contains the minimum requirements and processes that MUST be met by Podlings undergoing incubation.

This document does not apply outside the process of incubation.

== Relationship to Other Documents
This document is the set of requirements for incubation. Where other documents say something different, this document is correct.

== Changing this Document
The Incubator PMC approves the content of this document. Any changes MUST be authorized by the Incubator PMC.

== Podling Reporting
Each Podling in Incubation MUST report to the Incubator PMC. Podlings SHALL report monthly for their first three months, after that quarterly. The Incubator PMC MAY, at their discretion, ask a Podlings to report more frequently. The PPMC with the mentor(s) help, MUST produce a report for the Incubator PMC detailing the overall progress toward graduation and any issues encountered.

== Podling Constraints
While in Incubation, Podlings are constrained in the actions they can undertake.

=== Website
There are restrictions on where Podlings sites are hosted and branding on web sites.

Please consult the link:/guides/sites.html[Podling Websites Guide] for the current policies on Podling websites.

=== Branding
There are restrictions about how Podlings can use their own and other ASF brands and names.

Please consult the link:/guides/branding.html[Podling Branding Guide] for details.

=== Publicity
There are some restrictions about how Podlings can advertise themselves, especially around press releases related to Podlings.

Please consult the link:/guides/publicity.html[Podling Publicity Guide] for details.

=== Disclaimers

Podling web sites MUST include a clear disclaimer on their
website and in all documentation, releases and release announcements
stating that they are in incubation.

Podling has a choice of two disclaimers a standard disclaimer or a work in progress disclaimer.

Podlings wishing to use a different disclaimer message MUST have the
disclaimer approved by the Incubator PMC before use.

==== Standard Disclaimer

Podlings wanting to follow all ASF policy on releases SHOULD use the following 
text for all disclaimers (replace the underlined text where needed):

[quote]
____
Apache [.underline]#Podling-Name# is an effort
undergoing incubation at The Apache Software Foundation (ASF),
sponsored by the [.underline]#name of Apache TLP sponsor#. Incubation is required of all
newly accepted projects until a further review indicates that the
infrastructure, communications, and decision making process have
stabilized in a manner consistent with other successful ASF projects.
While incubation status is not necessarily a reflection of the
completeness or stability of the code, it does indicate that the
project has yet to be fully endorsed by the ASF.
____

For releases, the text SHOULD be included in a separate DISCLAIMER file
stored alongside the NOTICE and LICENSE files.

==== Work In Progress Disclaimer

Podling wishing to make releases that may not follow all ASF policy SHOULD use the
following disclaimer (replace the underlined text where needed):

____
Apache [.underline]#Podling-Name# is an effort
undergoing incubation at The Apache Software Foundation (ASF),
sponsored by the [.underline]#name of Apache TLP sponsor#. Incubation is required of all
newly accepted projects until a further review indicates that the
infrastructure, communications, and decision making process have
stabilized in a manner consistent with other successful ASF projects.
While incubation status is not necessarily a reflection of the
completeness or stability of the code, it does indicate that the
project has yet to be fully endorsed by the ASF.

Some of the incubating project's releases may not be fully compliant
with ASF policy. For example, releases may have incomplete or
un-reviewed licensing conditions. What follows is a list of known
issues the project is currently aware of (note that this list, by
definition, is likely to be incomplete): 
[.underline]#List of known issues go here#

If you are planning to incorporate this work into your
product/project, please be aware that you will need to conduct a
thorough licensing review to determine the overall implications of
including this work. For the current status of this project through the Apache
Incubator visit: 
https://incubator.apache.org/projects/[.underline]#Apache Podling-Name#.html
____

For releases, the text SHOULD be included in a separate DISCLAIMER-WIP file
stored alongside the NOTICE and LICENSE files.

=== Releases

See the guidelines for link:/guides/releasemanagement.html[Podling releases] for good practices on making releases.
link:guides/releasemanagement.html#requesting_feedback_on_interim_non_asf_releases[Non ASF releases] can be made while incubating as long as the podling is moving towards making ASF releases.

Podlings are not fully accepted as official projects within the Apache Software Foundation. Podlings MUST NOT perform any ASF releases of software without the approval of the Incubator PMC. When a Podling decides it wants to make an ASF release, the Podling MUST hold a vote on their public dev list. At least three +1 votes are required (see the http://www.apache.org/foundation/voting.html[Apache Voting Process] page) and more +1 votes than -1 votes. If the vote passes the Podling MUST send a summary of that vote to the Incubator's link:/howtoparticipate.html#Mailing+lists[general] list and request that the Incubator PMC approve the release. Three +1 Incubator PMC votes are required to approve a release. Below is an example showing how an incubating project managed this process:

- link:++https://lists.apache.org/thread.html/7e9c475d07c0e12f813226aa123f54969ebb21a2277b32e9bd366d96@%3Cdev.plc4x.apache.org%3E++[Post to the Podling dev list calling the vote.]
- link:++https://lists.apache.org/thread.html/06655226ba08c16a8cb273f9b45e0b0a15ebaed0d06783fdd06a03f6@%3Cgeneral.incubator.apache.org%3E++[Post to the Incubator's general list requesting approval from the Incubator PMC.]

Should the Incubator PMC vote to approve a release, the Podling MAY make that release available to the public, only if:

- The release archive(s) MUST include the word "incubating" in the filename.
- The release archive(s) MUST contain a disclaimer (see above), which SHOULD be placed in a DISCLAIMER or DISCLAIMER-WIP file.

Releases for the *Podling* MUST be distributed through *++http://www.apache.org/dist/incubator/++_Podling_* Also the Podling MAY choose to distribute approved releases through other channels like the central Maven repository.

==== Adding PPMC members
After voting someone into the PPMC on the PPMC private list, a NOTICE email MUST be sent incubator private list. The PPMC MUST wait for 72 hours before inviting the new PPMC member to join the PPMC. See link:https://incubator.apache.org/guides/ppmc.html#voting_in_a_new_ppmc_member[Voting in a new PPMC member].

== Termination
The Incubator PMC SHOULD notify a podling of any policy violations. It MAY consider the termination of a Podling if violations are not corrected. 

