<!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" />
  <script src="https://www.apachecon.com/event-images/snippet.js"></script>
        <title>Flex Podling Status Page - Apache Incubator</title>
  
 </head>
 <body>
 <div class="container">
  <div class="row"><div class="span6"><a href="https://www.apache.org/"><img src="http://www.apache.org/img/asf_logo.png" alt="The Apache Software Foundation" border="0" style="margin-top: 2px" height="88"/></a></div>
<div class="span7"><a href="/"><img src="https://incubator.apache.org/images/incubator_feather_egg_logo_sm.png" alt="The Apache Software Foundation Incubator" border="0" style="margin-top: 2px" height="88"/></a></div>
<div class="span2"><a href="https://www.apache.org/foundation/contributing.html"><img src="https://www.apache.org/images/SupportApache-small.png" height="100" width="100"/></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="../cookbook/">Incubator Cookbook</a></li> 
          <li><a href="../policy/incubation.html">Incubation Policy</a></li> 
          <li><a href="../guides/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> 
            </menu>
      <div class="menuheader">Status</div>
    <menu compact="compact">
          <li><a href="../projects">Project List</a></li> 
          <li><a href="../clutch">Clutch Report</a></li> 
          <li><a href="../ip-clearance">IP Clearance</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/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>
    <div id="menuheader">
      <a class="acevent" data-format="square" data-width="135" data-mode="light" data-event="random"></a>
    </div>
   </div>
   
   <div class="span12">
            <h2 id='Flex+Project+Incubation+Status'><img src="../images/redarrow.gif" />Flex Project Incubation Status</h2>
<div class="section-content">
<p>This page tracks the project status, incubator-wise. For more general
         project status, look on the project website.</p>
<p><span class="graduated">The Flex project graduated on 2012-12-19</span></p>
</div>
        <h2 id='Description'><img src="../images/redarrow.gif" />Description</h2>
<div class="section-content">
<p>
      Apache Flex® is a highly productive, open source application framework 
        for building and maintaining expressive web applications that deploy 
        consistently on all major browsers, desktops and devices 
        (including smartphones, tablets and tv)
      </p>
</div>
        <h2 id='News'><img src="../images/redarrow.gif" />News</h2>
<div class="section-content">
<ul>
        <li>2011-12-30 Project enters incubation.</li>
        <li>2012-07-25 Project releases Apache Flex 4.8.0-incubating.</li>
        <li>2012-11-14 Project releases Apache Flex SDK Installer 1.0.9-incubating.</li>
        <li>2012-12-19 Board approves graduation resolution.</li>
      </ul>
</div>
        <h2 id='Project+Website'><img src="../images/redarrow.gif" />Project Website</h2>
<div class="section-content">
<p>The website for Apache Flex is at: <a href="http://incubator.apache.org/flex/">http://incubator.apache.org/flex/</a></p>
<p>The wiki for Apache Flex is at: <a href="https://cwiki.apache.org/confluence/display/FLEX">https://cwiki.apache.org/confluence/display/FLEX</a></p>
<p>The mailing lists <code>flex-dev</code><code>@</code><code>incubator.apache.org</code> and <code>flex-user</code><code>@</code><code>incubator.apache.org</code> have been created and are being
        archived at both Apache and MarkMail.</p>
<table class="colortable" width="100%">
        <tr>
          <th>List</th>
          <th colspan="2">Archives</th>
        </tr>
        <tr>
          <td id="mail-dev"><code>flex-dev</code><code>@</code><code>incubator.apache.org</code></td>
          <td><a href="http://mail-archives.apache.org/mod_mbox/incubator-flex-dev/">Apache</a></td>
          <td><a href="http://markmail.org/search/+list:org.apache.incubator.flex-dev">MarkMail</a></td>
        </tr>
        <tr>
          <td id="mail-user"><code>flex-user</code><code>@</code><code>incubator.apache.org</code></td>
          <td><a href="http://mail-archives.apache.org/mod_mbox/incubator-flex-users/">Apache</a></td>
          <td><a href="http://markmail.org/search/+list:org.apache.incubator.flex-users">MarkMail</a></td>
        </tr>
      </table>
