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

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

<manualpage metafile="dso.xml.meta">

  <title>Dynamic Shared Object (DSO) Support</title>

  <summary>
    <p>The Apache HTTP Server is a modular program where the
    administrator can choose the functionality to include in the
    server by selecting a set of modules.
    Modules will be compiled as Dynamic Shared Objects (DSOs)
    that exist separately from the main <program>httpd</program>
    binary file. DSO modules may be compiled at the time the server
    is built, or they may be compiled and added at a later time
    using the Apache Extension Tool (<program>apxs</program>).</p>
    <p>Alternatively, the modules can be statically compiled into
    the <program>httpd</program> binary when the server is built.</p>

    <p>This document describes how to use DSO modules as well as
    the theory behind their use.</p>
  </summary>


<section id="implementation"><title>Implementation</title>

<related>
<modulelist>
<module>mod_so</module>
</modulelist>
<directivelist>
<directive module="mod_so">LoadModule</directive>
</directivelist>
</related>

    <p>The DSO support for loading individual Apache httpd modules is based
    on a module named <module>mod_so</module> which must be statically
    compiled into the Apache httpd core. It is the only module besides
    <module>core</module> which cannot be put into a DSO
    itself. Practically all other distributed Apache httpd modules will then
    be placed into a DSO. After a module is compiled into a DSO named
    <code>mod_foo.so</code> you can use <module>mod_so</module>'s <directive
    module="mod_so">LoadModule</directive> directive in your
    <code>httpd.conf</code> file to load this module at server startup
    or restart.</p>
    <p>The DSO builds for individual modules can be disabled via
    <program>configure</program>'s <code>--enable-mods-static</code>
    option as discussed in the <a href="install.html">install
    documentation</a>.</p>

    <p>To simplify this creation of DSO files for Apache httpd modules
    (especially for third-party modules) a support program
    named <program>apxs</program> (<dfn>APache
    eXtenSion</dfn>) is available. It can be used to build DSO based
    modules <em>outside of</em> the Apache httpd source tree. The idea is
    simple: When installing Apache HTTP Server the <program>configure</program>'s
    <code>make install</code> procedure installs the Apache httpd C
    header files and puts the platform-dependent compiler and
    linker flags for building DSO files into the <program>apxs</program>
    program. This way the user can use <program>apxs</program> to compile
    his Apache httpd module sources without the Apache httpd distribution
    source tree and without having to fiddle with the
    platform-dependent compiler and linker flags for DSO
    support.</p>
</section>

<section id="usage"><title>Usage Summary</title>

    <p>To give you an overview of the DSO features of Apache HTTP Server 2.x,
    here is a short and concise summary:</p>

    <ol>
      <li>
        <p>Build and install a <em>distributed</em> Apache httpd module, say
        <code>mod_foo.c</code>, into its own DSO
        <code>mod_foo.so</code>:</p>

<example>
$ ./configure --prefix=/path/to/install --enable-foo<br />
$ make install
</example>
      </li>

      <li>
      <p>Configure Apache HTTP Server with all modules enabled, and loaded
      as shared objects. You can then remove individual ones by
      commenting out the <directive
      module="mod_so">LoadModule</directive> directives in
      <code>httpd.conf</code>.</p>

<example>
$ ./configure --enable-mods-shared=all<br />
$ make install
</example>
      </li>

      <li>
        Build and install a <em>third-party</em> Apache httpd module, say
        <code>mod_foo.c</code>, into its own DSO
        <code>mod_foo.so</code> <em>outside of</em> the Apache httpd
        source tree using <program>apxs</program>: 

<example>
$ cd /path/to/3rdparty<br />
$ apxs -cia mod_foo.c
</example>
      </li>
    </ol>

    <p>In all cases, once the shared module is compiled, you must
    use a <directive module="mod_so">LoadModule</directive>
    directive in <code>httpd.conf</code> to tell Apache httpd to activate
    the module.</p>

    <p>See the <a href="programs/apxs.html">apxs documentation</a> for more details.</p>
</section>

