//Licensed under the Apache License, Version 2.0 (the "License");
//you may not use this file except in compliance with the License.
//You may obtain a copy of the License at
//
//http://www.apache.org/licenses/LICENSE-2.0
//
//Unless required by applicable law or agreed to in writing, software
//distributed under the License is distributed on an "AS IS" BASIS,
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//See the License for the specific language governing permissions and
//limitations under the License.
= Guide to Successful Graduation
Apache Incubator PMC
2002-10-16
:jbake-type: guide
:jbake-status: published
:idprefix:
:toc:
:imagesdir: ../images/

The intent of this document is to help podlings
understand the process of
graduation and to offer some views about how to approach it.
It also links to the Incubator
link:http://incubator.apache.org/incubation/Incubation_Policy.html#Graduating_from_the_Incubator[exit policies].
It is not an inflexible standard but represents a
consensus condensed from previous discussions on the
Incubator general list. It also describes some of
the first steps that should be taken after
graduation.

*This is just a guide. Policy is stated link:/policy/incubation.html[here].*

Help to improve the system by posting a patch for
this document to the Incubator section of JIRA or a
comment to the link:lists.html#general_at_incubator.apache.org[general] list at
Incubator.

== What is Graduation?

Graduation is the act of a podling becoming either a
subproject under an already existing Apache project, or
becoming a top level Apache project. Graduating is a
democratic process: in the end, it comes down to a *link:http://www.apache.org/foundation/voting.html[VOTE]*. Note
that during your stay in the Incubator, you are already busy
with the process of Graduating: by adopting Apache procedures,
growing and fostering your community, having (civil) fights
concerning code style (tabs versus spaces), cutting releases
and so forth. All these acts have an influence on your
project's graduation.

The road to graduation is pretty clear: depending on whether your
project wants to become a top level project or join as a
subproject under an already existing project, the steps are
fairly simple but do take time and effort. This document
provides guidelines for making this process run smoothly.

This document is offered for guidance and education only.
Actual policy is documented in the link:../incubation/Incubation_Policy.html[Incubation PolicyGuide] in 
link:../incubation/Incubation_Policy.html#Graduating_from_the_Incubator[this]
section. Please post any questions about graduation
to the link:lists.html#general_at_incubator.apache.org[general Incubator list].

== Whether to Graduate to Subproject or to Top Level Project

Each proposal has a link:/incubation/Roles_and_Responsibilities.html#Sponsor[Sponsor].
The identity of the Sponsor indicates the natural
destination. For proposals sponsored by the link:/guides/roles_and_responsibilities.html#the_board[Board] or by
the 
link:/guides/roles_and_responsibilities.html#incubator_project_management_committee_ipmc[IncubatorPMC (IPMC)], this is a top level project. For others,
this is as a subproject of the sponsoring project. However, the
destination is fixed only on graduation, not entry. Projects
grow and evolve during the graduation process. As
graduation approaches, this original preference should be
reviewed based on where the project is now.

Graduation as a subproject is only possible if the
subproject still falls within the scope of the sponsoring project and
requires the consent of that project link:http://www.apache.org/foundation/how-it-works.html#structure[PMC].
Graduation as a top level project requires the formation of the new
project by the link:/incubation/Roles_and_Responsibilities.html#board[Board].

The link:/incubation/Roles_and_Responsibilities.html#Incubator_Project_Management_Committee_IPMC[IPMC]
will also express a democratic opinion. For those seeking
to graduate to a subproject this *link:http://www.apache.org/foundation/voting.html[VOTE]*
is to approve the
transfer. For those seeking to graduation as a top level
project, this will be a recommendation to the link:/incubation/Roles_and_Responsibilities.html#board[Board].
Expect IPMC-ers to ask questions about the project
including about the choice of destination. This is part of
the normal process.

== Before You Graduate

Before you start thinking about graduation, you need to make
sure you are ready and meet the requirements imposed on Apache projects.
This section will provide a short list for podlings to
determine if they meet the criteria for asking graduation.

=== Graduation Check List

The following is a short checklist giving an overview, not
a substitute for reading the content below.

