= 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 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
 * 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 need to be part of the Incubator PMC, 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

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 do 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 it fosters 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].

Podling 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 the 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 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 every third Wednesday of the 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.
