= The Apache Incubator Cookbook
Apache Incubator PMC
2019-03-26
:jbake-type: simplepage
:jbake-status: published
:idprefix:
:toc:
:imagesdir: ./images/

This cookbook, combined with our link:http://incubator.apache.org[homepage], provides the information that you need to incubate a project at the ASF.

It is *the* central point for answers to all questions related to incubation. It provides an overview of the incubation goals and process, and links to more detailed information.

It is organized in chronological order of the steps that lead from incubating project acceptance to graduation as a Top-Level Project (TLP).

We welcome feedback about the cookbook, either through the link:https://lists.apache.org/list.html?general@incubator.apache.org[general@incubator.a.o] email list
or in the link:https://issues.apache.org/jira/browse/INCUBATOR-234[INCUBATOR-234] ticket. You can also submit patches to link:https://github.com/apache/incubator/tree/master/pages/cookbook[this repository].

== Does our project fit the Apache Incubator?

The Apache Software Foundation (ASF) _provides software for the public good_, as explained in our link:https://blogs.apache.org/foundation/entry/the-apache-software-foundation-2018[vision statement] from 2018.

Our projects operate according to link:http://www.apache.org/theapacheway/index.html[The Apache Way], a set of principles and best practices. 

We put a strong emphasis on _Community Over Code_, _fierce independence_ from companies and organizations, and _openness_ in all aspects of our work.

Donating your project to the ASF means giving up control of it, and its trademarks, if any. You'll be very welcome to participate in the project, but without a special status beyond being part of its Project Management Committee (PMC). The good news is that your project can then take a life of its own, with potentially a much broader reach, due to the ASF's independence and emphasis on project sustainability.

Assuming your project fits this mindset, we do not link acceptance of your project to what it does, as the ASF on purpose does not have a technical strategy. If it's very similar to link:https://projects.apache.org/[one of our existing projects], we will probably ask you to consider joining that project. Still, some of our projects exist for similar purposes, and that's not necessarily a problem.

To give our "podlings" (incubating projects) the best chances of success, we usually ask them to enter the Incubator with at least the start of a community built around an existing codebase.

== What are the steps to becoming an Apache Software Foundation Top-Level Project?

The goal of incubation is to become an Apache Software Foundation (ASF) Top-Level Project (TLP).

See the link:https://www.apache.org/foundation/how-it-works.html[How the ASF works] page for what this means and what the various roles (committers, PMC members etc.) mean.

To achieve this, an incoming project ("podling") goes through the following steps:

 * Find a champion and incubation mentors and discuss and prepare an incubation proposal
 * Decide to incubate at the ASF
 * Discuss the proposal with the Incubator PMC
 * If needed, refine the list of initial committers and mentors in the proposal
 * if needed, refine the proposal based on Incubator PMC feedback
 * Let the Incubator PMC vote on the proposal
 * If the vote is to accept the project, set up the podling's infrastructure
 * Start building a community around the podling's code
 * Invite new committers and PPMC members
 * Make podling releases, and document and refine both the code and the release process
 * When you feel ready to graduate, assess the podling's readiness with the incubation mentors 
 * If applicable, prepare the transfer of existing trademarks to the ASF
 * Discuss graduation with the Incubator PMC
 * Start the graduation vote with the Incubator PMC, leading to an ASF Board resolution to establish the TLP
 
Described above is the "happy case". Things might happen in a slightly different order, but it gives an overview of the typical incubation process.

Here are more details about these steps:

== Communicating with the Incubator

The Incubator PMC manages the Incubator and helps incoming projects in their journey through incubation.

To communicate with the Incubator PMC, use the public link:++https://lists.apache.org/list.html?general@incubator.apache.org+ [general@incubator.a.o] mailing list. That page has links to subscribe to the list.

== Finding a champion and mentors

To enter the Incubator, your project needs a _champion_ and at least two or three _mentors_. These people MUST be Incubator PMC members, which ASF Members can join just by asking.

The Champion helps the incoming podling in the process of creating their proposal and acts as a liaison between the podling and the Incubator PMC for the initial steps, at least until the podling's proposal is accepted. They may stay on to act as a mentor after that.

The Mentors accompany the podling through all phases that lead to graduation as a top-level project.

The starting point is usually to find a Champion. For that you might write to the general@incubator.a.o list 
with a brief description of your project, with relevant links, mentioning that you are looking for a Champion and
trying to get people interested. Or, if you know any ASF Members or Incubation Mentors, ask them directly if they
would be willing to help.

== Creating an incubation proposal

The Champion helps the podling prepare an incubation proposal that describes the incoming project for the initial discussions with the Incubator PMC. 

The proposal needs to include several standard sections: see the link:https://cwiki.apache.org/confluence/display/INCUBATOR/New+Podling+Proposal[podling proposal template].

Prior proposals are kept on the link:https://cwiki.apache.org/confluence/display/INCUBATOR/Proposals[Incubator wiki]. They can be consulted as examples, keeping in mind that the proposal template mentioned above is the current reference for new proposals.

