<!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>httpd-cli
 - 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='HTTPD+Project%2C+CLI+subproject%2C+mod_aspdotnet+Codebase+IP+Clearance+Status'><img src="../images/redarrow.gif" />HTTPD Project, CLI subproject, mod_aspdotnet Codebase IP Clearance
Status
</h2>
<div class="section-content">
<p>This page tracks the project status, incubator-wise.
</p>
<p><span class="graduated">The httpd-CLI project graduated on 2004-12-16</span></p>
</div>
        <h2 id='Description'><img src="../images/redarrow.gif" />Description
</h2>
<div class="section-content">
<p>The Apache 2.0 module mod_aspdotnet, and CLI implementation of
Apache.Web.Host, together form a hosting environment for ASP.NET
applications within Microsoft's .NET Framework for Windows, and the
Apache 2.0 httpd server running on Win32.
</p>
<p>This code was developed by William A. Rowe, Jr., Covalent
Technologies, Inc., and is donated to the Apache community as a
starting point for multiple avenues of CLI integration with the
Apache 2.0 httpd server.
</p>
<p>Microsoft, as part of it's .NET patents, asserts ownership of the
implementation of System.Web.Hosting, the framework under which
ASP.NET applications are instantiated. Note that this patent does not
assert the implementation of System.Web.Host, System.Web.Request and
other specific implementations of the server 'container' which
forwards ASP.NET requests to the .NET Framework's implementation of
System.Web.Hosting.
</p>
<p>The initial goal of the PMC is to release this ASP.NET implementation
of ASP.NET for he benefit of Apache httpd Win32 users.
</p>
<p>The second goal of the PMC will be to refactor the Microsoft COM/.NET
CLI thunks which exist in mod_aspdotnet, from the specific
implementation of the ASP.NET-based Apache.Web.Host container.
</p>
<p>Once the CLI thunk is a seperate and distinct component, the next two
goals, may occur in parallel;
</p>
<ul>
        <li>Abstract the Apache httpd request model as it's own CLI
implementation, allowing authors to handle native httpd requests
without the Microsoft specific ASP.NET model.
</li>
      </ul>
<ul>
        <li>Build alternate CLI thunks to other engines such as mono, to allow
CLI code to run on other platforms using the native Apache request
model.
</li>
      </ul>
<p>This goal allows CLI developers, to use tools such as C# to develop
Apache-based solutions using alternate CLI hosting environments such
as mono, without infringing on the claims of Microsoft which may
inhibit ASP.NET-based solutions on non-Windows operating systems.
</p>
</div>
        <h2 id='Project+info'><img src="../images/redarrow.gif" />Project info
</h2>
<div class="section-content">
<ul>
        <li>The Apache httpd PMC owns this httpd CLI subproject, and this
subproject follows the Apache httpd PMC's direction. Significant
contributors to this sub-project (e.g. 6 months of sustained
contribution) will be proposed for Apache httpd PMC membership.
</li>
      </ul>
<ul>
        <li>The CLI sub-project's modules will be available under seperate
downloads, and are not envisioned to become part of a 'stock' httpd
distribution.
</li>
      </ul>
<h3 id='Detailed+References%3A'>Detailed References:
</h3>
<div class="section-content">
<table class="colortable" width="100%">
          <tr>
            <th>item
</th>
            <th>type
</th>
            <th>reference
</th>
          </tr>
          <tr>
            <td>Status file
</td>
            <td>www
</td>
            <td>http://incubator.apache.org/projects/httpd-cli.html
</td>
          </tr>
          <tr>
            <td>Website
</td>
            <td>www
</td>
            <td>To-Do; http://httpd.apache.org/cli/
</td>
          </tr>
          <tr>
            <td>Mailing list
</td>
            <td>dev
</td>
            <td>cli-dev@httpd.apache.org
</td>
          </tr>
          <tr>
            <td>Source code
</td>
            <td>SVN
</td>
            <td>/repos/asf/incubator/httpd/cli/trunk/
</td>
          </tr>
          <tr>
            <td>Mentor
</td>
            <td>wrowe
</td>
            <td>Will Rowe (CLA on file)
</td>
          </tr>
          <tr>
            <td>Committers
</td>
            <td>ridruejo
</td>
            <td>Daniel Lopez (CLA on file)
</td>
          </tr>
          <tr>
            <td>Committers
</td>
            <td>ianh
</td>
            <td>Ian Holsman (CLA on file)
</td>
          </tr>
          <tr>
            <td>Committers
</td>
            <td>jimjag
</td>
            <td>Jim Jagleski (CLA on file)
</td>
          </tr>
          <tr>
            <td>Committers
</td>
            <td>shughes
</td>
            <td>Sterling Hughes (CLA on file)
</td>
          </tr>
          <tr>
            <td>Committers
</td>
            <td>wrowe
</td>
            <td>Will Rowe (CLA on file)
</td>
          </tr>
          <tr>
            <td>Discussion Thread
</td>
            <td>mail