<section id="background"><title>Background</title>

    <p>On modern Unix derivatives there exists a mechanism
    called dynamic linking/loading of <em>Dynamic Shared
    Objects</em> (DSO) which provides a way to build a piece of
    program code in a special format for loading it at run-time
    into the address space of an executable program.</p>

    <p>This loading can usually be done in two ways: automatically
    by a system program called <code>ld.so</code> when an
    executable program is started or manually from within the
    executing program via a programmatic system interface to the
    Unix loader through the system calls
    <code>dlopen()/dlsym()</code>.</p>

    <p>In the first way the DSO's are usually called <em>shared
    libraries</em> or <em>DSO libraries</em> and named
    <code>libfoo.so</code> or <code>libfoo.so.1.2</code>. They
    reside in a system directory (usually <code>/usr/lib</code>)
    and the link to the executable program is established at
    build-time by specifying <code>-lfoo</code> to the linker
    command. This hard-codes library references into the executable
    program file so that at start-time the Unix loader is able to
    locate <code>libfoo.so</code> in <code>/usr/lib</code>, in
    paths hard-coded via linker-options like <code>-R</code> or in
    paths configured via the environment variable
    <code>LD_LIBRARY_PATH</code>. It then resolves any (yet
    unresolved) symbols in the executable program which are
    available in the DSO.</p>

    <p>Symbols in the executable program are usually not referenced
    by the DSO (because it's a reusable library of general code)
    and hence no further resolving has to be done. The executable
    program has no need to do anything on its own to use the
    symbols from the DSO because the complete resolving is done by
    the Unix loader. (In fact, the code to invoke
    <code>ld.so</code> is part of the run-time startup code which
    is linked into every executable program which has been bound
    non-static). The advantage of dynamic loading of common library
    code is obvious: the library code needs to be stored only once,
    in a system library like <code>libc.so</code>, saving disk
    space for every program.</p>

    <p>In the second way the DSO's are usually called <em>shared
    objects</em> or <em>DSO files</em> and can be named with an
    arbitrary extension (although the canonical name is
    <code>foo.so</code>). These files usually stay inside a
    program-specific directory and there is no automatically
    established link to the executable program where they are used.
    Instead the executable program manually loads the DSO at
    run-time into its address space via <code>dlopen()</code>. At
    this time no resolving of symbols from the DSO for the
    executable program is done. But instead the Unix loader
    automatically resolves any (yet unresolved) symbols in the DSO
    from the set of symbols exported by the executable program and
    its already loaded DSO libraries (especially all symbols from
    the ubiquitous <code>libc.so</code>). This way the DSO gets
    knowledge of the executable program's symbol set as if it had
    been statically linked with it in the first place.</p>

    <p>Finally, to take advantage of the DSO's API the executable
    program has to resolve particular symbols from the DSO via
    <code>dlsym()</code> for later use inside dispatch tables
    <em>etc.</em> In other words: The executable program has to
    manually resolve every symbol it needs to be able to use it.
    The advantage of such a mechanism is that optional program
    parts need not be loaded (and thus do not spend memory) until
    they are needed by the program in question. When required,
    these program parts can be loaded dynamically to extend the
    base program's functionality.</p>

    <p>Although this DSO mechanism sounds straightforward there is
    at least one difficult step here: The resolving of symbols from
    the executable program for the DSO when using a DSO to extend a
    program (the second way). Why? Because "reverse resolving" DSO
    symbols from the executable program's symbol set is against the
    library design (where the library has no knowledge about the
    programs it is used by) and is neither available under all
    platforms nor standardized. In practice the executable
    program's global symbols are often not re-exported and thus not
    available for use in a DSO. Finding a way to force the linker
    to export all global symbols is the main problem one has to
    solve when using DSO for extending a program at run-time.</p>

    <p>The shared library approach is the typical one, because it
    is what the DSO mechanism was designed for, hence it is used
    for nearly all types of libraries the operating system
    provides.</p>

</section>

<section id="advantages"><title>Advantages and Disadvantages</title>

    <p>The above DSO based features have the following
    advantages:</p>

    <ul>
      <li>The server package is more flexible at run-time because
      the server process can be assembled at run-time via
      <directive module="mod_so">LoadModule</directive>
      <code>httpd.conf</code> configuration directives instead of
      <program>configure</program> options at build-time. For instance,
      this way one is able to run different server instances
      (standard &amp; SSL version, minimalistic &amp; dynamic
      version [mod_perl, mod_php], <em>etc.</em>) with only one Apache httpd
      installation.</li>

      <li>The server package can be easily extended with
      third-party modules even after installation. This is
      a great benefit for vendor package maintainers, who can create
      an Apache httpd core package and additional packages containing
      extensions like PHP, mod_perl, mod_security, <em>etc.</em></li>

      <li>Easier Apache httpd module prototyping, because with the
      DSO/<program>apxs</program> pair you can both work outside the
      Apache httpd source tree and only need an <code>apxs -i</code>
      command followed by an <code>apachectl restart</code> to
      bring a new version of your currently developed module into
      the running Apache HTTP Server.</li>
    </ul>

    <p>DSO has the following disadvantages:</p>

    <ul>
      <li>The server is approximately 20% slower at startup time
      because of the symbol resolving overhead the Unix loader now
      has to do.</li>

      <li>The server is approximately 5% slower at execution time
      under some platforms, because position independent code (PIC)
      sometimes needs complicated assembler tricks for relative
      addressing, which are not necessarily as fast as absolute
      addressing.</li>

      <li>Because DSO modules cannot be linked against other
      DSO-based libraries (<code>ld -lfoo</code>) on all platforms
      (for instance a.out-based platforms usually don't provide
      this functionality while ELF-based platforms do) you cannot
      use the DSO mechanism for all types of modules. Or in other
      words, modules compiled as DSO files are restricted to only
      use symbols from the Apache httpd core, from the C library
      (<code>libc</code>) and all other dynamic or static libraries
      used by the Apache httpd core, or from static library archives
      (<code>libfoo.a</code>) containing position independent code.
      The only chances to use other code is to either make sure the
      httpd core itself already contains a reference to it or
      loading the code yourself via <code>dlopen()</code>.</li>
    </ul>

</section>

</manualpage>
