THE APACHE SOFTWARE FOUNDATION'S "APACHE WAY"
CONTINUES TO GAIN MOMENTUM, RECOGNITION, AND INFLUENCE
ON THE FUTURE OF OPEN SOURCE TECHNOLOGIES

FOREST HILL MD – 17 June 2008 – The Apache Software
Foundation (ASF) -- stewards, incubators, and
developers of leading Open Source projects -– today
announced that both the organization's community and
its meritocratic process (known as "the Apache Way")
continues to gain recognition as one of the most
influential, prominent, and innovative leaders in Open
Source.

A midyear review of the initiatives underway at the
all-volunteer Foundation showed that not only does the
Apache HTTP Server continue to be the world's most
popular Web server software, but numerous ASF Projects
lead the way in Open Source technology, and the ASF
community is also playing a vital role in championing
the collaborative development of consensus-driven,
enterprise-grade solutions.

"The demand for quality Open Source products continues
to grow," said ASF Chairman Jim Jagielski. "A
significant number of organizations depend on
Apache-developed solutions. As the landscape continues
to evolve, through our thought leadership,
well-established process, and ability to spearhead new
projects while maintaining an active, healthy
community, we're poised to successfully deliver
software that meets the demands of the marketplace and
helps our users achieve their business goals."

The newly-redesigned ASF Website
(http://www.apache.org/) reflects how the Apache Way
is realized through its new tagline, "Meritocracy in
Action": more than 1,500 ASF Committers and countless
contributors and users collaborate to the development
of Apache-related activities across the Open Source
landscape. The ASF are responsible for millions of
lines of code and roughly one dozen servers comprising
its infrastructure; nearly 500 community-driven
modules have been developed to extend functionality of
the Apache HTTP Server alone.

2008 ACHIEVEMENTS TO DATE

Board: The ASF recently held its Members' Meeting that
included the election of the following Members to the
ASF Board of Directors: Bertrand Delacretaz, Justin
Erenkrantz, J. Aaron Farr, Jim Jagielski, Geir
Magnusson Jr., William Rowe Jr., Sam Ruby, Henning
Schmiedehausen, and Greg Stein.

The annually-elected ASF Board oversees the management
of the Foundation; in turn, the Board appoints a set
of officers to manage the day-to-day operations and
oversee ASF Projects and initiatives.

Membership: The founding 21 individuals who oversaw
the development of the Apache HTTP Server formed the
Foundation's core membership. The group grew with the
addition of "Committers": developers who contributed
code, patches, or documentation, and were subsequently
granted access by the Membership to: 1) "commit" or
"write" directly to the code repository; 2) to vote on
community-related decisions; and 3) propose an active
user for Committership. Committers who demonstrate
merit in the Foundation's growth, evolution, and
progress are nominated for ASF Membership by existing
members.

The ASF as a whole, including its Board, Officers,
Members, and Committers, is composed of individuals
participating solely on behalf of the Foundation.
Whilst corporations are unable to qualify for
Membership, those contributing to ASF projects who are
employed by corporate entities are able to participate
in ASF activities during "work time", but are expected
to act as individuals, independent of their employer,
unless stated otherwise under very specific
circumstances. A key strength of the ASF is that
affiliations do not cloud personal contributions – a
prescript that applies to all Members.

The recent ASF Membership vote closed with the
election of 17 new Members, totaling 276.

Sponsorship: The ASF is a private, 501(c)(3)
non-profit charitable organization, funded solely
through tax-deductible contributions from
corporations, foundations, and individuals. To help
offset day-to-day operating expenses, The ASF created
its Sponsorship Program in late 2006. The Foundation
welcomed two new sponsors:

 - Silver Level: IONA Technologies (NASDAQ: IONA), and
 - Bronze Level: Matt Mullenweg

… to the following organizations and individuals whose
generous contributions continue to help advance the
work of The ASF:

 - Platinum Level: Google (NASDAQ: GOOG), Yahoo!
(NASDAQ: YHOO)
 - Gold Level: HP (NYSE: HPQ)
 - Silver Level: Covalent
 - Bronze Level: AirPlus International, Tetsuya
Kitahata, and Two Sigma Investments


ApacheCon: Now in its tenth year, the official user
and developer conference, trainings, and expo of The
Apache Software Foundation continues to explore some
of the hottest topics in Open Source. The continued
interest and increased adoption of Open Source
technologies in Europe is reflected in the success of
ApacheCon Europe held in Amsterdam in April, which
boasted an increase in participation by 40%. ApacheCon
US will be held in New Orleans on 3-7 November 2008,
and will feature several enhancements to bring the
Apache community of developers and users together,
including expanded tracks, more Fast Feather
presentations, the OFBiz Symposium (a dedicated
"track" to the Apache Open For Business Project's
suite of enterprise applications), as well as
CampApache (a one-day, ad-hoc gathering with
discussions, demos and interaction from participants
to share and learn in an open environment).

Community Outreach: For the third consecutive year,
the ASF is participating in the Google Summer of Code.
As part of its ongoing mentorship on "the Apache Way",
32 ASF representatives have paired up with student
developers from Algeria, Austria, Brazil, China,
Croatia, France, India, Hungary, the Netherlands,
Norway, Poland, Russia, Sri Lanka, the Ukraine, and
the United States for the opportunity to collaborate
on 78 different tasks using Apache Projects such as
Axis2, Cayenne, Derby, Harmony, ODE, Roller, Sling,
Solr, Tuscany, and Xerces2-J, as well as several
projects in the Apache Incubator.