</td>
            <td>Message-Id: &lt;6.0.2.0.2.20040305114405.02b4db60@pop3.rowe-clan.net&gt;
</td>
          </tr>
        </table>
<p>
          <em>Completed tasks are shown by the completion date (YYYY-MM-dd).
</em>
        </p>
</div>
</div>
        <h2 id='Incubation+status+reports'><img src="../images/redarrow.gif" />Incubation status reports
</h2>
<div class="section-content">
<ul>
        <li>19 July 2004
</li>
      </ul>
<p>In March '04, the httpd PMC referred the mod_aspdotnet contribution
(Code Grant ack'ed in rev 1.7 of foundation/grants.txt) for
incubation.
</p>
<p>The project was recently picked back up, with Will Rowe now having
the cycles to devote to the care and feeding required of incubation.
Ian Holsman, also an httpd PMC member, stepped up to co-shepherd the
incubation.
</p>
<p>Invites to the interested parties were sent last week to join the
mailing list cli-dev@httpd.apache.org, followed by an invitation to
the dev@httpd community. The status page/ip incubation template was
created, with Ian managing the site. Will has imported the initial
contribution into SVN (under asf/incubator/httpd/cli/).
</p>
<p>Next steps are documented in status, first posts will be sent to this
list this week. mod_aspdotnet should have an initial release soon,
followed by the refactoring of code to support an Apache.Web model
that is entirely independent of the Microsoft ASP.NET technology,
usable in C# with one of several CLI environments, including mono.
</p>
<p>The cli-dev team would like to thank Noel and Sander for their advise
and handholding through initial mailing list creation, SVN setup, and
general guidance on the incubation process.
</p>
<p>Will Rowe
</p>
<ul>
        <li>30 October 2004
</li>
      </ul>
<p>After soliciting a number of comments from cli-dev testers of the
mod_aspdotnet, and committing their patches to solve various bugs,
the subproject has extracted v2.0.0 release candidate 1 today.
</p>
<p>The installer was migrated to InstallShield X, the only and current
product for authoring .msi files from InstallShield. This, after
experience with converting the Apache 1.3.33 installer, turned out to
be fairly trivial, and the .ism project file did have an xml flavor
that can be tracked in svn.
</p>
<p>Next actions are creating a cli-users@httpd end-user list, declaring
v2.0.0 released, adding the tracking category in bugzilla, and moving
from incubator/httpd/cli to httpd/cli in svn, once graduated.
</p>
<p>Will Rowe
</p>
<ul>
        <li>4 February 2005
</li>
      </ul>
<p>Graduation Report
</p>
<p>December 16th is the date that the httpd-pmc vote was closed, this
sub-project adopted, the repositories and first release moved into
the httpd.apache.org domain, and officially kicked off. This had
included the cli-users@httpd list, cli-dev@httpd list, bugzilla
recordkeeping at issues.apache.org, and http://httpd.apache.org/cli/
home page.
</p>
<p>I would like to especially thank Ian for his extraordinary help,
simply navigating the particularities with the incubator's
infrastructure, and all of the interested users and developers who
have stepped up to this effort. A number of individuals are using
this in production, for their own development, and are coming up with
exciting challenges to overcome in the future.
</p>
<p>My appologies for taking so long to close the incubator pages, and
thank you to the incubation committee for helping promote this work.
</p>
<p>Will Rowe
</p>
</div>
        <h2 id='Incubation+work+items'><img src="../images/redarrow.gif" />Incubation work items
</h2>
<div class="section-content">
<h3 id='Project+Setup'>Project Setup
</h3>
<div class="section-content">
<h4 id='Identify+the+codebase'>Identify the codebase
</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date
</th>
              <th>item
</th>
            </tr>
            <tr>
              <td>2004-07-19
</td>
              <td>If applicable, make sure that any associated 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.
</td>
            </tr>
          </table>
</div>
<h4 id='Copyright'>Copyright
</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date
</th>
              <th>item
</th>
            </tr>
            <tr>
              <td>2004-02-19
</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>2004-02-26
</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>
<h4 id='Verify+distribution+rights'>Verify distribution rights
</h4>
<div class="section-content">
<table class="colortable" width="100%">
            <tr>
              <th>date
</th>
              <th>item
</th>
            </tr>
            <tr>
              <td>2004-07-19
</td>
              <td>Check that all active committers have a signed CLA on record.
</td>
            </tr>
            <tr>
              <td>2004-07-19
</td>
              <td>Remind active committers that they are responsible for ensuring that
a Corporate CLA is recorded if such is is required to authorize their
contributions under their individual CLA.
</td>
            </tr>
            <tr>
              <td>2004-07-19
</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>2004-07-19
</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>
<h4 id='Organizational+acceptance+of+responsibility+for+the+project'>Organizational acceptance of responsibility for the project
</h4>
<div class="section-content">
<ul>
            <li>Has the receiving PMC voted to accept it?
</li>
          </ul>
<p>The Apache httpd project voted and it was adopted on 16 December,
2004.
</p>
</div>
</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>
