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

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, as "on the ground" agents to act as liaisons with the various ASF teams: link:http://incubator.apache.org[Incubator PMC], link:https://selfserve.apache.org/[Infrastructure team], etc., and facilitates the podling's growth and operations.

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.

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 what it's 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 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], where former Incubator PMC chair Jukka Zitting presents the Incubator, at 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 the 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.