<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
<!-- $LastChangedRevision$ -->

<!--
 Copyright 2002-2005 The Apache Software Foundation or its licensors, as
 applicable.

 Licensed 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.
-->

<manualpage metafile="module-dict.xml.meta">

  <title>Terms Used to Describe Modules</title>

<summary>
   <p>This document describes the terms that are used to describe
    each Apache <a href="./">module</a>.</p>
</summary>

<section id="Description"><title>Description</title>

<p>A brief description of the purpose of the module.</p>
</section>

<section id="Status"><title>Status</title>

    <p>This indicates how tightly bound into the Apache Web server
    the module is; in other words, you may need to recompile the
    server in order to gain access to the module and its
    functionality. Possible values for this attribute are:</p>

    <dl>
      <dt>MPM</dt>

      <dd>A module with status "MPM" is a <a
      href="../mpm.html">Multi-Processing Module</a>. Unlike the
      other types of modules, Apache must have one and only one MPM
      in use at any time. This type of module is responsible for
      basic request handling and dispatching.</dd>

      <dt>Base</dt>

      <dd>A module labeled as having "Base" status is compiled and
      loaded into the server by default, and is therefore normally
      available unless you have taken steps to remove the module
      from your configuration.</dd>

      <dt>Extension</dt>

      <dd>A module with "Extension" status is not normally compiled
      and loaded into the server. To enable the module and its
      functionality, you may need to change the server build
      configuration files and re-compile Apache.</dd>

      <dt>Experimental</dt>

      <dd>"Experimental" status indicates that the module is
      available as part of the Apache kit, but you are on your own
      if you try to use it. The module is being documented for
      completeness, and is not necessarily supported.</dd>

      <dt>External</dt>

      <dd>Modules which are not included with the base Apache
      distribution ("third-party modules") may use the "External"
      status. We are not responsible for, nor do we support such
      modules.</dd>
    </dl>
</section>

<section id="SourceFile"><title>Source File</title>

    <p>This quite simply lists the name of the source file which
    contains the code for the module. This is also the name used by
    the <directive module="core" type="section">IfModule</directive>
    directive.</p>
</section>

<section id="ModuleIdentifier"><title>Module Identifier</title>

    <p>This is a string which identifies the module for use in the
    <directive module="mod_so">LoadModule</directive> directive when
    dynamically loading modules. In particular, it is the name of
    the external variable of type module in the source file.</p>
</section>

<section id="Compatibility"><title>Compatibility</title>

    <p>If the module was not part of the original Apache version 2
    distribution, the version in which it was introduced should be
    listed here.  In addition, if the module is limited to
    particular platforms, the details will be listed here.</p>
</section>

</manualpage>
