<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>About Apache OpenOffice</title>
</head>

<body>

<h2>About Apache OpenOffice</h2>

<p>Apache OpenOffice is both a <a href="https://www.openoffice.org/product/product.html">product</a> and an <a href="https://openoffice.apache.org/">
open-source project</a>. Both have been in existence since <a href="http://www.zdnet.com/article/sun-open-source-for-the-masses/">October 13th, 2000</a>. (see also <a href="http://www.openoffice.org/editorial/ec13Oct.html">Birthday Story</a>).</p>
<p>OpenOffice.org 1.0 (the original name, pre-Apache) was released on April 30th, 2002.</p>
<p>OpenOffice.org's mission statement was drafted by the community:</p>

<blockquote style="font-weight: bolder; font-style: oblique; font-size: 110%;">To create, as a community, the leading international office suite that will
run on all major platforms and provide access to all functionality and data through open-component based APIs and an XML-based file format.</blockquote>

<p>Since its inception as an open source project. our corporate contributors have
included Oracle, RedFlag CH2000, and
IBM. Additionally over 500,000 people--unaffiliated individuals,
business and government employees, and students from nearly every curve of the
globe--have joined the project with the aim of creating the best possible office
suite that all can use. Their work as a community is both invaluable and practical:
people use what the community does. This is the essence of an open source
community. </p>

<p>The remainder of this page summarizes the project and suggests how you can
contribute to it.</p>

<ul>
  <li><a href="#history">Historical background</a></li>
  <li><a href="#licenses">Licenses</a></li>
  <li><a href="#participation">General Participation</a></li>
  <li><a href="#subscribing">Mailing Lists</a></li>
  <li><a href="#logo">Logos and Trademark</a></li>
  <li><a href="#testimonials">Testimonials</a></li>
  <li><a href="#awards">Awards</a></li>
  <li><a href="#contact">Contact</a></li>
  <li><a href="#links">Useful Links</a></li>
</ul>
<br />

<hr style="display: block;"/>

<h3><a name="history"></a>Historical background</h3>

<div class="indent">

<p>StarDivision, the original author of the StarOffice
    suite of software, was founded in Germany
in the mid-1980s. It was acquired by Sun Microsystems during the summer of 1999
    and StarOffice 5.2 was released in June of 2000. Subsequent versions of
StarOffice software, beginning with 6.0, were built using the OpenOffice.org source, APIs, file formats,
and reference implementation. Sun continued to sponsor development on OpenOffice.org
for the next 10 years, a period during which not only did the project grow tremendously
and became truly global, but the user base also saw an extraordinary increase,
and as of the end of 2010 was estimated to be in excess of 100 Million. With its acquisition of Sun in 2010, Oracle was the principal
contributor of code to OpenOffice.org. On June 1, 2011, OpenOffice.org, the project and product, including source code, trademarks, domain names and website,
were donated to the Apache Software Foundation.</p>

<p>The source is written in C++ and delivers language-neutral and scriptable
  functionality, including Java&trade; APIs. This source technology introduces the
next-stage architecture, allowing use of the suite elements as separate applications
  or as embedded components in other applications. Numerous other features are
  also present including XML-based file formats based on the vendor-neutral <a href="https://groups.oasis-open.org/communities/tc-community-home2?CommunityKey=4bf06d41-79ad-4c58-9e8e-018dc7d05da8">
OpenDocument Format (ODF)</a> standard from <a href="https://www.oasis-open.org/org/">OASIS</a> and
other resources.</p>

</div>

<hr style="display: block;"/>

<h3><a name="licenses"></a>Licenses</h3>

<div class="indent">


Apache OpenOffice is released under the <a href="https://openoffice.apache.org/license.html">Apache License Version 2.0</a>.
	Previous versions, under the OpenOffice.org name, were released under the the LGPL 3.0 license.
</div>

<hr style="display: block;"/>

	<h3><a name="website"></a>About the Websites</h3>

	<div class="indent">

<p>This web site, www.openoffice.org, is Apache OpenOffice's
  primary user portal. The primary developer portal for Apache OpenOffice is
  <a href="https://openoffice.apache.org/">Apache OpenOffice</a>

<br />

</div>

<hr style="display: block;"/>

<h3><a name="participation"></a>General Participation</h3>

<div class="indent">

<p>There are a variety of ways you can actively <a href="https://contributing.openoffice.org/index.html">participate</a> in the OpenOffice Community.
These range from something as easy as <a href="https://www.openoffice.org/donations.html">donating</a> to the Apache Software Foundation, or participating
in mailing lists, to actually contributing code for the product. Please visit the <a href="https://www.apache.org/foundation/getinvolved.html">Apache Software Foundation Get Involved</a>
 page for an overview on what it means
to be an Apache contributor/committer. </p>

<p>To contribute to (volunteer with) the OpenOffice project (user or developer web sites or
product), please <a href="mailto:dev-subscribe@openoffice.apache.org">subscribe to the Apache OpenOffice developer mailing list </a>to get started.
Please visit <a href="https://openoffice.apache.org/get-involved.html">Apache OpenOffice Get Involved</a> for specific information about getting involved in the Apache
OpenOffice project.
</p>

