= 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 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

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.