== Discussing the incubation proposal

Once the proposal is ready, the podling representatives send it to the general@incubator.a.o list for discussion, with a subject line like

 [DISCUSS] Foo Proposal
 
to raise the Incubator PMC's attention.

The discussion often leads to small or large changes to the proposal.

There's no set duration for this discussion phase. It usually lasts for a few days until the discussion dies down and all discussion points have been addressed.

For recent discussions threads see:

* link:https://lists.apache.org/thread.html/7ed194c45460a3941ae6713b20e742ec7af398c5414de7b17d188c3b@%3Cgeneral.incubator.apache.org%3E[Nuttx proposal] (in progress)
* link:https://lists.apache.org/thread.html/1cf79ef65888f695b4b925fd67ef8a2b845f6b0931c251a0ff1115e1@%3Cgeneral.incubator.apache.org%3E[StreamPipes proposal] (accepted)
* link:https://lists.apache.org/thread.html/ff9874f5353d319152f09aa9c1aa1a673b84acdaeb9932432d58d5ab@%3Cgeneral.incubator.apache.org%3E[Sparkr proposal] (withdrawn)
* link:https://lists.apache.org/thread.html/21c5453b40765cf1d5a06540fcf6d76c0d5b6b7df7ade5c29d31aa3e@%3Cgeneral.incubator.apache.org%3E[TubeMQ proposal] (accpeted)
* link:https://lists.apache.org/thread.html/dbdbc6bd8e238d9dbf16604d5fa13500523d6e812fcd863444f99842@%3Cgeneral.incubator.apache.org%3E[MetaObjects proposal] (on hold)

== Voting on the Incubation Proposal

Once the discussion phase is finished, the Champion or a podling representative starts a [VOTE] thread on the general@incubator.a.o list.

The vote happens according to the link:https://www.apache.org/foundation/voting[ASF voting rules]. In short, it takes place on the Incubator email list, lasts at least 72 hours, and is a majority vote by the Incubator PMC members, with others being welcome to cast votes.

TODO link to recent votes as examples

== Podling Infrastructure Setup

Once the Incubator PMC votes to establish the podling, its infrastructure can be set up. 

Usually, the Champion or incubation mentors drive this process. However, it can also be driven by podling community members if they know how to proceed.

See link:https://infra.apache.org/infra-incubator.html[Infra and the Incubator] for detailed instructions.

== Publicity and Announcements

The project can _not_ issue press releases or other public statements about joining the ASF before the Incubator PMC accepts the podling.

There are also some restrictions about how podlings can advertise themselves and  especially around press releases related to podlings. The link:http://incubator.apache.org/guides/branding.html[Incubator Branding Guide] and https://incubator.apache.org/guides/publicity.html[Apache Podling Publicity/Media Guidelines] have more details.

== Importing the Initial Code

A specific process exists to donate code to the ASF, which podlings also
need to follow, based on link:https://www.apache.org/licenses/software-grant.txt[Software Grants] and/or link:https://www.apache.org/licenses/cla-corporate.txt[CCLAs].

The link:http://incubator.apache.org/guides/transitioning_asf.html[Initial Code Import] guide has more details about this.

== Community building

During incubation, the podling is expected to build and expand its community, which includes voting in new committers and PPMC members.

Discussions of candidates and votes happen on the podling's private PPMC mailing list. That's one of the few uses of that list as, generally, all discussions happen in the open.

Expanding and especially renewing project communities are essential parts of the ASF's governance, as they foster project durability.

== Podling Releases

During incubation, we expect a podling to make **several software releases** that gradually progress towards being fully conformant to the link:http://www.apache.org/legal/release-policy.html[ASF Release Policy]. Producing fully-conformant releases is a condition for graduation.

Podling releases must also include the word "incubating" in any release file names and include a DISCLAIMER or DISCLAIMER-WIP as per the
link:https://incubator.apache.org/guides/releasemanagement.html#choice_of_disclaimers[Incubator Releases Guide],
to prevent any confusion as to the project’s status. As podlings are not yet "real" ASF projects, it is important to set expectations appropriately.

Note that Apache Releases consist of source code only. However, it is common for our projects to also distribute
link:http://www.apache.org/legal/release-policy.html#compiled-packages[compiled packages] along with their releases, as a convenience to users of the application. The focus is on the actual
source code releases, and all distributed compiled packages are based on those "official" releases.

== Two-phase vote on Podling Releases

Voting on podling releases happens in two phases:

 * First, the podling votes on the release on their dev mailing list. The main goal of this vote is for the podling community
   to practice and learn voting on releases. The vote is successful if there are at least three +1 votes from PPMC members,
   and more +1 than -1 votes from PPMC members.
 * Then, if that first vote is successful, the Incubator PMC holds a vote on the Incubator general mailing list. This is required
   to make the vote an Act of the Foundation, as for all ASF releases.

