<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<book conformance="docgen" version="5.0" xmlns="http://docbook.org/ns/docbook"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:xi="http://www.w3.org/2001/XInclude"
      xmlns:svg="http://www.w3.org/2000/svg"
      xmlns:m="http://www.w3.org/1998/Math/MathML"
      xmlns:html="http://www.w3.org/1999/xhtml"
      xmlns:db="http://docbook.org/ns/docbook">
  <title>Apache FreeMarker</title>

  <chapter role="index.html" xml:id="what-is-freemarker">
    <title>What is Apache FreeMarker?</title>

    <para>Apache FreeMarker is a <emphasis>template engine</emphasis>: a Java
    library to generate text output (HTML web pages, e-mails, configuration
    files, source code, etc.) based on templates and changing data. Templates
    are written in the FreeMarker Template Language (FTL), which is a simple,
    specialized language (not a full-blown programming language like PHP). You
    meant to prepare the data to display in a real programming language, like
    issue database queries and do business calculations, and then the template
    displays that already prepared data. In the template you are focusing on
    how to present the data, and outside the template you are focusing on what
    data to present.</para>

    <mediaobject>
      <imageobject>
        <imagedata fileref="images/overview.png"/>
      </imageobject>
    </mediaobject>

    <para>This approach is often referred to as the MVC (Model View
    Controller) pattern, and is particularly popular for dynamic web pages. It
    helps in separating web page designers (HTML authors) from developers
    (Java programmers usually). Designers won't face complicated logic in
    templates, and can change the appearance of a page without programmers
    having to change or recompile code.</para>

    <para>While FreeMarker was originally created for generating HTML pages in
    MVC web application frameworks, it isn't bound to servlets or HTML or
    anything web-related. It's used in non-web application environments as
    well.</para>

    <para>See the <olink targetdoc="templateAuthorsGuide">Manual for more
    details...</olink></para>

    <para><emphasis role="bold">Disclaimer: </emphasis><emphasis>Apache
    FreeMarker is an effort undergoing incubation at The Apache Software
    Foundation (ASF), sponsored by the <link
    xlink:href="http://incubator.apache.org">Apache Incubator</link>.
    Incubation is required of all newly accepted projects until a further
    review indicates that the infrastructure, communications, and decision
    making process have stabilized in a manner consistent with other
    successful ASF projects. While incubation status is not necessarily a
    reflection of the completeness or stability of the code, it does indicate
    that the project has yet to be fully endorsed by the
    ASF.</emphasis></para>

    <simplesect>
      <title>Features</title>

      <para>A few highlights of FreeMarker:</para>

      <itemizedlist>
        <listitem>
          <para>Powerful template language: Conditional blocks, iterations,
          assignments, string and arithmetic operations and formatting, macros
          and functions, including other templates, escaping by default
          (optional), and many more</para>
        </listitem>

        <listitem>
          <para>Multipurpose and lightweight: Zero dependencies, any output
          format, can load templates from any place (pluggable), many
          configuration options</para>
        </listitem>

        <listitem>
          <para>Internationalization/localization-aware: Locale sensitive
          number and date/time formatting, localized template
          variations.</para>
        </listitem>

        <listitem>
          <para>XML processing capabilities: Drop XML DOM-s into the
          data-model and traverse them, or even process them
          declaratively</para>
        </listitem>

        <listitem>
          <para>Versatile data-model: Java objects are exposed to the template
          as a tree of variables through pluggable adapters, which decides how
          the template sees them.</para>
        </listitem>
      </itemizedlist>
    </simplesect>

    <simplesect>
      <title>License</title>

      <para>FreeMarker is Free software, licensed under the Apache License,
      Version 2.0. <olink targetdoc="license">See the license
      here...</olink>.</para>

      <para>As of 2.3.24-pre01 (2015-09-02) the copyright owner in the license
      has changed to the Apache Software Foundation, as the project has
      started <link xlink:href="http://incubator.apache.org/">Apache
      Incubation</link> (see disclaimer earlier).</para>
    </simplesect>
  </chapter>

  <chapter xml:id="freemarkerdownload">
    <title>Download / Maven</title>

    <para>Apache FreeMarker is a template engine: a Java library to generate
    text output (HTML web pages, e-mails, configuration files, source code,
    etc.) based on templates and changing data.</para>

    <para xml:id="downloadApacheDisclaimer"><emphasis role="bold">Disclaimer:
    </emphasis><emphasis>Apache FreeMarker is an effort undergoing incubation
    at The Apache Software Foundation (ASF), sponsored by the <link
    xlink:href="http://incubator.apache.org">Apache Incubator</link>.
    Incubation is required of all newly accepted projects until a further
    review indicates that the infrastructure, communications, and decision
    making process have stabilized in a manner consistent with other
    successful ASF projects. While incubation status is not necessarily a
    reflection of the completeness or stability of the code, it does indicate
    that the project has yet to be fully endorsed by the
    ASF.</emphasis></para>

    <para><emphasis role="bold">Dependencies:</emphasis> FreeMarker has no
    required dependencies, except Java (Standard Edition) itself, with the
    minimum version indicated for each download below.</para>

    <para><emphasis role="bold">Backward compatibility:</emphasis> Before
    2.3.0 (2004), releases with different second version numbers (like 2.2.x
    and 2.3.x) aren't fully compatible. The 2.3.x series is quite conservative
    about backward compatibility; you should be able to replace the FreeMarker
    binary (<literal>freemarker.jar</literal>) under your application with a
    newer one without breaking anything (obviously, assuming that only public
    FreeMarker API-s were used).</para>

    <para><emphasis role="bold">Change log (version history):</emphasis>
    <olink targetdoc="versionHistory">See in the Manual...</olink></para>

    <para><emphasis role="bold">Verifying downloads:</emphasis> When
    downloading from a mirror please check the checksum and verify the OpenPGP
    compatible signature specified next to the download link (MD5, SHA256 and
    ASC files, all must come from the <link
    xlink:href="http://www.apache.org/">www.apache.org</link> domain). The
    public keys used for signing are here: <link
    xlink:href="http://www.apache.org/dist/incubator/freemarker/KEYS">KEYS</link>
    (also must come from www.apache.org). <link
    xlink:href="http://www.apache.org/dyn/closer.cgi#verify">More about how to
    verify releases...</link> Note that such verification is only possible
    since 2.3.24.</para>

    <simplesect>
      <title>Latest stable release: 2.3.26-incubating</title>

      <para>Released on 2017-03-25. Requires J2SE 1.5 or higher.</para>

      <para><emphasis role="bold">This is a stable, final release.</emphasis>
      The <quote>incubating</quote> suffix is required by the Apache Software
      Foundation until the project becomes a fully accepted (graduated) Apache
      project. See <link linkend="downloadApacheDisclaimer">disclaimer
      earlier</link> and the <link
      xlink:href="http://incubator.apache.org">Apache Incubator web
      site</link>.</para>

      <para><link
      xlink:href="http://freemarker.org/docs/versions_2_3_26.html">See what's
      new...</link></para>

      <para>Downloads:</para>

      <itemizedlist>
        <listitem>
          <para><link
          xlink:href="http://www.apache.org/dyn/closer.cgi/incubator/freemarker/engine/2.3.26-incubating/binaries/apache-freemarker-2.3.26-incubating-bin.tar.gz">Binary
          release (tar.gz)</link> (includes <literal>freemarker.jar</literal>
          and documentation) [<link
          xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.26-incubating/binaries/apache-freemarker-2.3.26-incubating-bin.tar.gz.md5">MD5</link>]
          [<link
          xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.26-incubating/binaries/apache-freemarker-2.3.26-incubating-bin.tar.gz.sha512">SHA512</link>]
          [<link
          xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.26-incubating/binaries/apache-freemarker-2.3.26-incubating-bin.tar.gz.asc">ASC</link>]</para>
        </listitem>

        <listitem>
          <para><link
          xlink:href="http://www.apache.org/dyn/closer.cgi/incubator/freemarker/engine/2.3.26-incubating/source/apache-freemarker-2.3.26-incubating-src.tar.gz">Source
          release (tar.gz)</link> [<link
          xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.26-incubating/source/apache-freemarker-2.3.26-incubating-src.tar.gz.md5">MD5</link>]
          [<link
          xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.26-incubating/source/apache-freemarker-2.3.26-incubating-src.tar.gz.sha512">SHA512</link>]
          [<link
          xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.26-incubating/source/apache-freemarker-2.3.26-incubating-src.tar.gz.asc">ASC</link>]</para>
        </listitem>
      </itemizedlist>

      <para>For Maven:</para>

      <programlisting language="XML" role="unspecified">&lt;!--
Attention: Be sure nothing pulls in an old dependency with groupId
"freemarker" (without the "org."), because then you will end up with
two freemarker.jar-s and unpredictable behavior!
--&gt;
&lt;dependency&gt;
  &lt;groupId&gt;org.freemarker&lt;/groupId&gt;
  &lt;artifactId&gt;freemarker&lt;/artifactId&gt;
  &lt;version&gt;2.3.26-incubating&lt;/version&gt;
&lt;/dependency&gt;</programlisting>

      <note>
        <para>Until about 2007 the Maven group name was
        <quote>freemarker</quote> instead of <quote>org.freemarker</quote>,
        and as the XML comment above says, this can cause problems, as Maven
        will see them as two independent artifacts with no version conflict.
        If you run into this issue, find the <literal>dependency</literal>
        that depends on the old FreeMarker, and insert
        <literal>&lt;exclusions&gt;&lt;exclusion&gt;&lt;groupId&gt;freemarker&lt;!--
        Legacy org-less group
        --&gt;&lt;/groupId&gt;&lt;artifactId&gt;freemarker&lt;/artifactId&gt;
        &lt;/exclusion&gt;&lt;/exclusions&gt;</literal> into it.</para>
      </note>

      <para>There's also a separate Google App Engine compatible
      (<quote>gae</quote>) variation. Download: <link
      xlink:href="http://www.apache.org/dyn/closer.cgi/incubator/freemarker/engine/2.3.26-incubating/binaries/apache-freemarker-gae-2.3.26-incubating-bin.tar.gz">binary</link>
      [<link
      xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.26-incubating/binaries/apache-freemarker-gae-2.3.26-incubating-bin.tar.gz.md5">MD5</link>]
      [<link
      xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.26-incubating/binaries/apache-freemarker-gae-2.3.26-incubating-bin.tar.gz.sha512">SHA512</link>]
      [<link
      xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.26-incubating/binaries/apache-freemarker-gae-2.3.26-incubating-bin.tar.gz.asc">ASC</link>],
      <link
      xlink:href="http://www.apache.org/dyn/closer.cgi/incubator/freemarker/engine/2.3.26-incubating/source/apache-freemarker-gae-2.3.26-incubating-src.tar.gz">source</link>
      [<link
      xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.26-incubating/source/apache-freemarker-gae-2.3.26-incubating-src.tar.gz.md5">MD5</link>]
      [<link
      xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.26-incubating/source/apache-freemarker-gae-2.3.26-incubating-src.tar.gz.sha512">SHA512</link>]
      [<link
      xlink:href="https://www.apache.org/dist/incubator/freemarker/engine/2.3.26-incubating/source/apache-freemarker-gae-2.3.26-incubating-src.tar.gz.asc">ASC</link>].
      Maven:</para>

      <programlisting language="XML" role="unspecified">&lt;dependency&gt;
  &lt;groupId&gt;org.freemarker&lt;/groupId&gt;
  &lt;artifactId&gt;freemarker-gae&lt;/artifactId&gt;
  &lt;version&gt;2.3.26-incubating&lt;/version&gt;
&lt;/dependency&gt;</programlisting>
    </simplesect>

    <simplesect>
      <title>2.2.8</title>

      <para>Released on 2004-06-15. This is the latest stable release of the
      2.2 series. Requires J2SE 1.2 or higher.</para>

      <para><link
      xlink:href="http://prdownloads.sourceforge.net/freemarker/freemarker-2.2.8.tar.gz">Download
      freemarker-2.2.8.tar.gz</link> (1.4 MB)</para>
    </simplesect>

    <simplesect>
      <title>2.1.5</title>

      <para>Released on 2003-02-08. This is the latest stable release of the
      2.1 series. Requires J2SE 1.3 or higher.</para>

      <para><link
      xlink:href="http://prdownloads.sourceforge.net/freemarker/freemarker-2.1.5.tar.gz">Download
      freemarker-2.1.5.tar.gz</link> (909 KB)</para>
    </simplesect>

    <simplesect>
      <title>2.0.3 (aka. 2.03)</title>

      <para>Released on 2002-06-12. The latest stable release of the 2.0
      series. Requires J2SE 1.2 or higher.</para>

      <para><link
      xlink:href="http://prdownloads.sourceforge.net/freemarker/freemarker2_03.tar.gz">Download
      freemarker2_03.tar.gz</link> (617 KB)</para>
    </simplesect>

    <simplesect>
      <title>1.x</title>

      <para>The FreeMarker 1.x branch continues as separate project, called
      FreeMarker Classic. See releases on the <link
      xlink:href="http://fm-classic.sourceforge.net/">FreeMarker Classic
      homepage</link>!</para>
    </simplesect>

    <simplesect>
      <title>Other versions</title>

      <para>Outdated versions starting from 2.3.24 RC01 are available from the
      Apache archive: <link
      xlink:href="http://archive.apache.org/dist/incubator/freemarker/engine/">http://archive.apache.org/dist/incubator/freemarker/engine/</link>.
      Even older releases are available from the <link
      xlink:href="https://sourceforge.net/projects/freemarker/files/freemarker/">SourceForge
      download page</link>.</para>
    </simplesect>
  </chapter>

  <chapter>
    <title>Documentation</title>

    <section>
      <title><olink targetdoc="manual">Manual</olink></title>

      <para/>
    </section>

    <section>
      <title><olink targetdoc="api">Java API</olink></title>

      <para/>
    </section>

    <section>
      <title><olink targetdoc="chienseManual">Manual Chinese
      translation</olink></title>

      <para/>
    </section>
  </chapter>

  <chapter>
    <title>Tooling</title>

    <section xml:id="editors">
      <title>Editor and IDE plugins</title>

      <para>Syntax highlight definitions and other plugins for text editors
      and IDE-s. We encourage everybody to develop and send syntax highlight
      definitions or other plugins for his/her favorite editor or IDE!</para>

      <informaltable border="1">
        <thead>
          <tr>
            <th>Editor or IDE</th>

            <th>Features</th>

            <th>Get it</th>
          </tr>
        </thead>

        <tbody>
          <tr>
            <td>Eclipse</td>

            <td>Syntax highlight, syntax error marker, code completion for
            macro names and bean property names.</td>

            <td><para>This is developed as part of <link
            xlink:href="http://tools.jboss.org/">JBoss
            Tools</link>.</para><para>On Eclipse <emphasis>Neon</emphasis> or
            later, go to <quote>Help</quote> / <quote>Eclipse
            Marketplace...</quote>, search for <quote>JBoss Tools</quote>
            (should give version 4.<emphasis role="bold">4</emphasis>.1 or
            later), <quote>Install</quote>. A tree of check boxes will appear,
            uncheck all (by unchecking the root) except <quote>FreeMarker
            IDE</quote>.</para><para>On Eclipse <emphasis>Mars or
            Luna</emphasis>, you should still install the <quote>FreeMarker
            IDE</quote> plugin from JBoss Tool 4.<emphasis
            role="bold">4</emphasis>.1 or later, but the Eclipse Marketplace
            won't show it. So in Eclipse, go to <quote>Help</quote> /
            <quote>Install New Software...</quote>, and copy-paste
            http://download.jboss.org/jbosstools/neon/stable/updates/ into the
            <quote>Work with</quote> field. While this URL is for Eclipse
            Neon, the <quote>FreeMarker IDE</quote> component under it works
            on Eclipse Mars too (maybe even on Luna). So expand the check box
            tree appearing below, and select <quote>FreeMarker IDE</quote>
            only. Don't left any other components checked. Then
            <quote>Next</quote>, <quote>Next</quote>,
            <quote>Finish</quote>.</para><para>Report bugs found on the <link
            xlink:href="https://issues.jboss.org/issues/?jql=project%20%3D%20JBIDE%20AND%20component%20%3D%20freemarker">bug
            tracker of the JBoss Tools project</link> (Key:
            <literal>JBIDE</literal>; Component:
            <literal>freemarker</literal>), and help to make the plugin better
            <link
            xlink:href="https://github.com/jbosstools/jbosstools-freemarker">on
            GitHub</link>!</para><para>To install the nightly development
            version, use this Eclipse update site:
            http://download.jboss.org/jbosstools/neon/snapshots/builds/jbosstools-freemarker_master/latest/all/repo/
            </para><para>Note: If the plugin comes with an older FreeMarker
            version than the one your application uses, it will mark the usage
            of too fresh language features as errors, or the other way around.
            To fix this, find <literal>freemarker*.jar</literal> inside the
            installed plugin, under
            <literal>&lt;userHome&gt;/.eclipse/</literal> or under the Eclipse
            installation directory (you may need to search inside
            <literal>jar</literal>-s). Exit Eclipse, and overwrite it with the
            <literal>freemarker.jar</literal> you want, but keep the file name
            of the replaced <literal>jar</literal>. You may also need to find
            and delete the extracted OSGi bundle under
            <literal>configuration\org.eclipse.osgi</literal> for the changes
            to take effect.</para></td>
          </tr>

          <tr>
            <td>Emacs</td>

            <td>Syntax highlight, indentation, block folding, some code
            navigation. Emacs major-mode for editing Web templates, includes
            FreeMarker support among others.</td>

            <td><link xlink:href="http://web-mode.org/">The homepage of
            web-mode.el</link></td>
          </tr>

          <tr>
            <td>Emacs (tried with 20.7)</td>

            <td>Syntax highlighting</td>

            <td><olink targetdoc="emacsPluginDownload">ftl.el
            v0.1</olink></td>
          </tr>

          <tr>
            <td>Kate and KWrite (tried with Kate 2.5.10 and 3.2)</td>

            <td>Syntax highlighting</td>

            <td><olink
            targetdoc="kwritePluginDownload">kwriteftl.tar.gz</olink>
            (2009-08-08)</td>
          </tr>

          <tr>
            <td>NetBeans (tried with 8.0.2)</td>

            <td>Syntax highlight, syntax error marker, directive name
            auto-completion.</td>

            <td>Can be installed from NetBeans, under Tools/Plugins. Also
            manually from <link
            xlink:href="http://plugins.netbeans.org/plugin/58284/freemarker-support-for-netbeans">its
            NetBeans plugin portal page...</link></td>
          </tr>

          <tr>
            <td>NetBeans (6.0, may doesn't work with 7+)</td>

            <td>Syntax highlight, code completion, template navigation</td>

            <td>Download from <link
            xlink:href="http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=3755">its
            NetBeans plugin portal page...</link></td>
          </tr>

          <tr>
            <td>TextMate</td>

            <td>Syntax highlight</td>

            <td><link
            xlink:href="https://github.com/freemarker/FreeMarker.tmbundle">Install
            from GitHub Project</link></td>
          </tr>

          <tr>
            <td>TextPad 4 or later</td>

            <td>Syntax highlight</td>

            <td><olink
            targetdoc="textPadPluginDownload">textpadftl.zip</olink>
            (2003-03-24)</td>
          </tr>

          <tr>
            <td>Vim ("Vi IMproved")</td>

            <td>Syntax highlight</td>

            <td><olink targetdoc="vimPluginDownload">ftl.vim</olink>
            (2011-10-07)</td>
          </tr>
        </tbody>
      </informaltable>

      <para>Note that some editors/IDEs, such as <link
      xlink:href="https://www.jetbrains.com/idea/">IntelliJ IDEA</link> and
      <link xlink:href="http://www.jedit.org/">jEdit</link>, supports
      FreeMarker out-of-the-box.</para>
    </section>

    <section>
      <title><olink targetdoc="onlineTemplateTester">Online template
      tester</olink></title>

      <para/>
    </section>
  </chapter>

  <chapter>
    <title>Community</title>

    <section>
      <title><olink targetdoc="newBugReport">Report bugs</olink></title>

      <para/>
    </section>

    <section>
      <title><olink targetdoc="oldBugTracker">Bugs still in the old
      tracker</olink></title>

      <para/>
    </section>

    <section xml:id="report-security-vulnerabilities">
      <title>Report security vulnerability</title>

      <para>We strongly encourage to report security vulnerabilities to our
      private mailing list first, rather than disclosing them in a public
      forum. The private security mailing address is: <olink
      targetdoc="privateMailingList"/></para>

      <para>Please note that this mailing list should only be used for
      reporting undisclosed security vulnerabilities in Apache FreeMarker and
      managing the process of fixing such vulnerabilities. We cannot accept
      regular bug reports or other queries at this address.</para>

      <para>If you want to report a bug that isn't an undisclosed security
      vulnerability, please use <olink targetdoc="newBugReport">our regular
      bug tracker</olink>.</para>

      <para>Committers should <link
      linkend="handle-security-vulnerabilities">see here</link> how to handle
      reported security vulnerabilities.</para>
    </section>

    <section>
      <title><olink targetdoc="newStackOverflowQuestion">Ask help on Stack
      Overflow</olink></title>

      <para/>
    </section>

    <section>
      <title><olink targetdoc="twitter">Get news on Twitter</olink></title>

      <para/>
    </section>

    <section xml:id="mailing-lists">
      <title>Discuss on mailing lists</title>

      <para>If you need help, you should ask on <olink
      targetdoc="newStackOverflowQuestion">Stack Overflow with
      <quote>freemarker</quote> tag</olink>! To discuss deeper issues, feature
      requests, and other FreeMarker-related topics, subscribe to the
      developer mailing list!</para>

      <para>The mailing lists (since 2015-09-03):</para>

      <itemizedlist>
        <listitem>
          <para><emphasis role="bold">Developer list</emphasis>:
          dev@freemarker.incubator.apache.org. <olink
          targetdoc="devMailingListSubscribe"><link
          xlink:href="mailto:dev-subscribe@freemarker.incubator.apache.org">Subscribe</link></olink>,
          <olink targetdoc="devMailingListUnsubscribe"><link
          xlink:href="mailto:dev-unsubscribe@freemarker.incubator.apache.org">Unsubscribe</link></olink>
          (After clicking on these links, send the appearing empty mail as
          is.)</para>
        </listitem>

        <listitem>
          <para><emphasis role="bold">Commit and Jira
          notifications</emphasis>:
          notifications@freemarker.incubator.apache.org. <olink
          targetdoc="notificationsMailingListSubscribe"><link
          xlink:href="mailto:notifications-subscribe@freemarker.incubator.apache.org">Subscribe</link></olink>,
          <olink targetdoc="notificationsMailingListUnsubscribe"><link
          xlink:href="mailto:notifications-unsubscribe@freemarker.incubator.apache.org">Unsubscribe</link></olink>
          (After clicking on these links, send the appearing empty mail as
          is.)</para>
        </listitem>
      </itemizedlist>

      <para>The above mailing lists are hosted by the Apache Software
      Foundation. For more information about managing mailing lists, <link
      xlink:href="http://apache.org/foundation/mailinglists.html">see this
      page...</link></para>

      <simplesect>
        <title>Retired mailing lists</title>

        <para>These are the lists on sourceforge.net, which
        <emphasis>shouldn't be used anymore</emphasis>.</para>

        <para>Archives of <emphasis>retired</emphasis> lists:</para>

        <itemizedlist>
          <listitem>
            <para><olink
            targetdoc="oldUserMailingListArchive">freemarker-user@lists.sourceforge.net</olink></para>
          </listitem>

          <listitem>
            <para><olink
            targetdoc="oldDevelMailingListArchive">freemarker-devel@lists.sourceforge.net</olink></para>
          </listitem>
        </itemizedlist>

        <para><olink targetdoc="oldMailingListSubscription">Manage
        <emphasis>retired</emphasis> list subscriptions...</olink></para>
      </simplesect>
    </section>

    <section xml:id="poweredBy">
      <title>Who uses FreeMarker?</title>

      <para>Below is a non-comprehensive list of products and sites that use
      FreeMarker.</para>

      <para>If you are a developer (or otherwise a representative) of a
      product or site that uses FreeMarker <emphasis>and has a substantial
      user base for at least a year or so</emphasis>, <olink
      targetdoc="devMailingList">drop us a note</olink> that includes a short
      one paragraph description (preferably less than 300 characters, or 600
      for complex frameworks) and an URL. The description should also include
      what FreeMarker is used for in your product.</para>

      <simplesect>
        <title>Software that incorporates FreeMarker</title>

        <informaltable border="1">
          <tbody>
            <tr valign="top">
              <td><link xlink:href="http://alfresco.org/">Alfresco</link></td>

              <td>Alfresco offers open source enterprise content management
              (ECM) - Document Management, Collaboration, Records Management,
              Knowledge Management, Web Content Management and Imaging.
              Alfresco was founded in June 2005 by John Newton, co-founder of
              Documentum, and John Powell, former COO of Business Objects.
              Alfresco's templating system is based on exposing their custom
              object model to FreeMarker templates. See <link
              xlink:href="http://www.alfresco.org/mediawiki/index.php/Template_Guide">here</link>
              for more information.</td>
            </tr>

            <tr valign="top">
              <td><link xlink:href="http://marmotta.apache.org/">Apache
              Marmotta</link></td>

              <td>Apache Marmotta is an Open Platform for Linked Data.
              Internally it uses FreeMarker templates for building its
              administration user interface. In addition Marmotta implements
              an extension of FreeMarker that allows constructing <link
              xlink:href="http://marmotta.apache.org/ldpath/template.html">templates
              with LDPath statements</link> for inserting and iterating over
              values from RDF data.</td>
            </tr>

            <tr valign="top">
              <td><link xlink:href="http://ofbiz.apache.org/">Apache
              OFBiz</link></td>

              <td>Apache OFBiz is a project to create a suite of open-source
              enterprise/e-commerce applications and modules built on a common
              framework. In 2003 the project decided to switch from JSP to
              FreeMarker for their view component.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://apt-jelly.sourceforge.net/">APT-Jelly</link></td>

              <td>APT-Jelly is an engine for generating artifacts (e.g. source
              code, config files) from Java source code. APT-Jelly provides a
              template-oriented approach to artifact generation by providing
              an interface for Sun's Annotation Processing Tool (APT) to your
              favorite templating engine.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://auctionability.co.uk">AuctionAbility</link></td>

              <td>AuctionAbility is a live auction management system that uses
              FreeMarker extensively to power our notifications (email, SMS,
              Facebook, Twitter), newsletters (text, HTML, PDF from xHTML),
              statements (PDF from xHTML) and eBay listing generation.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.clapper.org/software/java/curn/">Curn</link></td>

              <td>Curn is an RSS reader. It scans a configured set of RSS
              feeds, and summarizes the results in files generated with
              FreeMarker templates. It is a command-line utility, intended to
              be run periodically in the background.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.dbsight.net">DBSight</link></td>

              <td>With DBSight you can quickly create a working scalable
              full-text search engine based on your own database, just by
              writing SQL and configuring via browser. DBSight provides a
              customizable scaffolding engine to scaffold search result
              templates.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.basilv.com/psd/software">EnvGen</link></td>

              <td>EnvGen is an <link
              xlink:href="http://ant.apache.org/">Ant</link> task for
              generating different versions of the same file parameterized for
              different environments (i.e. development, test, and production)
              using FreeMarker.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://fmpp.sourceforge.net/">FMPP</link></td>

              <td>FMPP is a general purpose text file preprocessor tool
              (command-line, Ant task). It can generate complete homepages
              (full directory structure with HTML-s, images, etc.). It is
              extendable to display data from any data sources (as
              database).</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://jcopist.sourceforge.net/">JCopist</link></td>

              <td>JCopist is a template-based document generation server based
              on <link
              xlink:href="http://www.openoffice.org/">OpenOffice.org</link>.
              JCopist templates are regular OpenDocuments, enhanced with the
              FreeMarker scripting language.</td>
            </tr>

            <tr valign="top">
              <td><link xlink:href="http://www.jforum.net/">JForum</link></td>

              <td>JForum is an open source discussion board system. The lead
              developer is Rafael Steil.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://jodreports.sourceforge.net/">JODReports</link></td>

              <td>JODReports is an open source solution for creating office
              documents and reports in Java, using OpenOffice.org.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.liferay.com/products/liferay-portal/overview">Liferay
              Portal</link></td>

              <td>Liferay Portal is one of the most widely adapted enterprise
              portal solutions. It's free and open source with optional
              enterprise subscription. It leverages existing technologies and
              standards in its stack where reasonable. It has strong focus on
              modularity, extensibility, and integration with other systems.
              Core services include Enterprise Content Management, document
              management, workflow integration, users/roles, web publishing.
              Entire portals may be built solely using the web UI and
              available components. It uses FreeMarker for themes, page
              layout, fragments of structured content, email, portlet views,
              code generation.</td>
            </tr>

            <tr valign="top">
              <td><link xlink:href="http://www.lutece.paris.fr">Lutece
              (2.0+)</link></td>

              <td>Lutece is a portal engine which allows you to easily create
              your websites or intranets based upon HTML, XML, etc content. It
              provides a user friendly interface for portal management so no
              specific technical skills are required. BSD-like license.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.magnolia-cms.com">Magnolia</link></td>

              <td>Magnolia powers the websites of government as well as
              leading Fortune 500 enterprises in more than 100 countries on
              all continents of the world. It is a Content Management System
              favored for its ease-of-use and availability under an Open
              Source license. Magnolia contains best-of-breed Java technology
              based on open standards to allow for tailor-made solutions.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://infiniteautomation.com/">Mango</link></td>

              <td>Mango is browser-based, Ajax-enabled software that enables
              users to access and control electronic sensors, devices, and
              machines. It provides an interface with which diverse data
              sources can be created and configured along with an intuitive
              rules engine for setting up access, monitoring, alerts, data
              logging, control, transformation, and communication. It uses
              FreeMarker to dynamically generate content for notification
              emails.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.messagegears.com/">MessageGears</link></td>

              <td>MessageGears provides Email APIs and SMTP services.
              MessageGears email templating system is powered by XML documents
              which become the model to FreeMarker templates. Each message is
              then merged, delivered, and tracked to optimize inbox
              placement.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.mrc-productivity.com/">m-Power</link></td>

              <td>m-Power is software which automates enterprise web
              application development and modernizes legacy business
              applications. m-Power offers 15 standard Web templates like
              prompted reports, graphs, pivot tables, maintenance apps, and
              more. m-Power reduces Web application development time, lowers
              development costs, and increases productivity.</td>
            </tr>

            <tr valign="top">
              <td><link xlink:href="http://netbeans.org/">NetBeans</link></td>

              <td>The <link xlink:href="http://netbeans.org/">NetBeans
              IDE</link> is a well-known open-source tool for Java, PHP, Ruby,
              C/C++; it also uses FreeMarker for source code templates.
              FreeMarker is also built into the <link
              xlink:href="http://netbeans.org/features/platform/index.html">NetBeans
              Platform</link>, allowing users to create and process FreeMarker
              file templates as part of their RCP app.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.runmyprocess.com/">RunMyProcess</link></td>

              <td>RunMyProcess is a SaaS (software as a service) Web 2.0
              integration platform which allow to automate, without any
              programming, the exchange between your internal information
              system, your partners or your SaaS software. FreeMarker is used
              to define data mappings and as a template tool for connectors'
              design.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.superx-projekt.de">SuperX</link></td>

              <td>[German language only.] A German dataware house for
              university administrations. Uses FreeMarker to dynamically
              create SQL queries.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.trackstudio.com/">TrackStudio</link></td>

              <td>TrackStudio is a hierarchical issue tracking and bug
              tracking system, created specifically for software development
              companies. It uses FreeMarker to format the e-mail notification
              messages.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.webperformanceinc.com/load_testing/">Web
              Performance Load Tester</link></td>

              <td>Web Performance Load Tester software brings ease of use,
              automatic configuration and sophisticated analysis to
              performance testing at an affordable price.</td>
            </tr>
          </tbody>
        </informaltable>
      </simplesect>

      <simplesect>
        <title>Web application frameworks that support FreeMarker
        <quote>views</quote></title>

        <para>Note that this list is not complete, since we only list products
        where the framework authors explicitly state that their product
        supports FreeMarker. For some frameworks not listed here, it is easy
        to plug any view component, and thus FreeMarker.</para>

        <para>Also, for most "Model 2" frameworks (like Maverick or Struts) it
        is easy to use FreeMarker templates instead of the MVC-oriented JSP
        pages. For more information <olink targetdoc="freemarkerServlet">click
        here...</olink></para>

        <informaltable border="1">
          <tbody>
            <tr valign="top">
              <td><link xlink:href="http://struts.apache.org/">Apache
              Struts</link></td>

              <td>Apache Struts is a free, open-source, MVC framework for
              creating elegant, modern Java web applications. It favors
              convention over configuration, is extensible using a plugin
              architecture, and ships with plugins to support REST, AJAX and
              JSON.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.inductionframework.org">Induction</link></td>

              <td>Induction is a request-based MVC web application framework
              for Java with support for dynamic application reloading,
              type-based dependency injection and dependency analysis between
              models, views and controllers using popular IDEs.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.jpublish.org/">JPublish</link></td>

              <td>Starting from version 2.0b1, JPublish supports FreeMarker as
              a view layer. JPublish is a powerful web publishing system
              designed to ensure a clean separation of developer roles.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.restlet.org">Restlet</link></td>

              <td>A framework that brings the simplicity and efficiency of the
              REST architectural style to Java developers. As an alternative
              to Servlet and JSP technologies, it uses FreeMarker to generate
              dynamic representations.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.springframework.org/">Spring</link></td>

              <td>Spring is a complete Java/J2EE application framework based
              around a lightweight Inversion of Control container. Spring
              includes, among many other things, a full AOP interception
              framework, JDBC and ORM support, declarative transaction
              management (even without an application server) and a rich,
              flexible MVC framework with various view technologies
              integrated.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://tammi.sourceforge.net">Tammi</link></td>

              <td>Tammi is a development framework and run-time container for
              JMX based web applications. Tammi MBeans can implement business
              logic themselves or act as proxies to native libraries, remote
              programs and other manageable systems. Tammi applications can be
              executed either as a servlet or filter chain under a J2EE
              compatible servlet container. In addition, it contains an
              internal HTTP(S) 1.1 capable connector with competent
              performance.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://velocityweb.sourceforge.net/">VelocityWeb</link></td>

              <td>VelocityWeb is a zero-configuration web framework for J2EE.
              It's easy to debug/unit test without J2EE server, create view
              with Velocity/FreeMarker, create DAO with Apache Common DBUtils,
              SQL pagination, and transaction following
              <literal>TRANSACTION_PER_REQUEST</literal>.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.ztemplates.org/">ztemplates</link></td>

              <td>ztemplates is a web framework that uses Java 5 annotations
              and autodiscovery for virtually everything, so there is almost
              no configuration. It features a new and unique action processing
              module that allows clean, technology agnostic URL-s with
              URL-variables. It has annotation-based AJAX and JavaScript
              support.</td>
            </tr>
          </tbody>
        </informaltable>
      </simplesect>

      <simplesect>
        <title>Websites generated by FreeMarker</title>

        <informaltable border="1">
          <tbody>
            <tr valign="top">
              <td><link
              xlink:href="http://www.abclinuxu.cz">www.abclinuxu.cz</link></td>

              <td>Linux portal for czech and slovak users. Articles,
              tutorials, hardware advices, discussion forum and much
              more...</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.chemistaustralia.com.au">www.chemistaustralia.com.au</link></td>

              <td>Chemist Australia - an online pharmacy in Australia. Uses
              the WebWork2 framework.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.chile.com">www.chile.com</link></td>

              <td>This portal for everything Chilean serves way many hits
              every day.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.drivenow.com.au">www.drivenow.com.au</link></td>

              <td>DriveNow - A car rental website that allows customers to
              book rental cars from major suppliers at discounted last minute
              rates. Datacodex have developed a site DriveNow that utilises
              FreeMarker for it's view layer inside it's framework,
              WebWork2.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://freemarker.org">freemarker.org</link></td>

              <td>Not surprisingly, the pages you view right now are generated
              using FreeMarker.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.hesteinfo.dk">www.hesteinfo.dk</link></td>

              <td>Denmark's largest equestrian site, where you will find
              everything related to horses: latest world news, sales, jobs,
              forums, studs, results, and breeding.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://dvd.indianajones.com">dvd.indianajones.com</link></td>

              <td>The official site for the online content accompanying the
              "Complete Indiana Jones DVD Set".</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.javahispano.org">www.javahispano.org</link></td>

              <td>This is a popular Spanish-language portal for java
              developers. It is built on top of the <link
              xlink:href="http://canyamo.sourceforge.net">Canyamo</link>
              framework which uses FreeMarker templates for its presentation
              functionality.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://musikk.telenormobil.no">musikk.telenormobil.no</link>
              and <link
              xlink:href="http://mp3.platekompaniet.no">mp3.platekompaniet.no</link></td>

              <td>Together form Norway's second largest MP3-download
              shop.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.nadir.org">www.nadir.org</link></td>

              <td>Nadir is a German political news portal that uses the
              above-listed, FreeMarker based Mir CMS.</td>
            </tr>

            <tr valign="top">
              <td><link
              xlink:href="http://www.vogella.com">www.vogella.com</link></td>

              <td>Popular portal for tutorials, books and trainings on Java,
              Eclipse, Android and Web development.</td>
            </tr>
          </tbody>
        </informaltable>
      </simplesect>
    </section>

    <section xml:id="contribute">
      <title>Contributors wanted!</title>

      <para>As it's the case with many opens source projects, FreeMarker
      doesn't have and never had a payed staff, nor a backing corporate entity
      who finances it otherwise. It's ran by volunteers since it started in
      1999. So we are always looking for people to help FreeMarker to
      advance!</para>

      <section xml:id="how-to-contribute">
        <title>How do I contribute?</title>

        <para>First you should <link linkend="mailing-lists">subsrcribe to the
        developer mailing list</link> to discuss what you plan to do.</para>

        <para>Then, fork the project on Github, and start working on the
        appropriate branch (see <link linkend="sourcecode">the repositories
        and branches here</link>). See the <literal>README</literal> file in
        it for more information about building and IDE setup. When your
        contribution is ready, send a pull request on Github. Then we can
        still iterate over it until it becomes good enough for merging.</para>

        <para>Note that you will need an <link
        xlink:href="http://www.apache.org/dev/new-committers-guide.html#cla">Individual
        Contributor License Agreement (ICLA) or Corporate CLA at the Apache
        Software Foundation</link>, or else we can't merge in your
        contribution.</para>

        <para>For more generic guidelines, see <link
        xlink:href="http://www.apache.org/foundation/getinvolved.html">how to
        contribute to Apache projects</link>.</para>
      </section>

      <section xml:id="what-to-contribute">
        <title>What should I contribute?</title>

        <para>Usually, contributors come because they want to fix/improve a
        certain thing. But if you just want to help in general, here are some
        topics that are not (that) hard to jump into and are considered to be
        important:</para>

        <itemizedlist>
          <listitem>
            <para>Improve tooling:</para>

            <itemizedlist>
              <listitem>
                <para>Eclipse plugin. Either help improving the JBoss Tools
                <quote>FreeMarker IDE</quote> (<link
                xlink:href="https://issues.jboss.org/browse/JBIDE-20512?jql=project%20%3D%20JBIDE%20AND%20status%20in%20%28Open%2C%20%22Coding%20In%20Progress%22%2C%20Reopened%2C%20%22Pull%20Request%20Sent%22%29%20AND%20component%20%3D%20freemarker">see
                open issues</link>), or if you have serious ambitions, even
                start your own!</para>
              </listitem>

              <listitem>
                <para>IntelliJ plugin. Check how well it works (like support
                for recent FreeMarker features), try to find a way to
                contribute where needed.</para>
              </listitem>

              <listitem>
                <para>Plugin or syntax highlighter for you favorite editor
                (Notepad++, jEdit, VIM, etc.) that actually covers FTL
                reasonably well, and is legally properly contributed to the
                project.</para>
              </listitem>

              <listitem>
                <para>Online editor, syntax highlighter. This might means
                FreeMarker support for CodeMirror. This, among others, would
                be useful in the <olink
                targetdoc="onlineTemplateTester">online template
                tester</olink>.</para>
              </listitem>
            </itemizedlist>
          </listitem>

          <listitem>
            <para>Improve framework integration:</para>

            <itemizedlist>
              <listitem>
                <para>FreeMarker Spring MVC integration. Someone who know both
                well should keep an eye on this, improving it where
                necessary.</para>
              </listitem>

              <listitem>
                <para>FreeMarker Struts integration. Same as with Spring
                MVC.</para>
              </listitem>
            </itemizedlist>
          </listitem>

          <listitem>
            <para>Android support. This is related to the next two points
            too</para>
          </listitem>

          <listitem>
            <para>Bean introspection without
            <literal>javax.bean.Introspector</literal> (or in additionally to
            it). FreeMarker relies on this class for maximum conformance to
            the JavaBeans specs., however, its limitations start to hurt too
            much: It doesn't work on Android, it doesn't support Java 8
            default methods, and it's not lenient enough in many cases
            (<literal>Boolean isXxx</literal> doesn't work,
            <literal>xFoo</literal> is not a possible property name of
            <literal>getXFoo</literal>, etc.), it doesn't work with static
            methods (<literal>BeansWrapper.staticModels</literal>).</para>
          </listitem>

          <listitem>
            <para>Support for Java 8 date/time API-s (this is actually
            certainly a difficult one). Note that there's a 3rd party solution
            for this, <link
            xlink:href="https://github.com/amedia/freemarker-java-8">https://github.com/amedia/freemarker-java-8</link>,
            but it's not as seamless as a native solution could be.</para>
          </listitem>

          <listitem>
            <para><literal>javax.script</literal> (JSR-223) support</para>
          </listitem>

          <listitem>
            <para>Write <literal>TemplateLoader</literal> that loads from
            database (<literal>DataSource</literal>)</para>
          </listitem>

          <listitem>
            <para>Migrate build from Ant to Gradle. Or for Docgen an Site,
            Maven is certainly a good fit.</para>
          </listitem>

          <listitem>
            <para>Performance tests, to spot performance regressions.</para>
          </listitem>
        </itemizedlist>

        <para>Continuous activities that are always welcome:</para>

        <itemizedlist>
          <listitem>
            <para>Spotting mistakes in commits; more eyes see more</para>
          </listitem>

          <listitem>
            <para>Trying to break new features before they are released
            (finding bugs)</para>
          </listitem>

          <listitem>
            <para>Improve JUnit coverage where it's due</para>
          </listitem>

          <listitem>
            <para>Fixing typos in the documentation (includes JavaDoc!)</para>
          </listitem>

          <listitem>
            <para>Help users. This mostly means monitoring FreeMarker related
            questions on Stack Overflow.</para>
          </listitem>

          <listitem>
            <para>Pick a bug from the bug tracker, and squash it.</para>
          </listitem>

          <listitem>
            <para>Recommend using FreeMarker to others when there's a fitting
            task</para>
          </listitem>
        </itemizedlist>

        <para>Last but not least, FreeMarker needs long standing/returning
        contributors who tackle deeper issues.</para>
      </section>
    </section>

    <section xml:id="committer-howto">
      <title>Committer how-to</title>

      <para><emphasis>This page applies to Committers only, not to usual
      contributors.</emphasis> A Committer is a person with extra rights who
      receives his status via invitation. You don't need to be a Committer to
      contribute, anyone can fork and send pull requests on Github; see more
      on <link linkend="contribute">the page for contributors</link>.</para>

      <section xml:id="git-commit-policy">
        <title>Git commit policies</title>

        <para>Committers can commit directly into the Apache Git repository of
        FreeMarker, and so preferably don't use GitHub pull requests. (See
        <link linkend="sourcecode">the repositories and branches
        here</link>.)</para>

        <para>Committers have the technical permissions to commit directly
        into the <quote>main</quote> branch (or branches), and they are
        expected to use that wisely. Depending on the complexity of the
        feature, the number of active Committers in the time period, and
        whether the feature is experimental, they may should work in a feature
        branch instead. If the feature is finished and discussions were
        resolved (on some way described by Apache policies), it can be merged
        back into the <quote>main</quote> branch.</para>

        <para>All commits should have helpful comments; don't be afraid of
        writing long descriptions. If the commit is related to a Jira issue,
        the comment should start with the Jira issue identifier, like
        <quote>FREEMARKER-16: ...</quote></para>
      </section>

      <section xml:id="merging-pull-request">
        <title>Merging in pull requests from GitHub</title>

        <para>Pull requests from GitHub are merged in by Committers. Before
        accepting a pull request, ensure that:</para>

        <itemizedlist>
          <listitem>
            <para>The contributor has an ICLA or CCLA at Apache (see on <link
            xlink:href="http://people.apache.org/">http://people.apache.org/</link>)</para>
          </listitem>

          <listitem>
            <para>The contributor has used the proper branch of the project
            (it's sometimes overlooked)</para>
          </listitem>
        </itemizedlist>

        <para>To merge the pull request:</para>

        <programlisting language="unknown">git pull --no-ff https://github.com/apache/&lt;PROJECT&gt; refs/pull/&lt;PR_NUMBER&gt;/head</programlisting>

        <para>Where:</para>

        <itemizedlist>
          <listitem>
            <para><literal> <replaceable>&lt;PROJECT&gt;</replaceable>
            </literal>is usually
            <literal>incubator-freemarker</literal></para>
          </listitem>

          <listitem>
            <para><literal> <replaceable>&lt;PR_NUMBER&gt;</replaceable>
            </literal>is the pull request number that GitHub shows prominently
            after a <quote>#</quote></para>
          </listitem>
        </itemizedlist>

        <para>The commit comment should automatically describe that it's a
        merge and where it was merged from. After that you may also want to
        add a summary of what the merged branch does.</para>

        <para>In general, pull request merge commits should adhere to the same
        policies that Committers use to commit directly into the Apache git
        repository.</para>

        <para>Pushing the merge commit to the ASF repo will automatically
        close the pull request on Github.</para>
      </section>

      <section xml:id="close-pull-request-without-merging">
        <title>Closing GitHub pull requests without merging</title>

        <programlisting language="unknown">git commit --allow-empty -m "closes apache/&lt;PROJECT&gt;#&lt;PR_NUMBER&gt;: &lt;WHY&gt;"</programlisting>

        <para>Where:</para>

        <itemizedlist>
          <listitem>
            <para><literal> <replaceable>&lt;PROJECT&gt;</replaceable>
            </literal>is usually
            <literal>incubator-freemarker</literal></para>
          </listitem>

          <listitem>
            <para><literal> <replaceable>&lt;PR_NUMBER&gt;</replaceable>
            </literal>is the pull request number that GitHub shows prominently
            after a <quote>#</quote></para>
          </listitem>

          <listitem>
            <para><literal> <replaceable>&lt;WHY&gt;</replaceable>
            </literal>is the reason of the closing. For clarity, you may want
            to end it with <quote>Closed PR without merging.</quote> or
            something similar.</para>
          </listitem>
        </itemizedlist>
      </section>

      <section xml:id="making-releases">
        <title>Making releases</title>

        <para>For each release, one of the Committers takes on the role of
        Release Manager. The Release Manager should follow the procedure here,
        and should update this page where they has to deviate from it.</para>

        <para>For general info about making releases, please read <link
        xlink:href="http://www.apache.org/legal/release-policy#archived">http://www.apache.org/legal/release-policy</link>
        and <link
        xlink:href="http://incubator.apache.org/guides/releasemanagement.html">http://incubator.apache.org/guides/releasemanagement.html</link>.
        The FreeMarker-specific additions to those are:</para>

        <itemizedlist>
          <listitem>
            <para>Releases with non-trivial changes should have at least one
            Release Candidate (RC01) release, which is legally a normal
            release (not just a internal/developer one), and is promoted for
            at least 1 month on our web page. The differences to a final
            release are these:</para>

            <itemizedlist>
              <listitem>
                <para>RC-s aren't released to the Maven Central
                Repository</para>
              </listitem>

              <listitem>
                <para>RC documentation (Manual + JavaDoc) is only published
                under
                http://freemarker.org/builds/<replaceable>X.X.X</replaceable>-rc<replaceable>X</replaceable>/</para>
              </listitem>
            </itemizedlist>
          </listitem>

          <listitem>
            <para>The official release is provided as source code to build the
            project (src tar.gz). For the convenience of users the release is
            also accompanied by compiled binaries (bin tar.gz, which also
            contains the documentation). Both artifacts are downloadable from
            the Apache Software Foundation, as usual.</para>
          </listitem>

          <listitem>
            <para>The same two artifacts should also be released (uploaded for
            download) on <link
            xlink:href="https://sourceforge.net/projects/freemarker/">https://sourceforge.net/projects/freemarker/</link>.
            We add a note there to indicate that the canonical download is the
            one from Apache.</para>
          </listitem>

          <listitem>
            <para>Releases should have a usual jar artifact, an src artifact
            and javadoc artifact either in the Apache Maven staging repository
            (for RC-s), or in the Maven Central Repository (for
            finals).</para>
          </listitem>

          <listitem>
            <para>In the 2.3.x branch, we release two products, the normal and
            the GAE (Google App Engine) version. Hence when executing the
            release steps, you do many of them twice. Changes are made into
            the 2.3-gae branch, and then they are merged into the 2.3 branch
            (unless a change only applies to 2.3).</para>
          </listitem>
        </itemizedlist>

        <para>The steps of making a release:</para>

        <orderedlist>
          <listitem>
            <para>Check that <literal>version.properties</literal> is up to
            date.</para>
          </listitem>

          <listitem>
            <para>Ensure that the version number in the title and version
            history of the Manual is up to date. Also the release date in the
            Manual in the version history has to be updated. That's tricky as
            you can't know it exactly, yet you can't change it when the actual
            release is about to be done, as that would change the release
            artifacts that were voted upon. So write the current date and
            <quote>+ release process</quote> after it; that's how it will be
            in the released artifacts.</para>
          </listitem>

          <listitem>
            <para>Ensure that all changes in the 2.3-gae branch were merged
            into the 2.3 branch.</para>
          </listitem>

          <listitem>
            <para><literal>ant update-deps</literal></para>
          </listitem>

          <listitem>
            <para><literal>ant dist</literal></para>
          </listitem>

          <listitem>
            <para><literal>ant rat</literal>, check output</para>
          </listitem>

          <listitem>
            <para>Compare the jar to the earlier stable release for API
            compatibility issues (both source and binary level). So far we
            have used <link
            xlink:href="https://lvc.github.io/japi-compliance-checker/"><quote>Java
            API Compliance Checker</quote> (JAPICC)</link> with these
            arguments: <literal>-keep-internal -skip-internal-types \._ -l
            FreeMarker <replaceable>old</replaceable>.jar
            <replaceable>new</replaceable>.jar</literal>. Note that it's prone
            to generate false alarms, so simply review each problems and
            decide which is real.</para>
          </listitem>

          <listitem>
            <para>Ensure that this is up to date:
            https://dist.apache.org/repos/dist/<replaceable>{dev,release}</replaceable>/incubator/freemarker/KEY</para>
          </listitem>

          <listitem>
            <para>SVN commit the release files into the proper subdirectory of
            https://dist.apache.org/repos/<emphasis
            role="bold">dist</emphasis>/dev/incubator/freemarker. Note that
            this is <quote>dev/</quote>, not <quote>release/</quote>!</para>
          </listitem>

          <listitem>
            <para>Upload to ASF Nexus staging</para>

            <orderedlist>
              <listitem>
                <para>If your Maven <literal>settings-security.xml</literal>
                is relocated to an encrypted storage (recommended), mount it,
                otherwise you will get 401 error when uploading.</para>
              </listitem>

              <listitem>
                <para><literal>ant maven-dist</literal></para>
              </listitem>

              <listitem>
                <para>Go to <link
                xlink:href="http://repository.apache.org/">http://repository.apache.org/</link>,
                log in, chose <quote>Staging Repositories</quote>, find and
                click the repository just created. Check the upload files
                manually (on the <quote>Content</quote> tab). Then
                <quote>Close</quote> the repository. Press
                <quote>Refresh</quote> until it's successfully
                <quote>closed</quote>.</para>
              </listitem>
            </orderedlist>
          </listitem>

          <listitem>
            <para>Upload the release documentation under
            http://freemarker.org/builds/<replaceable>X.X.X</replaceable>-voting/documentation/
            (see
            https://git-wip-us.apache.org/repos/asf/incubator-freemarker-site.git,
            <quote>asf-site</quote> branch). The change log will be a link
            pointing to a page inside this.</para>
          </listitem>

          <listitem>
            <para>Voting on the FreeMarker developer list (the podling project
            list)</para>

            <orderedlist>
              <listitem>
                <para>Start a thread on the FreeMarker developer mailing list
                with subject <quote>[VOTE] Release Apache FreeMarker
                <replaceable>X.X.X</replaceable> (incubating)</quote>. You
                should use an earlier release vote mail as a template.</para>
              </listitem>

              <listitem>
                <para>Needs at least 3 +1 from PPMC (Podling PMC) members,
                majority win, and minimum 72 hours (but see Apache
                policies)</para>
              </listitem>

              <listitem>
                <para>Post <quote>[RESULT][VOTE]</quote> mail to the
                FreeMarker developer list. Again, you should use an earlier
                release vote result mail as a template.</para>
              </listitem>

              <listitem>
                <para>If it was a failed vote, after fixing the issues, the
                release process restarts with a different dist.apache.org
                URL-s (add an attempt number to the directory for
                example)</para>
              </listitem>
            </orderedlist>
          </listitem>

          <listitem>
            <para>If the voting on the the FreeMarker developer list has
            passed, start similar <quote>[VOTE]</quote> thread on
            general@incubator</para>

            <orderedlist>
              <listitem>
                <para>Use an earlier FreeMarker release vote mail as the
                template. Some notes:</para>

                <itemizedlist>
                  <listitem>
                    <para>Use your apache.org e-mail address as the
                    sender</para>
                  </listitem>

                  <listitem>
                    <para>Include short project description</para>
                  </listitem>

                  <listitem>
                    <para>Link the FreeMarker developer mailing list
                    <quote>[RESULT][VOTE]</quote> mail</para>
                  </listitem>

                  <listitem>
                    <para>Link artifacts. The src artifact is the release
                    that's voted upon. The bin is for convenience only.</para>
                  </listitem>

                  <listitem>
                    <para>Include and link via the Git commit
                    <emphasis>hash</emphasis></para>
                  </listitem>

                  <listitem>
                    <para>Link the change log (page under
                    http://freemarker.org/builds/<replaceable>X.X.X</replaceable>/)</para>
                  </listitem>

                  <listitem>
                    <para>Specify Maven staging coordinates</para>
                  </listitem>
                </itemizedlist>
              </listitem>

              <listitem>
                <para>Needs at least 3 binding +1, majority wins, at least 72
                hours has passed</para>
              </listitem>

              <listitem>
                <para>Post <quote>[RESULT][VOTE]</quote> to general@incubator.
                Use an earlier such mail as template. Some notes:</para>

                <itemizedlist>
                  <listitem>
                    <para>Use your apache.org e-mail address as the
                    sender</para>
                  </listitem>

                  <listitem>
                    <para>Include short project description</para>
                  </listitem>
                </itemizedlist>
              </listitem>

              <listitem>
                <para>If it was a failed vote, after fixing the issues, the
                release process restarts with a different dist.apache.org
                URL-s (add an attempt number to the directory for
                example)</para>
              </listitem>
            </orderedlist>
          </listitem>

          <listitem>
            <para>Copy the release files over from
            https://dist.apache.org/repos/dist/<emphasis
            role="bold">dev</emphasis>/incubator/freemarker into the proper
            subdirectory of https://dist.apache.org/repos/dist/<emphasis
            role="bold">release</emphasis>/incubator/freemarker and commit
            them. (Of course get rid of any voting attempt numbers in the
            directory names.) Now they should appear under <link
            xlink:href="http://www.apache.org/dist/incubator/freemarker/">http://www.apache.org/dist/incubator/freemarker/</link>.</para>
          </listitem>

          <listitem>
            <para>Go to <link
            xlink:href="https://repository.apache.org/">https://repository.apache.org/</link>
            and find the staging repository that belongs to the voted version.
            Select it, press <quote>Release</quote> at the top. Now the
            repository should appear under <link
            xlink:href="https://repository.apache.org/content/repositories/releases/org/freemarker/">https://repository.apache.org/content/repositories/releases/org/freemarker/</link>
            Later (like hours later) it will appear in the Maven Central
            Repository too.</para>
          </listitem>

          <listitem>
            <para>Wait 24 hours so that the mirrors get synced. Check <link
            xlink:href="http://www.apache.org/dist/incubator/freemarker/">http://www.apache.org/dist/incubator/freemarker/</link>
            and <link
            xlink:href="http://archive.apache.org/dist/">http://archive.apache.org/dist/</link>.
            Check Maven Central repository too (in the case of non-RC
            releases).</para>
          </listitem>

          <listitem>
            <para>Delete the non-latest release of each maintained branch from
            http://www.apache.org/dist/incubator/freemarker/ (Old ones are
            automatically available on http://archive.apache.org/dist/)</para>
          </listitem>

          <listitem>
            <para>Tag the release on Git (see earlier tags for the tag name
            format). Be careful not to tag a commit made since the voting has
            succeeded.</para>
          </listitem>

          <listitem>
            <para>Update http://freemarker.org:</para>

            <itemizedlist>
              <listitem>
                <para>Add the release to the download section.</para>
              </listitem>

              <listitem>
                <para>Upload latest JavaDoc</para>
              </listitem>

              <listitem>
                <para>Update release date in the Manual, regenerate it.</para>
              </listitem>

              <listitem>
                <para>Upload the new Manual (the online version, that is, the
                one made with <literal>ant
                manualFreemarkerOrg</literal>)</para>
              </listitem>
            </itemizedlist>
          </listitem>

          <listitem>
            <para>Update other web pages:</para>

            <itemizedlist>
              <listitem>
                <para>Release on sourceforge.net. The README.md should note
                that it's for convenience only, and point to the official
                download page.</para>
              </listitem>

              <listitem>
                <para>Update Apache project status page:</para>

                <orderedlist>
                  <listitem>
                    <para>Update and commit:
                    https://svn.apache.org/repos/asf/incubator/public/trunk/content/projects/freemarker.xml</para>
                  </listitem>

                  <listitem>
                    <para>Republish:
                    https://cms.apache.org/incubator/publish</para>
                  </listitem>
                </orderedlist>
              </listitem>

              <listitem>
                <para>Update <link
                xlink:href="https://en.wikipedia.org/wiki/FreeMarker">https://en.wikipedia.org/wiki/FreeMarker</link></para>
              </listitem>
            </itemizedlist>
          </listitem>

          <listitem>
            <para>Announce:</para>

            <itemizedlist>
              <listitem>
                <para>On the FreeMarker developer list</para>
              </listitem>

              <listitem>
                <para>On announce@apache.org (see <link
                xlink:href="https://lists.apache.org/list.html?announce@apache.org">https://lists.apache.org/list.html?announce@apache.org</link>
                for examples).</para>
              </listitem>

              <listitem>
                <para>On <link
                xlink:href="https://twitter.com/freemarker">https://twitter.com/freemarker</link></para>
              </listitem>

              <listitem>
                <para>On the old FreeMarker mailing lists: freemarker-user,
                freemarker-devel, freemarker-announce</para>
              </listitem>
            </itemizedlist>
          </listitem>
        </orderedlist>
      </section>

      <section xml:id="deploy-snapshot">
        <title>Deploying Maven SNAPSHOT versions</title>

        <para>After you have merged/committed your changes to the respectable
        branch, you may want to publish that version to <link
        xlink:href="https://repository.apache.org/content/repositories/snapshots">https://repository.apache.org/content/repositories/snapshots</link>.
        Users or fellow developers can use this Maven repository to try
        snapshot versions.</para>

        <para>To publish the snapshot version, fist check that
        <literal>version.properties</literal> contains the proper version,
        most importantly, that <literal>mavenVersion</literal> ends with
        <literal>-SNAPSHOT</literal>. (If not, it will deploy to the release
        staging repository.) Then issue <literal>ant dist
        maven-dist</literal>. (Note that just as with a real release, the
        artifacts will be signed with PGP.)</para>
      </section>

      <section xml:id="updating-homepage">
        <title>Updating the FreeMarker home page</title>

        <para>The content of the home page can be changed by committing it
        into the <literal>asf-site</literal> branch of the
        <literal>freemarker-site</literal> repository. However, you shouldn't
        directly edit the content of most HTML files there, as pretty much all
        of them are generated, and then is just manually copied over there.
        The generated pieces are:</para>

        <itemizedlist>
          <listitem>
            <para>The contents of the <literal>docs/api</literal> is generated
            from the <literal>freemarker</literal> project, by issuing
            <literal>ant javadoc</literal> there (not in the
            <literal>site</literal> project). So to change the content, you
            should edit the documentation comments in the java files.</para>
          </listitem>

          <listitem>
            <para>The contents of <literal>docs/</literal> is generated from
            the <literal>freemarker</literal> project, by issuing <literal>ant
            manualFreemarkerOrg</literal>. So to change the content, you
            should edit
            <literal><replaceable>&lt;freemarker-project&gt;</replaceable>/src/manual/en_US/book.xml</literal>.</para>
          </listitem>

          <listitem>
            <para>Most other content is generated from the
            <literal>site</literal> project, by issuing
            <literal>ant</literal>. So to change the content, you should edit
            <literal><replaceable>&lt;site-project&gt;</replaceable>/src/docgen/book.xml</literal>.
            To ensure that you are using the latest Docgen, you may want to
            issue <literal>ant update-deps</literal> before generating.</para>
          </listitem>
        </itemizedlist>

        <para>After you commit into the <literal>asf-site</literal> branch of
        the <literal>freemarker-site</literal> repository, it will
        automatically appear on the web site, with some small delay (a few
        seconds usually). If it doesn't, that's probably because of a known
        infrastructural glitch, where for too big commits this synchronization
        doesn't happen. In such case, commit some small change to trigger
        synchronization again.</para>
      </section>

      <section xml:id="updating-docgen">
        <title>Updating Docgen</title>

        <para>Docgen (<literal>freemarker-docgen</literal> Git repository)
        generates HTML from a DocBook XML. It's a dependency of FreeMarker
        binary release building (as that contains the Manual in HTML format)
        and of <literal>freemarker-site</literal>.</para>

        <para>Docgen is not published to the Maven Central Repository, as it's
        only used as an internal build dependency. Currently, it's published
        manually to the internal Ivy repository of the project, which is under
        http://freemarker.org/repos/ivy/. If you modify Docgen, don't forget
        to publish there, or else the next site update or FreeMarker release
        will use an outdated version. For that:</para>

        <orderedlist>
          <listitem>
            <para><literal>ant server-publish-last-build</literal></para>
          </listitem>

          <listitem>
            <para>Upload the content of the resulting
            <literal>build\dummy-server-ivy-repo</literal> directory to
            <literal>http://freemarker.org/repos/ivy/</literal>. See how to
            update the contents of freemarker.org <link
            linkend="updating-homepage">here...</link></para>
          </listitem>

          <listitem>
            <para>If you want to use the published version in the
            <literal>freemarker</literal> or
            <literal>freemarker-site</literal> projects, don't forget to issue
            <literal>ant update-deps</literal> there, or else they will keep
            using their local copy of the last obtained version.</para>
          </listitem>
        </orderedlist>
      </section>

      <section xml:id="edit-docbook">
        <title>Regarding editing the Manual and the Site DocBook</title>

        <para>Both the site and the Manual is generated from the XML files
        (DocBook format) by the custom Ant task defined in the
        <literal>docgen</literal> project
        (<literal>freemarker-docgen</literal> repository). That project also
        provides an XMLMind XML Editor (XXE for short) addon for editing these
        files. For more guide lines see
        <literal>src/manual/en_US/docgen-help/editors-readme.txt</literal> in
        the <literal>freemarker</literal> repository. About the same guide
        lines apply to the site DocBook as well.</para>
      </section>

      <section xml:id="handle-security-vulnerabilities">
        <title>Dealing with security vulnerabilities</title>

        <para>If someone reports a security vulnerability, normally they
        shouldn't do it on a public forum (<link
        linkend="report-security-vulnerabilities">see how to report it
        here</link>), and similarly we shouldn't discuss it on a public forum
        (such as on the developer mailing list), but on the private mailing
        list of the project. Thus the vulnerability can be fixed and released
        before it's openly discussed. As a developer, you must not forget that
        commits are also publicly visible. How to commit, release, and
        communicate a concrete vulnerability should be discussed on the
        private mailing lists of the project before doing publicly visible
        moves. See <link
        xlink:href="https://www.apache.org/security/committers.html">this
        page</link> for further guidelines.</para>
      </section>
    </section>
  </chapter>

  <chapter>
    <title>Miscellaneous</title>

    <section xml:id="sourcecode">
      <title>Source code (Git)</title>

      <para>The key project repositories are at the Apache Software
      Foundation, as part of the <link
      xlink:href="http://incubator.apache.org/">Apache Incubation</link>
      effort. These Apache repositories are mirrored back to GitHub
      (read-only), which is practical for sending patches via usual GitHub
      forking and pull requests. The key repositories are:</para>

      <itemizedlist>
        <listitem>
          <para><literal>freemarker</literal>: The engine itself (i.e.,
          <literal>freemarker.jar</literal>) and the documentation. URL:
          <olink targetdoc="gitFreemarker"/>. GitHub mirror: <olink
          targetdoc="githubMirrorFreemarker"/>. Relevant branches (as of
          2015-09-04):</para>

          <itemizedlist>
            <listitem>
              <para><literal>2.3-gae</literal>: FreeMarker 2.3.x Google App
              Engine compliant variant. <emphasis role="bold">Develop here by
              default!</emphasis> This is where most developments are
              committed, and are then merged into the other two branches
              below.</para>
            </listitem>

            <listitem>
              <para><literal>2.3</literal>: FreeMarker 2.3.x,
              <quote>normal</quote> variant (this is what most users use). We
              hardly ever commit into this directly, instead changes are
              coming from<literal>2.3-gae</literal> via merging.</para>
            </listitem>

            <listitem>
              <para><literal>3</literal>: FreeMarker 3.x.x. The next
              generation of FreeMarker, heavily under development. <link
              xlink:href="https://cwiki.apache.org/confluence/display/FREEMARKER/FreeMarker+3">More
              about FreeMarker 3...</link></para>
            </listitem>
          </itemizedlist>
        </listitem>

        <listitem>
          <para><literal>freemarker-site</literal>: Web site (freemarker.org)
          contents. URL: <olink targetdoc="gitSite"/>. GitHub mirror: <olink
          targetdoc="githubMirrorSite"/>. Relevant branches:
          <literal>master</literal></para>
        </listitem>

        <listitem>
          <para><literal>freemarker-docgen</literal>: DocBook transformation
          used for generating both the FreeMarker Manual and the Web site.
          URL: <olink targetdoc="gitDocgen"/>. GitHub mirror: <olink
          targetdoc="githubMirrorDocgen"/>. Relevant branches:
          <literal>master</literal></para>
        </listitem>
      </itemizedlist>

      <para>There are some other FreeMarker-related repositories, such FMPP
      and Tutorials, which you can only find on the <olink
      targetdoc="githubProjectOld">old GitHub project</olink> page, as they
      aren't part of the ongoing Apache Incubation effort.</para>

      <para><emphasis>Disclaimer: Apache FreeMarker is an effort undergoing
      incubation at The Apache Software Foundation (ASF). Incubation is
      required of all newly accepted projects until a further review indicates
      that the infrastructure, communications, and decision making process
      have stabilized in a manner consistent with other successful ASF
      projects. While incubation status is not necessarily a reflection of the
      completeness or stability of the code, it does indicate that the project
      has yet to be fully endorsed by the ASF.</emphasis></para>
    </section>

    <section xml:id="history">
      <title>Project history</title>

      <para>Development history, key contributors:</para>

      <itemizedlist>
        <listitem>
          <para>Later 1999, FreeMarker 1 has appeared on SourceForge.net. It
          was originally written by Benjamin Geer and Mike Bayer. They defined
          the basic syntax, and more importantly, the philosophy of the tool
          that is carried on in FreeMarker 2. Significant contributions to
          FreeMarker 1 were made by Nicholas Cull, Holger Arendt and
          others.</para>
        </listitem>

        <listitem>
          <para>In early 2002, Jonathan Revusky rewrote the core
          (parser/compiler) code using a popular parser generator tool,
          JavaCC. This was really the basis of FreeMarker 2, which, though was
          initially largely backward compatible with FreeMarker 1, is
          virtually a complete rewrite. <link
          xlink:href="http://www.szegedi.org/">Attila Szegedi</link> has made
          significant contributions to the FreeMarker 2. Besides refactoring
          and optimizing some of the core API's, Attila is the main author of
          the date/time support, <literal>freemarker.ext.*</literal> packages
          responsible for JavaBeans, Jython, and XML mappings, as well as for
          HTTP servlet, JSP and Ant integration. Dániel Dékány is the main
          author of the documentation, and has influenced many new features of
          FreeMarker 2, and has helped in maintenance work. Many ideas and
          feedback were provided by the various participants on the
          freemarker-devel and freemarker-user mailing lists, like <link
          xlink:href="http://sixlegs.com/">Chris Nokleberg</link>, <link
          xlink:href="http://stephan.notatoaster.org/">Stephan Mueller</link>,
          and many others.</para>
        </listitem>

        <listitem>
          <para>Since 2011, Dániel Dékány does most of the maintenance work
          and new features.</para>
        </listitem>
      </itemizedlist>

      <para>Legal history:</para>

      <itemizedlist>
        <listitem>
          <para>FreeMarker 1 was licensed under LGPL, and was copyright by
          Benjamin Geer.</para>
        </listitem>

        <listitem>
          <para>By community consensus, FreeMarker 2 was released under a more
          liberal BSD-style license. Benjamin Geer remained the copyright
          holder of FreeMarker versions 2.0.x and 2.1.x. It was decided that,
          since we did not at that point have a juridical entity (such as the
          Apache Foundation) to play this role, that Benjamin Geer would
          continue to be the sole copyright holder, make any future license
          changes or clarifications simpler.</para>
        </listitem>

        <listitem>
          <para>As of FreeMarker 2.2, the copyright holder of the FreeMarker
          codebase was the Visigoth Software Society (VSS), a non-profit
          association based in Spain, and co-founded by Jonathan Revusky in
          December of 2002. Benjamin Geer graciously agreed to cede the
          copyright to VSS on the understanding that it would remain available
          under a liberal open-source license. The terms of the license remain
          the same.</para>
        </listitem>

        <listitem>
          <para>As of FreeMarker 2.3.21 (released at 2014-10-12), the license
          has changed to the Apache License, Version 2.0, and the owner has
          changed from Visigoth Software Society to the three main FreeMarker
          2 developers, Attila Szegedi, Daniel Dekany, and Jonathan Revusky.
          The change was needed because the old BSD-style license wasn't OSI
          approved, and because of the inactivity of the Visigoth Software
          Society association.</para>
        </listitem>

        <listitem>
          <para>Around 2015-07-01, FreeMarker was voted in into the <link
          xlink:href="http://incubator.apache.org/">Apache Incubator</link>,
          and the project (all code from which the releases and the Web site
          are created, along with the right for using the
          <quote>FreeMarker</quote> product name) was granted to the Apache
          Software Foundation by the earlier owners. The license remains
          Apache License, Version 2.0. In 2015-09-02, the main code base was
          imported from GitHub into the Apache Software Foundation
          infrastructure, where development continues.</para>

          <para><emphasis>Disclaimer: Apache FreeMarker is an effort
          undergoing incubation at The Apache Software Foundation (ASF).
          Incubation is required of all newly accepted projects until a
          further review indicates that the infrastructure, communications,
          and decision making process have stabilized in a manner consistent
          with other successful ASF projects. While incubation status is not
          necessarily a reflection of the completeness or stability of the
          code, it does indicate that the project has yet to be fully endorsed
          by the ASF.</emphasis></para>
        </listitem>
      </itemizedlist>
    </section>

    <section>
      <title><olink targetdoc="sourceforgeProject">Sourceforge.net project
      page</olink></title>

      <para/>
    </section>
  </chapter>
</book>