</div>
        <h2 id='Identify+the+project+to+be+incubated'><img src="../images/redarrow.gif" />Identify the project to be incubated</h2>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2012-08-09</td>
              <td>Make sure that the requested project name does not already exist and
                  check www.nameprotect.com to be sure that the name is not already
                trademarked for an existing software product.<br />
              <b>Flex is an existing trademark registered by Adobe.  It was transferred to
              Apache on an "as-is" basis.  There are previously existing uses of Flex in websites
                such as flex.org that remain outside of Apache control.</b></td>
            </tr>
            <tr>
              <td>N/A</td>
              <td>If request from an existing Apache project to adopt an external
                  package, then ask the Apache project for the SVN module and mail
                  address names.</td>
            </tr>
            <tr>
              <td>N/A</td>
              <td>If request from outside Apache to enter an existing Apache project,
                  then post a message to that project for them to decide on acceptance.</td>
            </tr>
            <tr>
              <td>2012-01-03</td>
              <td>If request from anywhere to become a stand-alone PMC, then assess the
                  fit with the ASF, and create the lists and modules under the
                  incubator address/module names if accepted.</td>
            </tr>
          </table>
</div>
        <h2 id='Interim+responsibility'><img src="../images/redarrow.gif" />Interim responsibility</h2>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2012-01-03</td>
              <td>Mentors are:
                <ul>
                  <li>Bertrand Delacretaz (Champion)</li>
                  <li>Greg Reddin</li>
                  <li>Dave Fisher</li>
                  <li>Anne Katherine Petteroe</li>
                </ul>
              </td>
            </tr>
            <tr>
              <td>2012-01-04</td>
              <td>Subscribe all Mentors on the pmc and general lists.</td>
            </tr>
            <tr>
              <td>2012-01-04</td>
              <td>Give all Mentors access to the incubator SVN repository. 
                (to be done by the Incubator PMC chair or an Incubator PMC
                Member wih karma for the authorizations file)</td>
            </tr>
            <tr>
              <td>2012-01-04</td>
              <td>Tell Mentors to track progress in the file 'incubator/projects/flex.html'</td>
            </tr>
          </table>
</div>
        <h2 id='Copyright'><img src="../images/redarrow.gif" />Copyright</h2>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2011-08-22</td>
              <td>Check and make sure that the papers that transfer rights to the ASF
                  been received. It is only necessary to transfer rights for the
                  package, the core code, and any new code produced by the project.
              </td>
            </tr>
            <tr>
              <td>2011-07-20</td>
              <td>Check and make sure that the files that have been donated have been
                  updated to reflect the new ASF copyright.</td>
            </tr>
          </table>
</div>
        <h2 id='Verify+distribution+rights'><img src="../images/redarrow.gif" />Verify distribution rights</h2>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2012-07-20</td>
              <td>Check and make sure that for all code included with the distribution
                  that is not under the Apache license, e have the right to combine
                  with Apache-licensed code and redistribute.
               </td>
            </tr>
            <tr>
              <td>2012-07-20</td>
              <td>Check and make sure that all source code distributed by the project
                  is covered by one or more of the following approved licenses: Apache,
                  BSD, Artistic, MIT/X, MIT/W3C, MPL 1.1, or something with essentially
                  the same terms.</td>
            </tr>
          </table>
</div>
        <h2 id='Establish+a+list+of+active+committers'><img src="../images/redarrow.gif" />Establish a list of active committers</h2>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>Name</th>
              <th>Email (@a.o)</th>
            </tr>
            <tr><td>Alex Harui</td><td>aharui</td></tr>
            <tr><td>Carol Frampton</td><td>cframpton</td></tr>
            <tr><td>Christophe Herreman</td><td>cherreman</td></tr>
            <tr><td>Chuck Mastrandrea</td><td>cmastrandrea</td></tr>
            <tr><td>Erik de Bruin</td><td>erikdebruin</td></tr>
            <tr><td>Espen Skogen</td><td>espenskogen</td></tr>
            <tr><td>Gordon Smith</td><td>gordonsmith</td></tr>
            <tr><td>Igor Costa</td><td>igorcosta</td></tr>
            <tr><td>Iwo Banas</td><td>iwo</td></tr>
            <tr><td>Jeff Tapper</td><td>jeff</td></tr>
            <tr><td>Jeffry Houser</td><td>jhouser</td></tr>
            <tr><td>Jeremy Tellier</td><td>jtellier</td></tr>
            <tr><td>Jonathon Campos</td><td>jonbcampos</td></tr>
            <tr><td>Jun Heider</td><td>junheider</td></tr>
            <tr><td>Justin Mclean</td><td>jmclean</td></tr>
            <tr><td>Kevin Korngut</td><td>kkorngut</td></tr>
            <tr><td>Leif Wells</td><td>leifwells</td></tr>
            <tr><td>Martin Heidegger</td><td>mheidegger</td></tr>
            <tr><td>Michael Jordan</td><td>mijordan</td></tr>
            <tr><td>Michael Labriola</td><td>labriola</td></tr>
            <tr><td>Michael Schmalle</td><td>mschmalle</td></tr>
            <tr><td>Michelle Yaiser</td><td>myaiser</td></tr>
            <tr><td>Nicholas Kwaitkowski</td><td>quetwo</td></tr>
            <tr><td>Omar Gonzalez</td><td>s9tpepper</td></tr>
            <tr><td>OmPrakash Muppirala</td><td>bigosmallm</td></tr>
            <tr><td>Peter Elst</td><td>peterelst</td></tr>
            <tr><td>Peter Ent</td><td>pent</td></tr>
            <tr><td>Rui Silva</td><td>rduartes</td></tr>
            <tr><td>Ryan Frishberg</td><td>frishy</td></tr>
            <tr><td>Sebastian Mohr</td><td>masuland</td></tr>
            <tr><td>Scott Delamater</td><td>sdelamater</td></tr>
            <tr><td>Tink</td><td>tink</td></tr>
            <tr><td>Bertrand Delacretaz</td><td>bdelacretaz</td></tr>
            <tr><td>Dave Fisher</td><td>wave</td></tr>
            <tr><td>Greg Reddin</td><td>greddin</td></tr>
          </table>
