<!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>JW PLayer SQE Intellectual Property (IP) Clearance Status - 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='JW+Player+SQE+Intellectual+Property+%28IP%29+Clearance+Status'><img src="../images/redarrow.gif" />JW PLayer SQE Intellectual Property (IP) Clearance Status</h2>
<div class="section-content">
</div>
        <h2 id='Description'><img src="../images/redarrow.gif" />Description</h2>
<div class="section-content">
<p>SQE is a query engine written using Storm's Trident framework that takes a set of SQL-like commands, including queries, and runs them against one or more input streams.</p>
</div>
        <h2 id='Project+info'><img src="../images/redarrow.gif" />Project info</h2>
<div class="section-content">
<ul>
        <li>The Apache Storm PMC will be responsible for the code</li>
      </ul>
<ul>
        <li>This contribution will be placed in the "external" directory of the Apache Storm repository</li>
      </ul>
<ul>
        <li>Officer or member managing donation: P. Taylor Goetz (ptgoetz@apache.org)</li>
      </ul>
<p>
        <em>Completed tasks are shown by the completion date (YYYY-MM-dd).</em>
      </p>
<h3 id='Identify+the+codebase'>Identify the codebase</h3>
<div class="section-content">
<table class="colortable" width="100%">
          <tr>
            <th>date</th>
            <th>item</th>
          </tr>
          <tr>
            <td>2016-09-20</td>
            <td>The source code can be found at <a href="https://github.com/jwplayer/SQE">https://github.com/jwplayer/SQE (including wiki content)</a>
            with the following git commit SHA: 68dbbde1117a043a7bded73d89d3d82238715a4b</td>
          </tr>
          <tr>
            <td>2016-09-20</td>
            <td>If applicable, make sure that any associated name does not
                already exist and is not already trademarked for an existing software
                product.</td>
          </tr>
        </table>
<p>
Git commit SHA for donated software:  (68dbbde1117a043a7bded73d89d3d82238715a4b).
        </p>
<h4 id='Copyright'>Copyright</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2016-09-20</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>....-..-..</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>
<p>
Identify name recorded for software grant: <em>grants.txt: Grant from JWPlayer for SQE, file: jwplayer-sqe.pdf</em>
          </p>
</div>
<h4 id='Verify+distribution+rights'>Verify distribution rights</h4>
<div class="section-content">
<p>
Corporations and individuals holding existing distribution rights:
            </p>
<ul>
    <li>Longtail Ad Solutions, Inc. dba JWPlayer</li>
            </ul>
<table class="colortable" width="100%">
            <tr>
              <th>date</th>
              <th>item</th>
            </tr>
            <tr>
              <td>2016-09-20</td>
              <td>Check that all active committers have a signed CLA on
                  record.</td>
            </tr>
            <tr>
              <td>2016-09-20</td>
              <td>Remind active committers that they are responsible for
                  ensuring that a Corporate CLA is recorded if such is
                  required to authorize their contributions under their
                  individual CLA.</td>
            </tr>
            <tr>
              <td>2016-09-20</td>
              <td>Check and make sure that for all items included with the
                  distribution that is not under the Apache license, we have
                  the right to combine with Apache-licensed code and
                  redistribute.</td>
            </tr>
            <tr>
              <td>2016-09-20</td>
              <td>Check and make sure that all items depended upon 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>
<p>Generally, the result of checking off these items will be a
             Software Grant, CLA, and Corporate CLA for ASF licensed code,
             which must have no dependencies upon items whose licenses that
             are incompatible with the Apache License.</p>
</div>
</div>
<h3 id='Organizational+acceptance+of+responsibility+for+the+project'>Organizational acceptance of responsibility for the project
</h3>
<div class="section-content">
<p>
Related VOTEs:
        </p>
<ul>
          <li><em>Vote thread on dev@: <a href="http://mail-archives.apache.org/mod_mbox/storm-dev/201609.mbox/%3cA121FA30-E55F-4885-9D99-2670927469B9@gmail.com%3e">http://mail-archives.apache.org/mod_mbox/storm-dev/201609.mbox/%3cA121FA30-E55F-4885-9D99-2670927469B9@gmail.com%3e</a></em></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>
