Apache Provisionr is an effort undergoing incubation at the Apache Software 
Foundation (ASF), sponsored by the Apache Incubator PMC. 

Incubation is required of all newly accepted projects until a further review 
indicates that the infrastructure, communications, and decision making process 
have stabilized in a manner consistent with other successful ASF projects. 

While incubation status is not necessarily a reflection of the completeness 
or stability of the code, it does indicate that the project has yet to be 
fully endorsed by the ASF.

For more information about the incubation status of the Apache Provisionr project you
can go to the following page:

http://incubator.apache.org/projects/provisionr.html