</div>
        <h2 id='Infrastructure'><img src="../images/redarrow.gif" />Infrastructure</h2>
<div class="section-content">
<table class="colortable" width="100%">
        <tr>
          <td>Bug tracking</td>
          <td />
          <td id="tracker"><a href="https://issues.apache.org/jira/browse/FLEX">https://issues.apache.org/jira/browse/FLEX</a>
            <p>Note that INFRA-4380 remains unresolved</p></td>
        </tr>
        <tr>
          <td>Source code</td>
          <td>SVN</td>
          <td id="svn"><a href="http://svn.apache.org/repos/asf/incubator/flex">http://svn.apache.org/repos/asf/incubator/flex</a></td>
        </tr>
        <tr>
          <td>Champion and mentors</td>
          <td />
          <td>
                <ul>
                  <li>Bertrand Delacretaz (Champion)</li>
                  <li>Greg Reddin</li>
                  <li>Dave Fisher</li>
                  <li>Anne Katherine Petteroe</li>
                </ul>
          </td>
        </tr>
        <tr>
          <td>Committers</td>
          <td />
          <td><table>
            <tr>
              <th>Name</th>
              <th>Email (@a.o)</th>
            </tr>
            <tr><td>Alex Harui</td><td>aharui</td></tr>
            <tr><td>Carol Frampton</td><td>cframpton</td></tr>
            <tr><td>Christophe Herreman</td><td>cherreman</td></tr>
            <tr><td>Chuck Mastrandrea</td><td>cmastrandrea</td></tr>
            <tr><td>Erik de Bruin</td><td>erikdebruin</td></tr>
            <tr><td>Espen Skogen</td><td>espenskogen</td></tr>
            <tr><td>Gordon Smith</td><td>gordonsmith</td></tr>
            <tr><td>Igor Costa</td><td>igorcosta</td></tr>
            <tr><td>Iwo Banas</td><td>iwo</td></tr>
            <tr><td>Jeff Tapper</td><td>jeff</td></tr>
            <tr><td>Jeffry Houser</td><td>jhouser</td></tr>
            <tr><td>Jeremy Tellier</td><td>jtellier</td></tr>
            <tr><td>Jonathon Campos</td><td>jonbcampos</td></tr>
            <tr><td>Jun Heider</td><td>junheider</td></tr>
            <tr><td>Justin Mclean</td><td>jmclean</td></tr>
            <tr><td>Kevin Korngut</td><td>kkorngut</td></tr>
            <tr><td>Leif Wells</td><td>leifwells</td></tr>
            <tr><td>Martin Heidegger</td><td>mheidegger</td></tr>
            <tr><td>Michael Jordan</td><td>mijordan</td></tr>
            <tr><td>Michael Labriola</td><td>labriola</td></tr>
            <tr><td>Michael Schmalle</td><td>mschmalle</td></tr>
            <tr><td>Michelle Yaiser</td><td>myaiser</td></tr>
            <tr><td>Nicholas Kwaitkowski</td><td>quetwo</td></tr>
            <tr><td>Omar Gonzalez</td><td>s9tpepper</td></tr>
            <tr><td>OmPrakash Muppirala</td><td>bigosmallm</td></tr>
            <tr><td>Peter Elst</td><td>peterelst</td></tr>
            <tr><td>Peter Ent</td><td>pent</td></tr>
            <tr><td>Rui Silva</td><td>rduartes</td></tr>
            <tr><td>Ryan Frishberg</td><td>frishy</td></tr>
            <tr><td>Sebastian Mohr</td><td>masuland</td></tr>
            <tr><td>Scott Delamater</td><td>sdelamater</td></tr>
            <tr><td>Tink</td><td>tink</td></tr>
            <tr><td>Bertrand Delacretaz</td><td>bdelacretaz</td></tr>
            <tr><td>Dave Fisher</td><td>wave</td></tr>
            <tr><td>Greg Reddin</td><td>greddin</td></tr>
          </table></td>
        </tr>
      </table>
