<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
  Copyright 2003-2004 The Apache Software Foundation

  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.
-->
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.1//EN" "document-v11.dtd">
<document>

  <header>
    
    <title>Apache Gump</title>

  	<authors>
  		<person name="Sam Ruby" email="rubys AT us.ibm DOT com"/>
  		<person name="Adam Jack" email="ajack AT sybase DOT com"/>
  		<person name="Community" email="general AT gump DOT apache DOT org"/>
  	</authors>
  </header>
<body>

  <section><title>What is Gump?</title>

  <p>
    <strong>Gump is a social experiment.</strong>  The primary goal of Gump is to get diverse
    projects to communicate early and often about integration, dependencies,
    and versioning management.  One way to think about it is that some of the
    concepts of
    <link href="http://www.extremeprogramming.org/">Extreme programming</link>
    applied to
    <link href="http://www.martinfowler.com/articles/continuousIntegration.html">
    Continuous Integration</link> on an unprecedented scale.
  </p>
   
  <p>
    Essentially, the reasoning goes like this - if continuous integration is a
    good thing on a small project, why not apply it recursively and include all
    dependencies for which access to source is provided?
  </p>
  <fixme author="Community">The Gump team are looking for volunteers to extend Gump, to install/manage public/private/cascaded Gumps,
  	and generally spread Gump to an even broader section of the OSS community. Interested?<br/>
  	Also, Gump is developing, and a has <link href="todo.html">outstanding TODOS</link> that
  		you could help with.<br/>
  	
  	Contact us on the
  	Gump <link href="mail.html">mailing list</link>
  </fixme>
  </section>

  <section><title>How does Gump work?</title>

    <p>
      With Traditional Gump, <link href="http://cvs.apache.org/viewcvs/gump/project">
      project</link> definitions are converted from XML to scripts native to the
      platform on which you are running.  With Python Gump the XML is mapped into in memory
      objects for processing. Scripts execute cvs or svn update
      commands for every module which contains a project being built, and
      invoke builds for each project in an order that ensures that dependencies
      are satisfied. Build outputs are processed and, if successful, dependent projects
      are then built on these outputs.
    </p>

  <warning>
    <link href="traditional/index.html">Traditional Gump</link> is undergoing a re-write into <link href="http://nagoya.apache.org/wiki/apachewiki.cgi?GumpPython">Python</link>, see
    <link href="python/index.html">Python Gump</link>. Be aware that some of this documentation might be in transition,
    or state traditional information (when Python information difers.) <strong>Please report any such findings to us</strong>.
  </warning>
  
    <p>
      The commands use the actual build.xml files from the projects, but do
      not use the scripts or jar files checked into CVS/SVN.  Instead, the
      CLASSPATH is set and properties are passed on the command line.
    </p>
    
    <note>
    	Gump set's Ant's <link href="http://ant.apache.org/manual/sysclasspath.html">build.sysclasspath</link> to <strong>only</strong> and manages the system classpath:<br/>
    	To quote Ant:<br/>
    	<em>Only the system classpath is used and classpaths specified in build files, etc are ignored. 
    		This situation could be considered as the person running the build file knows more about the environment than the person writing the build file</em>
    </note>

    <p>
      The net effect is that every project is built every day with the latest
      version of every dependency - including the latest Ant, latest JUnit,
      latest XML parser.
    </p>

    <p>
      The results are captured into html pages that largely are consistent
      with the style of the Jakarta project.  An extensive amount of hypertext
      links are added to allow quick and easy navigation, and failures are
      color coded on the main build page.
    </p>

    <p>
      A Perl script which is driven off of a naglist will optionally send
      e-mails to various newsgroups upon matching strings being found in the
      build output.  This is typically used to alert developers of build
      failures.
    </p>
  </section>

  <section><title>Where is Gump?</title>
    <ul>
      <li><link href="http://cvs.apache.org/viewcvs/gump/">Source</link></li>
    </ul>
  </section>

  <section><title>When does Gump run?</title>
    <p>
      For Gump to have the desired social effects, it must be predictable.  
      Given the global scale of open source development, there is clearly no 
      one time when everyone is inactive.
    </p>

    <p>
      The run at midnight US/Pacific time causes nag emails to be sent.  
      Interrim runs are now done evey eight hours, based on the hardware kindly 
      donated by Sun and Covalent. Below is the schedule for all runs relative 
      to several representative time zones.
    </p>

    <table>
      <tr>
        <th>Site</th>
        <th>JVM</th>
        <th>Comments</th>
      </tr>
      <tr>
        <td><link href="http://cvs.apache.org/builds/gump/latest">Rubix</link> </td>
        <td/>
        <td><strong>Unavailable</strong></td>
      </tr>
      <tr>
        <td><link href="http://nagoya.apache.org/~rubys/gump/">Nagoya</link> </td>
        <td/>
        <td><strong>Unavailable</strong></td>
      </tr>
      <tr>
        <td><link href="http://gump.covalent.net/log/index.html">Covalent</link> </td>
        <td>1.4.0_00-b05</td>
        <td>Traditional Gump</td>
      </tr>
      <tr>
        <td><link href="http://gump.cocoondev.org/">CocoonDev</link> </td>
        <td/>
        <td>Traditional Gump</td>
      </tr>
      <tr>
        <td><link href="http://lsd.student.utwente.nl/gump/">LSD</link> </td>
        <td>1.4.2-b28</td>
        <td>Python Gump</td>
      </tr>
      <tr>
        <td><link href="http://gump.dotnot.org/">DotNot</link> </td>
        <td>1.4.1_02-b06</td>
        <td>Python Gump</td>
      </tr>
      <tr>
        <td><link href="http://gump.try.sybase.com/">TrySybase</link> </td>
        <td>1.4.2_03</td>
        <td>Python Gump</td>
      </tr>
    </table>

  </section>

  <section><title>Who is Gump?</title>
    <p>
      Gump was named after
      <fork href="http://www.google.com/search?q=Forrest+Gump">Forrest Gump</fork>,
      the title character in a movie.  The process for building was to do a
      "Generate", followed by cvs "Updates", followed by a "Build All".  This
      was repetitive, so a command was created to combine these operations -
      and it was named "guba".  This sound this made when spoken reminded me
      of "Bubba Gump".
    </p>

    <p>
      This seemed oddly appropriate as much of the motivation for Gump
      derived from the frustrations building Cocoon.  The FAQ for
      that project indicate that the project was named after a movie that the
      creator of that project was particularly fond of, so it seemed fitting
      that this effort would be named after a movie.
    </p>

    <p>
      A number of other fortunate coincidences proved this was the right choice for a name.  
      From the role of the feather in the
      opening and closing scenes (something adapted to the Apache
      feature for the Gump icon), to the catch phase of "Stupid is as Stupid
      does" - something that captures the spirit of a large number of build
      errors caught by this process.  And most significantly (to some) - the
      wisdom passed on from Gump's mother that "Life is like a box of
      chocolates - you never know what you are going to get!".  I can think
      of no more apt description of a build process which takes the absolute
      latest versions of almost everything and attempts to build them together!
    </p>
  </section>

  <section><title>Why was Gump written?</title>
    <p>
      That question is complex enough that it deserves a
      <link href="why.html">separate page</link>.
    </p>
  </section>
</body>
</document>
