= 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], is meant to provide all the essential information that you need to incubate a project at the ASF.

It is meant to be *the* central point for all questions related to incubation, providing an overview of the incubation goals and process, and linking 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.

The style that we expect here is short explanations with links to the details as needed, written in a friendly and helpful tone.

Feedback about this is welcome, either on the link:++https://lists.apache.org/list.html?general@incubator.apache.org++[general@incubator.a.o] mailing list
or in the link:https://issues.apache.org/jira/browse/INCUBATOR-234[INCUBATOR-234] ticket.  Pull requests to this repository are also welcome.

== 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 The Apache Way, a set of principles and best practices that are described link:http://www.apache.org/theapacheway/index.html[on the Foundation's website]. 

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 a potentially much broader reach, due to the ASF's independence and emphasis on project sustainability.

Assuming your project fits this mindset, the acceptance of your project is not linked 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 it. 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.

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
 * Setup 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 the release process
 * When 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 top-level project.
 
Described above is the "happy case", things might happen in a slightly different order, but it gives an overview of the typical incubation process.

These steps are described in more detail below.

== 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 for all phases that lead to graduation as a top-level project.

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

== Incubation proposal discussion

Once the proposal is ready, the podling representatives send it to the general@incubator.a.o list for discussions, 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 lasts for a few days until the discussion dies down once 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's held on the Incubator mailing 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.

TODO link to detailed instructions, do we have an up-to-date JIRA template for that?

== Publicity and Announcements

Publicity is _not_ permitted 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 is an essential part of the ASF's governance, as it fosters project durability.

== Podling Releases

A podling is expected to make several software releases during incubation, that gradually progress towards being fully conformant to the link:http://www.apache.org/legal/release-policy.html[ASF Release Policy].

In addition to following that policy, podling releases must include the word "incubating" in any release file names and a link:https://incubator.apache.org/policy/incubation.html#disclaimers[DISCLAIMER] to avoid any confusion as to the project's status. As podlings are not "real" ASFprojects yet, it is crucial to set expectations right.

Also, voting on podling releases happens in two phases:

 * First, the podling votes on the release on their dev mailing list, with PPMC members votes being "binding" and others being welcome to cast consultative votes. The main goal of this vote is for the podling community to practice and learn how to vote on releases.
 * Then, if that first vote is successful, an Incubator PMC vote is held on the Incubator general mailing list. This vote is required to make the release an Act of the Foundation.
 
Incubation mentors can optionally indicate that their votes in the first phase can be carried on to the Incubator PMC vote. If three mentors have voted this means the "three +1 votes" requirement is already fulfilled when that second vote starts, which can speed up things.

== 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", and 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 TLPs. A podling can decide that candidates are elected to the PPMC directly, or make them committers first and wait a bit to "promote" the as PPMC members. Committers, on the other hand, 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 link:https://www.apache.org/foundation/board/reporting[to the ASF Board of Directors], whereas podlings report link:https://cwiki.apache.org/confluence/display/INCUBATOR/Reports[to the 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 organization. Podlings do not have this role, incubation mentors are volunteer community members act as the liaison between the podling and the Incubator PMC.
 
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 [DISCUSS] thread is started on the Incubator general mailing 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 who donated the podling code to the ASF own trademarks that the podling needs, they must be
transferred to the ASF before graduation.

TODO link to details

== Graduation vote

Once the discussion dies down on the graduation proposal, a [VOTE] is started on the Incubator general mailing list, in which Incubator PMC Members cast their votes to accept recommending 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.

== ASF Board Resolution

Once the Incubator PMC votes to graduate the podling, it 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.

The Board vote is effective immediately, although the link:https://www.apache.org/foundation/board/calendar.html[public minutes] of the Board meeting are published 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.