</div>
        <h2 id='Incubation+status+reports'><img src="../images/redarrow.gif" />Incubation status reports</h2>
<div class="section-content">
<ul>
        <li>December 2012
          <p><code>
Flex

Apache Flex is an application framework for easily building Flash-based
applications for mobile devices, the browser and desktop.

Date of entry to the Incubator:  December 31, 2011

Top three items to resolve before graduation:
   Flex has their graduation resolution on the agenda for the December board meeting.

Is there anything that the Incubator PMC or ASF Board specifically needs
to address?
   Only the graduation resolution.

Are there any legal, infrastructure, cross-project or personal issues that
need to be addressed? (Are there any stumbling blocks that impede the podling?)
   The Flex community really wants to move from SVN to Git/GitHub.  We are eager to see
   Infra fully support read/write Git repos.

   Also, we are still waiting for INFRA-4380 (import the old Flex JIRA data) to
   be resolved.

Check that the project's Incubation Status file up to date.

  http://incubator.apache.org/projects/flex

What has been done (releases, milestones, etc.) since the last report?
   -We approved 6 new committers
   -We released Apache Flex SDK Installer 1.0.9-incubating.
   -Adobe Systems Inc. donated both the Falcon compiler and the FalconJS
    cross-compiler.
   -Christopher Dutz donated Maven support tools for Flex
   -We voted to graduate.
   -We started work on a next-generation of Flex designed to target browsers
    and devices without Flash.

What are the plans and expectations for the next period?

   -Go through the transition to being a TLP
   -Continue with the next-generation Flex work
   -Release several bug-fixes and new locales in the current Flex code base.

Are there any recommendations for how incubation could run more smoothly
for you?
   No.  We thank you for your support.

Signed off by mentor: Dave Fisher (wave), Greg Reddin (greddin), bdelacretaz, adc
            </code></p>
        </li>
        <li>September 2012
          <p><code>
Flex

Apache Flex is an application framework for easily building Flash-based
applications for mobile devices, the browser and desktop.

Summary: A large community is waiting to see if committer activity will increase
and starting to think about graduating.

Date of entry to the Incubator:  December 31, 2011

Top three items to resolve before graduation:

  - Get better at resolving issues the Apache Way
  - Get more initial committers to commit something
  - Make another release with more non-Adobe involvement

Is there anything that the Incubator PMC or ASF Board specifically needs
to address?

  There was discussion about letting Flex graduate with the requirement that
  one or two mentors remain on the PMC.

Are there any legal, infrastructure, cross-project or personal issues that
need to be addressed? (Are there any stumbling blocks that impede the podling?)

  The issue regarding the import of attachments for existing
  JIRA bugs remains open (INFRA-4380).  It is not critical, but it would be
  nice to get this resolved soon.

  The PPMC has voted to move from SVN to Git.  Having Apache approve read/write
  Git repositories would be helpful.

Check that the project's Incubation Status file up to date.

  http://incubator.apache.org/projects/flex

What has been done (releases, milestones, etc.) since the last report?

  - We released Apache Flex 4.8.0 (incubating).

  - OmPrakash Muppirala and Erik de Bruin were added as a committer and 
    PPMC member due to their work on the installer.  Peter Ent and 
    Gordon Smith from Adobe were also added as committers as they are 
    shepherding large donations from Adobe.

  - Adobe completed the trademark donation.

  - Adobe donated the Text Layout Framework, the rest of the Mustella
    test suite and signed off on the Falcon compiler donation.

  - OmPrakash Muppirala has been leading the development of a tool that
    allows IDEs like Adobe Flash Builder to work better with Apache Flex
    releases.  Justin McLean, Stephen Downs, Roland Zwaga, Tomasz Maciag,
    and Erik de Bruin have also contributed to the tool.

  - We have accepted several patches from the community to address issues
    with our test suite.

  - After much discussion, we voted to move from SVN to Git and employ
    something known as the Git Branching Model.

