= The Apache Incubator
Apache Incubator PMC
2002-10-16
:jbake-type: homepage
:jbake-status: published
:idprefix:
:imagesdir: ./images/

== About The Incubator

The Apache Incubator provides services to projects which want to enter the Apache Software Foundation (ASF).

It helps those incoming projects (called "podlings") adopt the Apache link:http://apache.org/theapacheway/[style of governance and operation] and guides them to the ASF services available to our projects so they can become top-level ASF projects ("TLPs").

The Incubator delegates a few mentors for each podling to act as liaisons with the various ASF teams: link:http://incubator.apache.org/whoweare.html#the_incubator_project_management_commitee_pmc[Incubator PMC], link:https://selfserve.apache.org/[Infrastructure team], etc., and facilitate the podling's growth and operations.

=== Incubator History

The Incubator was created link:https://www.apache.org/foundation/records/minutes/2002/board_minutes_2002_10_16.txt[ in 2002].  As of April, 2023 it has helped 335 podlings, of which 239 have graduated. More than 300 mentors have guided and supported podlings. There are between 25 and 50 podlings in incubation at any one time, and incubation typically takes 1 1/2 years.


=== Incubator Cookbook

Our link:http://incubator.apache.org/cookbook/[cookbook] helps potential podlings decide whether the ASF is a good fit for them and guides them through the steps required to become an ASF podling.

=== Incubator Talks

There have been many Incubator talks at many conferences over the years. Here are a few of them.

  * See a keynote link:https://www.youtube.com/watch?v=TQwrH0PlpZg[The Apache Way], by Rich Bowen at MesosCon Europe in 2017 for a  good background of how the ASF operates and what its values are.
  * For guidance on releases see link:https://www.youtube.com/watch?v=I0-lp1t9ee0[How to get your release through the Incubator], presented at ApacheCon North America 2017, and this link:http://training.apache.org/topics/ApacheWay/NavigatingASFIncubator/index.html[slide deck], presented at ApacheCon North America 2019.
  * A more general talk on link:https://www.youtube.com/watch?v=hpAv54KIgK8[Effective open source management] by Shane Curcuru, from ApacheCon North America 2017.
  * For how to get out of the Incubator and become a successful TLP see John D. Ament's talk link:https://www.youtube.com/watch?v=yWurOHvm5WM[Navigating the Incubator Trenches], from ApacheCon North America 2017.
  * link:https://www.youtube.com/watch?v=SCDv2hUgOjU[Apache Incubator: the gateway into the Apache Way] by Roman Shaposhnik and Suresh Marru at ApacheCon North America 2014.
  * See also the link:http://www.youtube.com/watch?v=KopPbWS87fw[Life In The Apache Incubator video], in which former Incubator PMC chair Jukka Zitting presents the Incubator, from ApacheCon Europe 2012.

== About The Apache Software Foundation

The Apache Software Foundation provides organizational, legal, and financial support for a broad range of open source software projects.

The Foundation provides an established framework for intellectual property and financial contributions that simultaneously limits potential legal exposure for the contributors.

Through a collaborative and meritocratic development process known as "link:http://apache.org/theapacheway/[the Apache Way]", Apache projects deliver enterprise-grade, freely-available software products that attract large communities of users.

The pragmatic and business-friendly link:http://apache.org/licenses/LICENSE-2.0[Apache License] makes it easy for all users, commercial and individual, to deploy Apache products. link:http://www.apache.org/foundation/[Learn more about the ASF] as a whole, or engage with the link:https://community.apache.org/[Apache Community Development] project with your general questions about the ASF.