<hr style="display: block;"/>

<h3><a name="subscribing"></a>Mailing Lists</h3>

<p>Much of the excitement of an Open Source site takes place in the <a href="https://openoffice.apache.org/mailing-lists.html">mailing
    lists.</a> These are <strong>public.</strong>

<p><strong>All our major lists are public. What you post to these is on the public
    Internet.</strong> We suggest you do not post private information and keep
    in mind the public and persistent nature of all that you write to the lists.</p>

<p>For questions having to do with the Apache OpenOffice <i>product</i>, please use our "users" list:
<a href="mailto:users-subscribe@openoffice.apache.org">users-subscribe@openoffice.apache.org</a>.</p>

<p>Besides that list, we have two general lists: our "announce" list, which is
  for major announcements and has little traffic, and the "dev" list, which
  is for general discussions related to the project and is fairly heavily trafficked.</p>

<p>To subscribe to any of these lists, click on the appropriate link below and send the email message. Leave the subject line and body empty.</p>

<ul>
  <li><a href="mailto:announce-subscribe@openoffice.apache.org">announce-subscribe@openoffice.apache.org</a></li>
  <li><a href="mailto:users-subscribe@openoffice.apache.org">users-subscribe@openoffice.apache.org</a></li>
  <li><a href="mailto:dev-subscribe@openoffice.apache.org">dev-subscribe@openoffice.apache.org</a></li>
</ul>

<br />

</div>

<hr style="display: block;"/>

<h3><a name="logo"></a>Logos, Trademark</h3>

<div class="intent">

<p>Together with our product, the OpenOffice brand is spread over the world
and we need your cooperation so that it is applied consistently.&nbsp;The
OpenOffice logo and the seagulls are well recognized.&nbsp;This section is
meant to provide information on using the OpenOffice logos and banners for
those interested in linking to us or distributing OpenOffice as CDs, or via
a download mirror.</p>

<p>Please review the <a href="https://openoffice.apache.org/trademarks.html">Apache OpenOffice Trademarks page</a> for further information and to
	request to use the logo in any form or fashion.</p>

</div>

<hr style="display: block;"/>


<h3><a name="testimonials"></a>Testimonials</h3>

<div class="indent">

<p>We are constantly collecting testimonials from people and businesses actually using the product. You may read them on our
<a href="https://www.openoffice.org/about_us/testimonials.html">Testimonials page</a>. Send yours to:
<a href="mailto:marketing@openoffice.apache.org">marketing@openoffice.apache.org</a>.</p>
<br />

</div>

<hr style="display: block;"/>

<h3><a name="awards"></a>Awards</h3>

<div class="indent">

<p>OpenOffice wins awards. Our <a href="https://www.openoffice.org/awards/index.html">Awards Page</a> lists some of the more recent ones.</p>
<br />

</div>

<hr style="display: block;"/>

<h3><a name="contact"></a>Contact</h3>

<div class="indent">

<p>We very much welcome your participation and your comments on all facets of Apache OpenOffice.</p>

<p> Please contact us using <a href="mailto: dev@openoffice.apache.org"> the developer mailing list.</a>
</p>


<p>If, on the other hand, you have questions regarding how to <i>use</i> OpenOffice, the software, please address your questions to our "users" list.
Subscribe using <a href="mailto:users-subscribe@openoffice.apache.org">users-subscribe@openoffice.apache.org</a>.</p>
<br />

</div>

<hr style="display: block;"/>

<h3><a name="links"></a>Useful links</h3>

<ul>
  <li><a href="https://www.openoffice.org/editorial/index.html">Articles and Interviews</a>&nbsp;Index of articles written about OpenOffice and about Open
      Source; includes useful articles on how to use the site infrastructure</li>
  <li><a href="https://www.openoffice.org/editorial/blogs.html">Blogs</a>&nbsp;By OpenOffice contributors</li>
  <li><a href="https://development.openoffice.org/index.html">Developer Page</a>&nbsp;The page for important developer links, including links to to-dos</li>
  <li><a href="https://wiki.openoffice.org/wiki/Main_Page">Developer Wiki</a>&nbsp;Best place to start learning how to build, develop, learn about
      Apache OpenOffice, project and product</li>
  <li><a href="https://www.openoffice.org/faq.html">FAQs</a>&nbsp;Answers to fundamental questions about Apache OpenOffice</li>
  <li><a href="https://www.openoffice.org/awards/index.html">Awards</a>&nbsp;&nbsp;The awards page</li>
  <li><a href="https://marketing.openoffice.org/press_kit.html">Media Resources</a>&nbsp;&nbsp;The page for media inquiries, including press FAQ</li>
  <li><a href="https://openoffice.apache.org/license.html">Licenses</a>&nbsp;Information about the Apache Software Foundation License</li>
</ul>

<br />

<hr style="display: block;"/>

</body>
</html>