Report votes from the podling dev list to the Incubator PMC vote in the Incubator PMC [VOTE] message, by explicitly mentioning the podling vote result
and including a link:http://lists.apache.org[lists.apache.org] link to the podling vote tally. This
allows votes from mentors and other Incubator PMC members to be binding in the Incubator PMC vote, without people having to vote twice.

Both the podling and Incubator votes follow the standard link:https://www.apache.org/foundation/voting[ASF voting principles]: they
are majority votes that last at least 72 hours, and if people vote several times only their last vote counts.

== Podling, Top-level Project: what are the differences?

Top-level projects (TLPs) are full-blown ASF projects, each governed by their own link:http://www.apache.org/foundation/governance/pmcs[PMC] and reporting to the ASF's link:https://www.apache.org/foundation/board/[Board of Directors].

Podlings are "TLPs in training". Most of what they do is the same as TLPs, especially as they progress in their incubation journey.

The main differences are:

 * As opposed to PMCs, podlings cannot make formal decisions on the ASF's behalf as they are not formally part of the ASF's structure. They are not mentioned in link:https://www.apache.org/foundation/bylaws[the ASF's bylaws] for example. This means that the Incubator PMC needs to act as a proxy for the podlings to formalize things like ASF releases and make them link:https://blogs.apache.org/foundation/entry/success-at-apache-the-apache1[Acts of the Foundation].
 * As a consequence, a podling has a PPMC (Podling Project Management Committee) which operates like the PMC of a top-level project but needs to delegate a few things, like final votes on ASF Releases, to the Incubator PMC.
 * The decision to elect people as committers or PPMC members, or both, is similar to what TLPs do. A podling can decide that candidates are elected to the PPMC directly, or make them committers first and wait a bit to "promote" them as PPMC members. Committers have no formal decision power, so a two-stage process is often preferred, but it's not a requirement. Read link:https://www.apache.org/foundation/how-it-works.html[How the ASF works] for more information about this.
 * TLPs report to the link:https://www.apache.org/foundation/board/reporting[ASF Board of Directors], whereas podlings report to the  link:https://cwiki.apache.org/confluence/display/INCUBATOR/Reports[Incubator PMC]. Both report monthly initially, then quarterly.
 * Each TLP has a link:https://apache.org/dev/pmc.html[PMC Chair] who acts as a liaison between the TLP and the Board. PMC Chairs are _not_ project leaders. It's an administrative role even though they get a VP title due to the ASF's organizational structure. Podlings do not have this role: incubation mentors are volunteer community members  who act as the liaison between the podling and the Incubator PMC.
 * Podling releases require a two-phase vote as described elsewhere in this cookbook.
 
The ASF strongly encourages projects to grow and renew their roster regularly, to foster project sustainability. Both podlings and TLPs should be actively looking to elect new committers and PMC members by keeping an eye on who's active in their communities.

== Graduation Readiness Assessment

Once the podling community starts feeling ready to graduate, they should make a self-assessment of that readiness.

The link:https://community.apache.org/apache-way/apache-project-maturity-model.html[Maturity Model] maintained by the ASF's Community Development PMC is a good canvas for that and can help the podling community discover things that might have been overlooked during incubation. The Maturity Model page includes links to examples from graduate podlings.

== Graduation discussion

Once the community and its incubation mentors feel that the podling is ready to graduate, based on their readiness self-assessment, a mentor or a member of the PPMC starts a [DISCUSS] thread on the Incubator general email list, proposing graduation and asking the Incubator PMC to review the podling.

It's best to include the graduation resolution in this discussion, to be ready for the vote that follows.

== Transfering Trademarks to the ASF

If the people or organizations that donated the podling code to the ASF own trademarks that the podling needs, they must transfer the trademarks to the ASF before the podling can graduate.

TODO link to details

== Graduation vote

Once the discussion dies down on the graduation proposal, a mentor or a member of the PPMC starts a [VOTE] thread on the Incubator general mailing list, in which Incubator PMC Members cast their votes whether to recommend graduation to the ASF's Board of Directors.

This vote follows the standard link:https://www.apache.org/foundation/voting[ASF voting principles]. It's a majority vote that lasts at least 72 hours, and if people
vote several times only their last vote counts.

== ASF Board Resolution

Once the Incubator PMC votes to graduate a podling, the IPMC sends the Board Resolution that was created for the vote to the ASF's Board of Directors.

The Board currently meets on the third Wednesday of every month and votes on such resolutions during a regular meeting.

The Board vote is effective immediately, although the link:https://www.apache.org/foundation/board/calendar.html[public minutes] of the Board meeting appear later, usually within a month.

== Post-graduation tasks

Once graduated, the podling needs to reflect its new status on the Incubator status pages and make a few changes to its resources and processes.

The link:http://incubator.apache.org/guides/transferring.html[Life after Graduation] guide lists the corresponding tasks.
