Contact:  David Welton
          Apache Software Foundation
          +39.348.8866859
          davidw@apache.org

              APACHE SOFTWARE FOUNDATION LAUNCHES APACHE TCL PROJECT

February 12, 2001

The Apache Software Foundation today announced the launch of the
Apache Tcl project, with the goal of promoting the integration of the
Apache web server with the Tcl scripting language.

Tcl (tool command language, pronounced "tickle") is an open-source,
cross-platform scripting language Tcl has a strong history of use for
the web, with products such as AOLserver, and the widely used
StoryServer. Combined with Apache, the world's most popular web
server, Tcl will make an excellent companion for back-end scripting
tasks.

"Tcl is a great language for the web - it's small, light, easy to
learn, and has been used, developed and tested for a number of years"
said David Welton, vice president of Apache Tcl and author of
mod_dtcl. "It also has a large user base, and is a very active open
source project in its own right."

tcl.apache.org will serve as a point of reference for Apache-Tcl
efforts, initially hosting the mod_dtcl project, a fast and light
implementation of Tcl for Apache. The project was initially modeled
after PHP, a server-side, cross-platform, HTML embedded scripting
language.

About Tcl

Tcl, was created by John K. Ousterhout at the University of California
at Berkeley in 1988. Originally conceived as a reusable, embeddable
language core for tools being developed by Dr. Ousterhout and his
colleagues, it has come to be much more. Tcl is used today in a wide
variety of applications including web scripting, test automation,
network/system management, EDA and CAD, and in many other fields.

For more information about Tcl, see http://tcl.activestate.com.

About the Apache Software Foundation

Founded in June 1999, the Apache Software Foundation provides
organizational, legal, and financial support for the Apache
open-source software projects.  Formerly known as the Apache Group,
the Foundation incorporated as a membership-based, not-for-profit
corporation to ensure that the Apache projects continue to exist
beyond the participation of individual volunteers, to enable
contributions of intellectual property and financial support, and to
provide a vehicle for limiting legal exposure while participating in
open-source projects.

For more information on the Apache Software Foundation, please see
http://www.apache.org/.

###