<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Apache OpenOffice Statistics</title>
</head>

<body>

<h1>Apache OpenOffice Statistics</h1> 

<p>
  The statistics aim to provide a logical reference point for OpenOffice download statistics. 
</p>

<p>
  We use the <a href="mailto:dev@openoffice.apache.org">dev@openoffice.apache.org</a> mailing list for work discussions.
</p>

<h2>Statistics we publish</h2>

<ul>
  <li><a href="downloads.html">Download counts</a></li>
  <li><a href="countries.html">Downloads by country / territory</a></li>
<!--
Commented out as the data source is stone old.

  <li><a href="committers.html">Committers</a></li>
  <li><a href="ooo-dev-subscribers.html">Mailing list subscribers</a></li>
  <li><a href="defects.html">Defect find/fix rates</a></li>
  <li><a href="https://forum.openoffice.org/en/forum/viewtopic.php?f=50&t=46497">
  Various stats related to our Support Forums</a></li>
-->
</ul>

<h2>Third Party Stats</h2>

<p>
  Another source of statistics are those generated by Open Hub:
</p>

<script type="text/javascript" src="https://www.openhub.net/p/29/widgets/project_factoids_stats.js"></script>

<p>
  These numbers should be taken with a grain of salt, and one should be cautious when comparing numbers across projects.
  Contributor numbers are especially sensitive to development methodology and tooling, e.g., a project that uses distributed
  version control will see a different count than one that processes patches through a smaller core group of developers.
  Projects also differ in what project resources they include in version control (Open Hub looks at files under version control),
  and which version controlled files they associate with their Open Hub account. For Apache OpenOffice our Open Hub account
  looks at files associated with our two main project deliverables: the OpenOffice source code and the website. For historical
  comparisons the Open Hub account also looks at the legacy OpenOffice.org repository for commits prior to June 2011. The safest
  comparison is to look at the trend for a single project over a period of time when version control and commit process is
  constant, e.g., since June 2011 for our project.
</p>

</body>
</html>