* Preparations
** Complete (and sign off) tasks documented in the link:#notes-status[status file]
** Ensure link:#notes-names[suitable names] for project name and product names
** Demonstrate ability to link:#releases[create Apache releases]
** Demonstrate link:#community[community readiness]
** Ensure link:/incubation/Roles_and_Responsibilities.html#Mentor[Mentors] and link:/incubation/Roles_and_Responsibilities.html#Incubator_Project_Management_Committee_IPMC[IPMC] have no link:#notes-issues[remaining issues]
* Decide upon link:#subproject-or-top-level[destination]
* Prepare a link:#tlp-resolution[resolution] *(top level candidates only)*.
* link:#subproject-acceptance[Subproject acceptance *VOTE*] by destination Project *(subproject candidates only)*
* link:/incubation/Roles_and_Responsibilities.html#Incubator_Project_Management_Committee_IPMC[Incubator PMC (IPMC)]:
** For top level candidates, this is a link:#ipmc-top-level-recommendation[recommendation *VOTE*]
** For subproject candidates, this is a link:#subproject-graduation[graduation approval *VOTE*]
* Final link:#notes-on-hand-over[hand-over]
* Consider post graduation link:#project-first-steps[tasks]

=== Checking the Status File

The status file records and summarizes incubation-related
information on the podling. The 
link:ppmc.html#Incubator_ASF_Board_Reports[PPMC] is
responsible for keeping this file current. Before you are
able to graduate, all tasks need to be completed.

The status file is a great way of keeping tabs on how your
project is doing and what needs to be done to meet the
graduation criteria. The link:/incubation/Roles_and_Responsibilities.html#Incubator_Project_Management_Committee_IPMC[Incubator PMC]
will check this
file when they vote on the graduation of your project.
Once all tasks are done and the listed criteria met, your
project may be ready for graduation.

The status file of the JUDDI project is link:http://incubator.apache.org/projects/juddi.html[one example].

== Ensure suitable project name and product names

Please read link:http://www.apache.org/foundation/marks/naming.html[detailed documentation here].
The "Process for ensuring suitable project and product names" is mandatory for every podling which wants to
graduate.