What are the plans and expectations for the next period?

  - We hope to finalize the release of the installer.

  - Adobe will submit the Falcon compiler source

  - We will get the test suite stable on Mac desktops and then on Windows
    and mobile configurations.  This should remove the last excuse for
    committers who are afraid to make changes without a validation suite

  - We hope to complete the transition from SVN to Git.

Are there any recommendations for how incubation could run more smoothly
for you?

  Our mentors continue to be very helpful.

Signed off by mentor: wave, bdelacretaz, bmargulies
            </code></p>
        </li>
        <li>June 2012&gt;
          <p><code>
Flex

Apache Flex is an application framework for easily building Flash-based
applications for mobile devices, the browser and desktop.

Summary: A large community is losing momentum as it waits for Adobe to
complete the source code transition and infrastructure.

Date of entry to the Incubator:  December 31, 2011

Top three items to resolve before graduation:

  - Resolve trademark donation or licensing
  - Complete code and bug database donation
  - Make at least one release

Is there anything that the Incubator PMC or ASF Board specifically needs
to address?

  The ASF legal team will have to agree to a custom Trademark licensing.
  Adobe submitted an initial proposal for the agreement at the end of May.

Are there any legal, infrastructure, cross-project or personal issues that
need to be addressed? (Are there any stumbling blocks that impede the podling?)

  Besides the trademark issue mentioned previously, the import of existing
  JIRA bugs is blocked by an issue with Apache JIRA's import utility (INFRA-4380).
  We just got news that this should now be resolved, the PPMC is testing
  the results of the import before activating it.

Check that the project's Incubation Status file up to date.

  http://incubator.apache.org/projects/flex

What has been done (releases, milestones, etc.) since the last report?

  - Carol Frampton is the release manager for our first release and has
    prepared some initial release candidates.  We are continuing to refine
    the release candidates to respond to various licensing and policy issues.
  - Christophe Herreman was added as a committer and PPMC member due to his 
    offering patches for issues with the release candidates.
  - OmPrakash Muppirala has been leading the development of a tool that
    allows IDEs like Adobe Flash Builder to work better with Apache Flex
    releases.  Justin McLean, Stephen Downs, Roland Zwaga, and Tomasz Maciag
    have also contributed to the tool.

What are the plans and expectations for the next period?

  Adobe expects to complete the transfer of the mustella test suite.
  We hope to get an initial release approved by IPMC.

Are there any recommendations for how incubation could run more smoothly
for you?

  Our mentors continue to be very helpful.

  See May 2012 report for other concerns related to JIRA and svn imports,
  but as mentioned above it looks like the JIRA import problems are fixed 
  now.

Signed off by mentor: greddin, wave
Shepherd: Matt Franklin
            </code></p>
        </li>
        <li>March 2012
          <p><code>
Flex

Apache Flex is an application framework for easily building Flash-based
applications for mobile devices, the browser and desktop.

Summary: A highly energetic community waits for Adobe to complete the
source code transition and infrastructure.

Date of entry to the Incubator:  December 31, 2011

Top three items to resolve before graduation:

  1. Resolve trademark donation or licensing
  2. Complete code and bug database donation
  3. Make at least one release

Is there anything that the Incubator PMC or ASF Board specifically needs
to address?

  The ASF legal team may have to agree to a custom Trademark licensing.
  Adobe is currently evaluating the parameters of a custom Trademark license
  proposed by an ASF Board member.  If approved, a custom agreement will be
  drafted and signed by both parties.

Are there any legal, infrastructure, cross-project or personal issues that
need to be addressed? (Are there any stumbling blocks that impede the podling?)

  Besides the trademark issue mentioned previously, the import of existing
  JIRA bugs is blocked by an issue with Apache JIRA's import utility. It has
  failed to import the data file supplied by Adobe. Infra is supposed to
  open a support ticket with Atlassian.

Check that the project's Incubation Status file up to date.

  http://incubator.apache.org/projects/flex

