<section id="introduction">
    <title>Introduction to Apache Rivet version &version;</title>
    <para>
      Apache Rivet is a system for creating dynamic web content by
      integrating the 
		<ulink url="&tcltk-url;">Tcl programming language</ulink> within the 
      <ulink url="&apache-url;">Apache Web Server</ulink>.
      It is designed to be fast, powerful and extensible, consume 
      few system resources, be easy to learn, and to provide the user with a
      platform that can also be used for other programming tasks
      outside the web (GUI's, system administration tasks, text
      processing, database manipulation, XML, and so on).
    </para>
    <para>
      In this manual, we aim to help get you started, and then
      writing productive code as quickly as possible, as well as
      giving you ideas on how to best take advantage of Rivet's
      architecture to create different styles of web site.
    </para>
    <para>
      This documentation is focused on the current version of Rivet, but
      still a work in progress, and, like everything
      else about Apache Rivet, it is Free Software. If you see
      something that needs improving, and have ideas or suggestions,
      don't hesitate to let us know.  If you want to contribute
      directly, better yet!
    </para>
    <simplesect>
        <title>Apache MPM and Rivet Bridge Modules</title>
        <para>
				Rivet &version; is a successor to Rivet &version30;, a major rewriting of mod_rivet,
				the Apache HTTP Websever module at the core of Rivet. Unlike in &version2-generic; of
				mod_rivet, which only supported the
				<ulink url="&apachedoc-prefork;">prefork MPM</ulink>
				(<ulink url="&apachedoc-mpm;">Multiprocessing Module</ulink>),
				starting with &version30; we attained full support of different MPM for
				the Apache framework.
        </para>
        <para>
        		Threaded <ulink url="&apachedoc-mpm;">MPM</ulink>
        		integration was achieved by making mod_rivet multithreaded and
        		modular itself, introducing the MPM-module bridge concept.
				We developed a set of loadable modules which are supposed not only to overcome 
            the issues related to threading but also to offer the best possible MPM mod_rivet 
            integration.
        		As a side effect of this modular design mod_rivet is not only able to integrate
        		with its environment but also to work as a framework for writing more MPM bridges
        		designed along different multi-threading schemes and workload management models. 
        		See the <link linkend="internals">internals</link> section of this manual for
        		further reading. MPM bridges are loaded accordingly to a heuristics of rules based
        		on the Apache introspection calls but they can be determined in the configuration. 
        		Only a bridge can be loaded at a time.
        </para>
    </simplesect>
    <simplesect>
    	<title>Request Processing</title>
    	<para>
    			Request processing was performed in mod_rivet version &version2-generic; by chaining together 3 scripts
    	</para>
    	<itemizedlist>
    		<listitem>BeforeScript, if defined in the configuration</listitem>
 			<listitem>The URI referenced Tcl script or rvt template dermined with
 				respect to the <ulink url="&apachedoc-docroot;">DocumentRoot</ulink> and following 
 				other resource determination methods such the ones offered by 
 				<ulink url="&apachedoc-alias;">mod_alias</ulink> and by
 				<ulink url="&apachedoc-rewrite;">mod_rewrite</ulink>.
 			</listitem>
 			<listitem>AfterScript, if defined in the configuration</listitem> 
		</itemizedlist>
		<para>
			Errors and exceptions (raised by the <link linkend="abort_page">::rivet::abort_page</link> command)
			are handled by the ErrorScript and AbortScript (ErrorScript has a default implementation
			if undefined in the configuration)
		</para>
		
		<para>
			Rivet &version; implements a new <link linkend="request">request processing scheme</link> 
			entirely based on Tcl. By default rivet &version; provides compatiblity with the 
			version &version2-generic; scheme to handle a request but this can be entirely overridden by
			the developer replacing the central request handling procedure. See the 
			<link linkend="request">request processing</link> page.
		</para>
    </simplesect>
    <simplesect>
    	<title>Acknowledgements</title>
    	<para>This version of Rivet received substantial contributions from George Petasis who solved
    	several problems with the threaded code, improved the code in several ways and made the CMake
    	based build scripts</para>
    </simplesect>
</section>