== Creating an Apache Release
[quote,Eric Steven Raymond, http://catb.org/esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html]
____
Release Early, Release Often
____

There are two distinct parts to making releases:

1. "Preparing a release" is something that is done by a release manager. Some documentation
refers to this as "cutting" a release. Preparing a release means following the project-specific
instructions for creating the release artifacts and putting them in a repository that is a
staging area for voting on and subsequently publishing the release.

2. "Publishing a release" is done after the podling and then the IPMC approve the release
that has been prepared, using a formal [VOTE] process. If the vote fails, the release manager
can prepare an improved release. Publishing means that the release artifacts are moved to the
official distribution area.

It is an important step during your stay in the incubator to demonstrate the ability
to prepare and publish an Apache Release. That means the graduating podling:

- Knows the licensing requirements of what code is going into your *source release*
- Knows where to stage the source release
- Knows how to conduct votes on the releases
- Knows how to remove links to old releases from its website

Please read the link:releasemanagement.html[Incubator Release Management Guide] for hints, tips and guidelines
for making a release that will get approved by the
link:/incubation/Roles_and_Responsibilities.html#Incubator_Project_Management_Committee_IPMC[IPMC] without problems.

== Creating an Open and Diverse community

A major criterion for graduation is to have developed an
open and diverse link:http://www.apache.org/foundation/glossary.html#Meritocracy[meritocratic]
community. Time has demonstrated that these kinds of
communities are more robust and productive than more
closed ones.

Apache projects are self-sustaining and self-governing
communities. Long term success and health require that
these communities understand how to:

- recruit users, developers, committers and PMCers
- take responsible collective action
- disagree in public on technical matters without destroying personal relationships
- create an open, positive and inclusive atmosphere on the mailing lists

Graduation tests whether (in the opinion of the link:/incubation/Roles_and_Responsibilities.html#Incubator_Project_Management_Committee_IPMC[IPMC])
a podling has learned enough and is responsible enough to
sustain itself as such a community.

Read more on how to successfully build an open and diverse
community for your podling in the link:community.html[community guide].

As a project grows, it needs to renew itself by accepting
new committers. A project needs to learn how it can
recruit new developers and committers into the community.
Accepting new committers usually increases the diversity
of the project. So, this process is very beneficial. link:community.html[Community building] requires
energy which could have been spent on code development, but
this cost is an important investment for the future of the
project.

The openness of the community is not only measured by the
number of contributors. Open and respectful discussions on
the mailing lists are vital. Ways to resolve technical
conflict without destroying personal relationships must be
learned. Learning to use mailing lists effectively is very
important. If this can be achieved, then you have shown to
be a lively, active and successful community. The future
looks bright.

The project is considered to have a diverse community when
it is not highly dependent on any single contributor
(there are at least three legally independent committers and
there is no single company or entity that is vital to the
success of the project). Basically this means that when a
project mostly consists of contributors from one company,
this is a sign of not being diverse enough. You can
mitigate this requirement by admitting more external
contributors to your project who have no tie to the
single entity.

Growing an open and diverse meritocratic community is not
something that just happens: it takes work. Read the link:community.html[building a community guide] for
guidelines, hints and tips on how you can accomplish this
for your project.

=== Other Issues

The Incubator relies more on people than rules: rather
than try to create rules to cover every circumstance,
rules are developed and codified as required. People
are trusted to evolve process and policy. This guide
can only document the most common issues and it is
possible that there are other concerns that may require
resolution that are not covered.

Podlings that are unsure if they are ready to graduate may want to consider completing the link:http://community.apache.org/apache-way/apache-project-maturity-model.html[Apache Project Maturity Model].  You may find this to be a useful guide when looking at various factors in your podling's community.

== The Graduation Process

=== Graduating to a Top Level Project

Top level projects are created by the
link:/incubation/Roles_and_Responsibilities.html#board[Board]. The
link:/incubation/Roles_and_Responsibilities.html#Incubator_Project_Management_Committee_IPMC[Incubator Project Management Committee (IPMC)] can therefore only
recommend to the Board that the project is ready to
graduate to a top level project.

Graduation to a top level project requires:

- a charter for your project
- a positive community graduation *link:http://www.apache.org/foundation/voting.html[VOTE]*
- a positive IPMC recommendation *link:http://www.apache.org/foundation/voting.html[VOTE]*
- the acceptance of the link:#tlp-resolution[resolution] by the Board

This process can take a while, since it typically sparks
some discussion inside the community and possibly in the
IPMC.

Here's an estimated timeline for the graduation process.
It should help you understand when you should start
ramping up your community to get timely graduation and
make the process smooth.

image:/images/graduation-timeline.png[Graduation timeline]

For each event we scheduled one or two weeks. Even though
a *link:http://www.apache.org/foundation/voting.html[VOTE]*
is usually limited to 72 hours, you should prepare
for discussion and possibly having to cast a revote with a
revised proposal.

=== Community Graduation Vote

A community needs to be willing to govern itself
before it can become a top level project. A good way
to demonstrate this is through a free *link:http://www.apache.org/foundation/voting.html[VOTE]* (by the
community) on the graduation proposal.

This *VOTE* is not a requirement but is recommended. It
is unlikely that link:/incubation/Roles_and_Responsibilities.html#Incubator_Project_Management_Committee_IPMC[IPMC]members 
will vote to approve graduation unless the link:/incubation/Roles_and_Responsibilities.html#Mentor[Mentors]
and community positively express their readiness for
graduation. It is wise to notify the 
link:lists.html#general_at_incubator.apache.org[incubator general list] that the community vote is starting. Please do not CC the
vote to the general list as that creates confusion. Instead you can either:
- FWD the [VOTE] e-mail to the general list, or
- Send a different copy to the general list indicating that a graduation community [VOTE] is in progress 

=== Preparing a Charter

So, in this case a suitable 
link:/incubation/Roles_and_Responsibilities.html#board[Board] resolution should be
drawn up by the community advised by the
link:/incubation/Roles_and_Responsibilities.html#Mentor[Mentors].
Committers can access the podling template for
resolutions in the 
link:https://svn.apache.org/repos/private/committers/board/templates/podling-tlp-resolution.txt[committers svn repository].  Your link:https://whimsy.apache.org/roster/ppmc/[whimsy roster] also includes a feature to draft a resolution.  Also, resolutions are included in the Board minutes, which are posted publicly
link:http://www.apache.org/foundation/board/calendar.html[here ] . These contain numerous examples.

The original proposal and the status document should
be consulted when creating this document. Projects
evolve over time and some deviation from the original
proposal may well prove acceptable. The 
link:/incubation/Roles_and_Responsibilities.html#board[Board]
resolution is the ultimate definition of the scope of
an Apache project. So it is important that it
reflects the vision for the project as it appears on
the eve of graduation.

A good resolution is neither too narrow nor too broad.
If the project's scope is too narrow, then its
activities will be unnecessarily constrained. If a
project's scope is too broad then it may lack focus
and suffer from governance issues.

If you read these resolutions you also see that you
need to appoint a link:http://www.apache.org/foundation/glossary.html#Chair[Chair]
for your project. It is up to the
link:ppmc.html[PPMC] to choose one
person to act as the chair after graduation.

=== The Recommendation Vote

The link:#tlp-resolution[resolution] should be proposed on the general
link:mailto:general@incubator.apache.org[incubator list] before a *link:http://www.apache.org/foundation/voting.html[VOTE]*
is started to allow feedback. Once a consensus has been reached, a *VOTE*
should be started on the same general Incubator list by a member of the link:ppmc.html[PPMC] proposing
that the
link:/incubation/Roles_and_Responsibilities.html#Incubator_Project_Management_Committee_IPMC[IPMC]
recommends the resolution to the link:/incubation/Roles_and_Responsibilities.html#board[Board].

=== Submission of the Resolution to the Board

Top level projects are created by a link:#tlp-resolution[resolution] by the
link:/guides/roles_and_responsibilities.html#the_board[Board].
Once the link:#tlp-resolution[resolution] has been
finalized and consensus reached, it should be
submitted to the Board. For inclusion in the agenda
for the next meeting, the resolution should be
submitted at least 72 hours before that meeting. A
calendar for meetings is link:http://www.apache.org/foundation/board/calendar.html[available].

Business for the link:/guides/roles_and_responsibilities.html#the_board[Board] should be submitted
using the link:https://whimsy.apache.org/board/agenda/[Whimsy Board Agenda] tool.

Use the 'add item' button on bottom of the page and choose 'Establish Project'.
The template requires the project name (without the 'Apache' prefix) plus a brief description of the
project. When entering the proposed PMC members, add the proposed PMC chair first.

When you submit the resolution data, you will be presented with the text of the board resolution
which can be edited to fix any issues before you finalize the submission.

Please try to keep the *board* list traffic low. Do not
submit reminders or ask whether messages have been
received on the list. link:http://www.apache.org/foundation/members.html[Apache Members] have access to the link:/incubation/Roles_and_Responsibilities.html#board[Board]
archives and may
observe Board meetings. To follow the progress of a
resolution, please ask a friendly Mentor, Member or
link:http://www.apache.org/foundation/board/[Director].

=== Press Releases for new TLPs

Once there is clear consensus that the recommendation will happen,
a member of the PPMC should contact ASF Marketing &amp; Publicity at
*press(at)apache(dot)org* if your project is interested in a
formal press release announcing your graduation.  This should be done
roughly at the same time that the board resolution is sent.

== Graduating to a Subproject

Subprojects are accepted by a Project Management
Committee. The link:/incubation/Roles_and_Responsibilities.html#Incubator_Project_Management_Committee_IPMC[Incubator Project Management Committee]
needs to approve the graduation of the podling to a
subproject.

=== Community Graduation Vote

Becoming a subproject is a voluntary process, and should be accepted by the community becoming a sub-project.  It should be clear to the PPMC and committers for the podling what the make up of the new sub-project should be, e.g. who belongs on the receiving PMC, who will be a committer.  Due to this nature, it is important that the podling votes to become a sub-project.  This vote should happen on a public dev list.

=== Subproject Acceptance Vote

A formal *link:http://www.apache.org/foundation/voting.html[VOTE]*
by the Project link:http://www.apache.org/foundation/how-it-works.html#structure[PMC]
to accept the podling as a subproject is a
prerequisite. Sometimes, projects may feel that the
podling has grown too big and would be better as a
top level project. The Chair of the project is the
right contact.

=== Graduation Approval Vote

Once the accepting TLP has voted to accept the podling and the podling has voted to become a subproject, notice should be sent to the IPMC via `general AT incubator.a.o` email list indicating that the podling will become a subproject.  If after 72 hours no issues are raised, the podling may be considered a subproject of the accepting TLP.  Likewise, if any IPMC member raises an issue, that should be discussed.  If the issue is addressed, the member raising the issue should indicate they rescind their concerns or otherwise consider them resolved.

=== Final steps

Please read the link:/guides/transferring.html[Guide to Transferring Resources out of the Incubator]
