<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you 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. 
-->
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link rel="stylesheet" href="../style/bootstrap-1-3-0-min.css" type="text/css" />
  <link rel="stylesheet" href="../style/style.css" type="text/css" />
    <link rel="alternate" title="general@incubator.apache.org Archives" type="application/atom+xml" href="http://mail-archives.apache.org/mod_mbox/incubator-general/?format=atom" />
    <title>Incubator Branding Guide - Apache Incubator</title>
  
 </head>
 <body>
 <div class="container">
  <div class="row">
<div class="span12">
  <a href="http://www.apache.org/"><img src="http://incubator.apache.org/images/asf_logo_wide_small.png" alt="The Apache Software Foundation" border="0" style="margin-top: 2px" width="62%"/></a>
</div>
<div class="span4">
<a href="http://incubator.apache.org/"><img src="../images/egg-logo2.png" alt="Apache Incubator" border="0"/></a>
</div>
</div>
  <div class="row"><div class="span16"><hr noshade="noshade" size="1"/></div></div>
  
  <div class="row">
   <div class="span4">
    <form action="http://www.google.com/search" method="get">
     <input value="incubator.apache.org" name="sitesearch" type="hidden"/>
     <input size="20" name="q" id="query" type="text" value="search..."
      onclick="if(this.value == 'search...') {this.value = ''}"/>
     <input name="Search" value="Go" type="submit"/>
    </form>
          <div class="menuheader">General</div>
    <menu compact="compact">
          <li><a href="../index.html">Welcome</a></li> 
          <li><a href="../incubation/Process_Description.html">Incubation Overview</a></li> 
          <li><a href="../incubation/Incubation_Policy.html">Incubation Policy</a></li> 
          <li><a href="../guides/index.html">Incubation Guides</a></li> 
          <li><a href="../incubation/Roles_and_Responsibilities.html">Roles and Responsibilities</a></li> 
          <li><a href="../faq.html">General FAQ</a></li> 
          <li><a href="http://wiki.apache.org/incubator">Incubator Wiki</a></li> 
          <li><a href="../whoweare.html">Who We Are</a></li> 
          <li><a href="../sitemap.html">Site Map</a></li> 
            </menu>
      <div class="menuheader">Status</div>
    <menu compact="compact">
          <li><a href="../projects/index.html">Project List</a></li> 
          <li><a href="../clutch.html">Clutch Report</a></li> 
          <li><a href="../ip-clearance/index.html">IP Clearance</a></li> 
          <li><a href="../history/index.html">Incubator History</a></li> 
            </menu>
      <div class="menuheader">Entry Guides</div>
    <menu compact="compact">
          <li><a href="../guides/proposal.html">Proposal Guide</a></li> 
            </menu>
      <div class="menuheader">Podling Guides</div>
    <menu compact="compact">
          <li><a href="../guides/committer.html">Podling Committers</a></li> 
          <li><a href="../guides/ppmc.html">Podling PMC (PPMC)</a></li> 
          <li><a href="../guides/mentor.html">Podling Mentor</a></li> 
          <li><a href="../guides/releasemanagement.html">Podling Releases</a></li> 
          <li><a href="../guides/branding.html">Podling Branding/Publicity</a></li> 
          <li><a href="../guides/sites.html">Podling Websites</a></li> 
          <li><a href="../guides/graduation.html">Graduation</a></li> 
          <li><a href="../guides/retirement.html">Retirement</a></li> 
            </menu>
      <div class="menuheader">Other Guides</div>
    <menu compact="compact">
          <li><a href="../guides/participation.html">Participation</a></li> 
          <li><a href="../faq.html">General FAQ</a></li> 
          <li><a href="../guides/pmc.html">Incubator PMC (IPMC)</a></li> 
          <li><a href="../guides/chair.html">IPMC Chair</a></li> 
          <li><a href="../guides/lists.html">Mailing Lists</a></li> 
          <li><a href="../guides/website.html">Incubator Website</a></li> 
            </menu>
      <div class="menuheader">ASF</div>
    <menu compact="compact">
          <li><a href="http://www.apache.org/foundation/how-it-works.html">How Apache Works</a></li> 
          <li><a href="http://www.apache.org/dev/">Developer Documentation</a></li> 
          <li><a href="http://www.apache.org/foundation/">Foundation</a></li> 
          <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsor Apache</a></li> 
          <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li> 
            </menu>
    <!-- start Ads Server -->
    <iframe src="http://www.apache.org/ads/buttonbar.html"
     style="border-width:0; float: left" frameborder="0" scrolling="no"
     width="135" height="265"></iframe>
    <!-- end Ads Server -->
   </div>
   
   <div class="span12">
            <h2 id='purpose'><img src="../images/redarrow.gif" />Purpose of this document</h2>
<div class="section-content">
<p>Podlings are, by definition, not yet fully accepted as part of the
  Apache Software Foundation. Therefore, they are subject to additional
  branding constraints, on top of the
  <a href="http://www.apache.org/foundation/marks/responsibility">branding
  guidelines for top-level projects</a>.</p>