In addition, the Foundation had participated in the
Google Highly Open Participation (GHOP) Contest, which
concluded in February. This initiative tasked nearly
400 pre-university students worldwide to produce a
variety of Open Source code, documentation, training
materials and user experience research for ten
participating organizations, including the ASF.
Spencer Davis, GHOP Grand Prize winner chosen from the
ASF's student contestants, will be joined by Bertrand
Delacretaz, GHOP project administrator for the ASF, at
the competition’s awards ceremony in July.

Project Achievements: With just two Projects (Apache
HTTP Server, and the ApacheCon Conference Planning
committee) at its inception, The ASF today comprises
62 Top-Level Projects (TLPs), 24 projects under
Incubation (comprising both the codebase and its
community, known as Podlings), and 20 active
initiatives registered in the Apache Labs.

Each ASF Project is managed by a self-selected team of
technical experts who actively contribute to the
project according to the guidelines for collaborative
development best suited to that particular project.
The day-to-day activity of each TLP (and any
sub-projects) is overseen by Project Management
Committees (PMCs).

For twelve years running, the Apache HTTP Server
remains the #1 Web server, powering more than 75
million Websites across the Internet, according to the
Netcraft May 2008 Web Server Survey. In addition, the
1 June Web Server Survey by Security Space shows that
Apache continues to hold 74% market penetration across
all Web Server domains.

Both Incubating- and sub-projects continue to go from
strength to strength. The following initiatives have
graduated to ASF Top-Level Projects (TLPs):

 - Apache Hadoop (sub-project of Apache Lucene; PMC
Chair: Owen O'Malley) — January 2008
 - Apache Continuum (sub-project of Apache Maven; PMC
Chair: Emmanuel Venisse) — February 2008
 - Apache Archiva (sub-project of Apache Maven; PMC
Chair: Maria Odea Ching) — March 2008
 - Apache CXF (from the Apache Incubator; PMC Chair:
Daniel Kulp) — April 2008
 - Apache Tuscany (sub-project of Apache Web Services;
PMC Chair: Ant Elder) — May 2008

Additional Project announcements include the release
of: Apache HTTP Server 2.2.9; Apache Cocoon 2.2.0;
Apache Portable Runtime 1.3.0; Apache Lucene Java
2.3.0; Apache Harmony 5.0M6; Apache Lenya 2.0; Apache
CXF 2.1; Apache Wicket 1.3; Apache Jackrabbit 1.4;
Apache Batik 1.7; Apache Axis2/C 1.3.0; Apache QPid
2.1.

Recognition and Awards: The ASF continues to garner
ongoing recognition by editors, technical experts,
writers, analysts, and other industry influencers. The
"buzz" generated by many of The ASF's Projects are
testament to its innovation and leadership within the
Open Source community. Recent awards include:

 - Java Community Process (JCP) Member of the Year
The ASF won its third Member of the Year prize awarded
by the JCP Program Management Office. Geir Magnusson,
Vice President of the ASF JCP committee and JCP
Executive Committee member, accepted this prestigious
award on behalf of the ASF at the JCP Spec Lead Dinner 
on 6 May. "The ASF
has been active and engaged since the beginning, with
wide participation at both the EC level and in
projects, as members of Expert Groups," said Magnusson
in his acceptance speech.

 - InfoWorld BOSSIE Award: Apache SpamAssassin
Apache SpamAssassin won the InfoWorld "Best Of Open
Source Software" BOSSIE Award, as the winner in the
anti-spam category. According to InfoWorld "Our Bossie
winner for anti-spam is the ubiquitous SpamAssassin.
Powerful, extensible, and effective, SpamAssassin uses
a trainable neural network engine to identify spam and
minimize false positives, in addition to the classic
techniques of blacklisting and Bayesian filtering."

 - Eclipse Community Award: Apache Directory Studio
Apache Directory Studio finishes as runner-up for Best
Open Source RCP Application at the Eclipse Community
Awards announced on 18 March at EclipseCon. Earlier
that week, the Apache Directory team announced the
second release candidate for the version 1.1.0 Apache
Directory Studio, its Eclipse based LDAP Browser and
Directory client.

 - JAX Innovation Award: Apache Sling
Barely six months under incubation, Apache Sling – the
Web framework that uses a Java Content Repository,
such as Apache Jackrabbit, to store and manage content
– won a JAX Innovation Award on 25 April. The award
was accepted on behalf of the project by Committers
Carsten Ziegeler and Felix Meschberger, who were
excited to spread the word that Apache Sling is
"bringing back the fun (to Java development)!"

 - SD Times 100: Influencers; Application Servers
The ASF topped the Software Development (SD) Times 100
list of Industry Influencers for the third year
running. The sixth edition of these coveted awards was
published on 2 June in recognition of the
organizations or individuals that have demonstrated
innovation and leadership in their markets. "Apache
stayed on top of its game, continuing to offer
enterprise-class sever software at a price not even
Microsoft could match," stated the SD Times, bestowing
Apache its third server award, highlighting Apache
Geronimo powering proprietary server solutions, and
Apache Tomcat as the most popular Java application
server.


Users and developers interested in becoming involved
with any of the above initiatives are invited to
download software, join mailing lists, submit
patches/bug fixes/documentation, and offer feedback
through the Projects listed on the ASF Website.

ABOUT THE APACHE SOFTWARE FOUNDATION
Established in 1999, The Apache Software Foundation
provides organizational, legal, and financial support
for a broad range of Open Source software projects,
including Apache HTTP Server — the world's most
popular Web server software for more than a decade.
The Foundation provides an established framework for
intellectual property and financial contributions that
simultaneously limits contributors' potential legal
exposure. Through a collaborative and meritocratic
development process, Apache projects deliver
enterprise-grade, freely available software products
that attract large communities of users. The pragmatic
Apache License makes it easy for all users, commercial
and individual, to deploy Apache products. For more
information, please see http://www.apache.org/