What has been done (releases, milestones, etc.) since the last report?

  - An initial set of Flex source (base framework code), including history,
    was checked into the trunk area of the podling’s Subversion repository.
  - Other initial committers have donated code to the whiteboard.
  - Updates to the podling's wiki including a getting started area for
    reference to new project members.
  - Justin Mclean was accepted as committer to the podling.

What are the plans and expectations for the next period?

  Adobe expects to complete the transfer of the bug database. Adobe also
  hopes to contribute the compiler and test suite as well. And there is hope
  for an initial release.

Are there any recommendations for how incubation could run more smoothly
for you?

  Incubation has been working well.  Our mentors are great.

Signed off by mentor: wave, bdelacretaz, greddin
            </code></p>
        </li>
        <li>February 2012
          <p><code>
Flex

Apache Flex is an application framework for easily building Flash-based
applications for mobile devices, the browser and desktop.

Summary: A highly energetic community waits for Adobe to transition code
and infrastructure.

Date of entry to the Incubator:  December 31, 2011

Top four items to resolve before graduation:

  1. Resolve trademark donation or licensing
  2. Complete code and bug database donation
  3. Make at least one release
  4. Add new committers

Is there anything that the Incubator PMC or ASF Board specifically needs
to address?

  The ASF legal team will have to work with Adobe on the Trademark
  licensing issue.  Adobe legal is still drafting the proposal before
  presenting to Apache.

Are there any legal, infrastructure, cross-project or personal issues that
need to be addressed? (Are there any stumbling blocks that impede the podling?)

  Besides the trademark issue mentioned previously, the code donation and
  bug database donation are being slowed by infrastructure issues at both
  Adobe and Apache, mainly the lack of ways to easily transfer multi-GB files.

Check that the project's Incubation Status file up to date.

  http://incubator.apache.org/projects/flex

What has been done (releases, milestones, etc.) since the last report?

  - An initial set of Flex source (minus Subversion history) was checked into
    the whiteboard area of the podling’s Subversion repository.
  - Other initial committers have donated code to the whiteboard.
  - A logo contest was held.  Over 50 entries were submitted.
  - The mailing lists were established.  Over 200 people joined in the
    first 30 days and the traffic averaged over 100 emails a day.  It has
    quieted down now that the logo contest has concluded.

What are the plans and expectations for the next period?

  Adobe expects to complete the transfer of the bug database and the initial
  set of code with history.  Adobe also hopes to contribute the compiler and
  test suite as well.  And there is hope for an initial release.

Are there any recommendations for how incubation could run more smoothly for you?

  Incubation has been working well.  Our mentors are great.

Signed off by mentor: bdelacretaz, wave
            </code></p>
        </li>
      </ul>
</div>
        <h2 id='Collaborative+Development'><img src="../images/redarrow.gif" />Collaborative Development</h2>
<div class="section-content">
<ul>
            <li>Have all of the active long-term volunteers been identified and
              acknowledged as committers on the project?<br /><b>Yes</b>
            </li>
            <li>Are there three or more independent committers? (The legal definition
                of independent is long and boring, but basically it means that there
                is no binding relationship between the individuals, such as a shared
                employer, that is capable of overriding their free will as
                individuals, directly or indirectly.)<br /><b>Yes</b></li>
            <li>Are project decisions being made in public by the committers?<br /><b>Yes</b></li>
            <li>Are the decision-making guidelines published and agreed to by all of
                the committers?<br /><b>Yes</b></li>
          </ul>
</div>
        <h2 id='Licensing+awareness'><img src="../images/redarrow.gif" />Licensing awareness</h2>
<div class="section-content">
<ul>
            <li>Are all licensing, trademark, credit issues being taken care of and
                acknowleged by all committers?<br /><b>Yes</b></li>
          </ul>
</div>
        <h2 id='Exit'><img src="../images/redarrow.gif" />Exit</h2>
<div class="section-content">
<p>
          <em>Things to check for before voting the project out.</em>
        </p>
<h3 id='Organizational+acceptance+of+responsibility+for+the+project'>Organizational acceptance of responsibility for the project</h3>
<div class="section-content">
<ul>
            <li>If graduating to a new PMC, has the board voted to accept it? <b>Yes</b></li>
          </ul>
</div>
<h3 id='Incubator+sign-off'>Incubator sign-off</h3>
<div class="section-content">
<ul>
            <li>Has the Incubator decided that the project has accomplished all of
              the above tasks? <b>Yes</b></li>
          </ul>
</div>
</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-2024 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>