</div>
        <h2 id='incubation-process'><img src="../images/redarrow.gif" />Publicity throughout the Incubation Process</h2>
<div class="section-content">
<p>There are three stages in a podling's life-cycle that have an impact
  on the types of publicity seeking that are permitted.  We refer to
  "publicity seeking" as issuing press releases or otherwise affirmatively
  seeking publicity (seeding news stories, etc.).</p>
<p><b>Podling is in proposal/or pre-code-drop process</b>: No publicity
  seeking is permitted.  A podling is not allowed to be called <i>Apache
  "Podling-Name"</i> name until the podling is officially in
  Incubation, public mailing lists are announced, and code has been
  submitted into our repositories.</p>
<p><b>Podling has been approved for incubation, podling has launched
  public mailing lists, and podling has dropped code into
  repository</b>: A podling <b>MUST</b> now be called <i>Apache
  "Podling-Name"</i> (see <a href="#Naming">Naming</a> below).
  A podling and affiliated persons can issue press releases that
  reference the podling, but cannot issue press releases with the
  specific intent of announcing the Podling.  Podling can conduct
  informal pr activities, such as media outreach, blog publicity, etc. 
  The ASF will not issue any press releases for any podling at this
  stage.  However, the 
  <a href="http://www.apache.org/press/index.html#whoweare">Apache Press Team</a>
  <b>MUST</b> review any releases by affiliated 
  organizations or groups to ensure they comply with these branding 
  guidelines.</p>
<p><b>Podling has graduated from the Incubator</b>: The Apache Public
  Relations Committee is willing to issue formal press releases for all
  podlings who successfully graduate from the Incubator and are
  interested in issuing a press release.  Or, the ASF may enter into a
  joint press release with any other affiliated organizations or groups.</p>
</div>
        <h2 id='Naming'><img src="../images/redarrow.gif" />Naming</h2>
<div class="section-content">
<p>After a podling has been approved, the lists are created, and the initial
     code drop has commenced, the podling <b>MUST</b> be referred to as <i>Apache
     "Podling-Name"</i> <b>AND</b> mention that the project is
     under Incubation.  Suitable mentions include:</p>
<ul>
      <li>Inclusion of the http://"podling-name".incubator.apache.org/
          URL</li>
      <li><i>Apache "Podling-Name"</i> is currently undergoing
      Incubation at the Apache Software Foundation.</li>
      </ul>
<p>Other references may only be used upon prior approval by the
     Incubator PMC.  These statements only need to be disclosed upon the
     first reference in a document.</p>
</div>
        <h2 id='disclaimers'><img src="../images/redarrow.gif" />Disclaimers</h2>
<div class="section-content">
<p>Podling web sites MUST include a clear disclaimer on their
    website and in all documentation (including releases) stating that
    they are in incubation. Podlings SHOULD use the following text for
    all disclaimers (replace the underlined phrases as appropriate):</p>
<blockquote>Apache <i><u>Podling-Name</u></i> is an effort
    undergoing incubation at The Apache Software Foundation (ASF),
    sponsored by the <i><u>name of Apache TLP sponsor</u></i>. 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.</blockquote>
<p>Podlings wishing to use a different disclaimer message MUST have the
    disclaimer approved by the Incubator PMC prior to use.</p>
<p>For releases, the text SHOULD be included in a separate DISCLAIMER file
    stored alongside the NOTICE and LICENSE files.</p>
</div>
        <h2 id='logos'><img src="../images/redarrow.gif" />Incubator Logo</h2>
<div class="section-content">
<p>Podlings websites SHOULD contain the Apache Incubator Project
  logo as sign of affiliation.</p>
</div>
        <h2 id='activities'><img src="../images/redarrow.gif" />Publicity activities</h2>
<div class="section-content">
<p>Podlings MUST coordinate with the Apache Public Relations Committee on
  all publicity activities by a podling.</p>
<p>
  The open source space can be difficult
  to negotiate even for experienced professionals. The Apache Public Relations
  Committee understands this space and it is in the best interests of all
  that they are consulted.</p>
</div>
        <h2 id='unapproved'><img src="../images/redarrow.gif" />Response to Unapproved Statements</h2>
<div class="section-content">
<p>The Apache Public Relations Committee SHALL affirmatively and publicly
  respond to any unapproved statements surrounding podlings which are factually 
  incorrect.</p>
</div>
        <h2 id='termination'><img src="../images/redarrow.gif" />Termination</h2>
<div class="section-content">
<p>The Incubator PMC MAY consider the termination of a project for
  violation of these branding guidelines.</p>
</div>
       </div>
   </div>
  
   <div class="row"><div class="span16"><hr noshade="noshade" size="1"/></div></div>
  <div class="row">
   <div class="span16 footer">
     Copyright &#169; 2009-2016 The Apache Software Foundation<br />
     Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.<br/>
     Apache Incubator, Apache, the Apache feather logo, and the Apache Incubator project logo are trademarks of The Apache Software Foundation.
     
     
    </div>
  </div>
 </div> 
 </body>
</html>
