<!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" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="name" content="Apache OpenOffice" />
    <meta name="description" content="The official home page of the Apache OpenOffice open source project, home of OpenOffice Writer, Calc, Impress, Draw and Base." />
    <meta name="keywords" content="OpenOffice, Open Office, Apache OpenOffice, Apache Open Office, OpenOffice.org, Official, Official Site, Writer, Calc, Impress, Draw, Base, ODF, Open Document Format, free office editors" />
    <meta name="google-site-verification" content="I-hPf9Mn1dfj03oW79MDQoCJLeGc0cHaQleb1aXBzzg" />
    <meta name="p:domain_verify" content="bd1ba1fb9d25b0eb3d64891f89e9195e"/>
    <link rel="shortcut icon" href="./favicon.ico" type="image/x-icon" />
    <link rel="icon" href="./favicon.ico" type="image/x-icon" />
    <title>Apache OpenOffice - Official Site - The Free and Open Productivity Suite</title>
    <script src="./download/globalvars.js"></script>
    <script src="./msg_prop_l10n.js"></script>
    <script src="./download/languages.js"></script>
    <script src="./download/download.js"></script>
    <style>
    /* <![CDATA[ */
    /*-------------------- Exceptions on standard css -----------------------*/
    @import "./css/home.css";
    @import "./css/styles.css";
    @import "./css/exceptions.css";
    /* ]]> */
    </style>
    <script>
      function follow( platform ) {
        // _gaq.push( ['_trackEvent', 'social', 'followUs', platform] );

        if ( platform == 'ApacheBlog' ) {
          window.open( "https://blogs.apache.org/OOo/", "_blank" );
        } else if ( platform == 'Facebook' ) {
          window.open( "https://www.facebook.com/ApacheOO", "_blank" );
        } else if ( platform == 'Twitter' ) {
          window.open( "https://twitter.com/ApacheOO", "_blank" );
        } else if ( platform == 'YouTube' ) {
          window.open( "https://www.youtube.com/openoffice", "_blank" );
        }
      }

      function showEventBox() {
	// The text is defined in "/msg_prop_l10n.js".

	// Show the event box or not?
	if( l10n.index_event_box_show ) {
		// Show the banner logo and text with link and cursor as pointer.
		document.write( "<div id='event_box' onclick='window.open( \"" + l10n.index_event_box_text_href
			+ "\", \"_blank\" ); return false;'>"
			+ "<ul>"
			  + "<li>"
			    // Event banner logo on the left hand side.
			    + "<p style='float: left;'>"
			      + "<a href='" + l10n.index_event_box_graphic_href
				+ "' title='" + l10n.index_event_box_graphic_title + "' target='_blank'>"
				  + "<img src='" + l10n.index_event_box_graphic_src + "'"
				  + "alt='" + l10n.index_event_box_graphic_alt + "'"
				  + "height='" + l10n.index_event_box_graphic_height + "'"
				  + "width='" + l10n.index_event_box_graphic_width + "' />"
			      + "</a>"
			    + "</p>"

			    // Event text on the right hand side.
			    + "<p>"
			      + "<a style='color: black; text-decoration: none;'"
				+ "' title='" + l10n.index_event_box_text_title + "' target='_blank'>"
				+ l10n.index_event_box_text_text
			      + "</a>"
			    + "</p>"
			  + "</li>"
			+ "</ul>"
		+ "</div>" );
	}
      }

      function showAlertBox() {
	// The text is defined in "/msg_prop_l10n.js".

	// Show the alert box or not?
	if( l10n.index_alert_box_show ) {
		// Depending if link is available, make the whole DIV clickable or not.
		if( l10n.index_alert_box_href ) {
			// Show the text with link and cursor as pointer.
			document.write( "<div id='alert_box' onclick='window.open( \"" + l10n.index_alert_box_href
			+ "\", \"_blank\" ); return false;'><ul><li>" );

			// Show headline.
			document.write( "<h2 style='cursor: pointer;'>"
			+ l10n.index_alert_box_headline_text + "</h2>" );

			// Show text.
			if( l10n.index_alert_box_text_text ) {
				document.write( "<p style='cursor: pointer;'>"
				+ l10n.index_alert_box_text_text + "</p>" );
			}
		} else {
			// Show the text without link and normal cursor.
			document.write( "<div id='alert_box'><ul><li>" );

			// Show headline.
			document.write( "<h2 style='cursor: default;'>"
			+ l10n.index_alert_box_headline_text + "</h2>" );

			// Show text.
			if( l10n.index_alert_box_text_text ) {
				document.write( "<p style='cursor: default;'>"
				+ l10n.index_alert_box_text_text + "</p>" );
			}
		}
		document.write( "</li></ul></div>" ); // Alert box.
	}
      }

      function setRedirect() {
	// The text is defined in "/msg_prop_l10n.js".
	DL.NL_LANG	= "";					// Set to empty as both variables ...
	DL.LANG_SEL	= "";					// ... must not be used in following function.
	var lang_iso	= DL.getLanguage();			// Get the language ISO code from browser guessed data.
	var lang_mode	= "";					// Customized redirect mode.
	var lang_text	= "";					// Customized message text that can be shown.
	var link	= "";					// Override redirect mode.

	// Add ECMA262-5 Array methods if not supported natively.
	// To workaround that MSIE 8 and older do not support this function.
	if( !( 'indexOf' in Array.prototype ) ) {
		Array.prototype.indexOf= function( find, i ) {	// 'i' is an optional parameter.
			if( i === undefined ) {
				i = 0;
			}
			if( i < 0 ) {
				i+= this.length;
			}
			if( i < 0 ) {
				i = 0;
			}
			for( var n = this.length; i < n; i++ ) {
				if( i in this && this[ i ] === find ) {
					return i;
				}
			}
			return -1;
		};
	}

	// Fix for Portuguese (European) as they are named only "pt" without region code!
	if( lang_iso === "pt-pt" || lang_iso === "pt-PT" ) {
		lang_iso = "pt";
	}

	// Fix for Norwegian to map both "nb" and "nn" -> "nb", then after looking up globalvars we change "nb" -> "no"
	if( lang_iso === "no" || lang_iso === "no-NO" || lang_iso === "nn" || lang_iso === "nb-NO" || lang_iso === "nn-NO" ) {
		lang_iso = "nb";
	}

	// Query if the browser language is one of the released languages.
	// The array has 3 elements per language (defined in "/download/globalvars.js"
	for( var i = 0, j = DL.SEL_LANG.length; i < j; i = i + 3 ) {
	  // If the ISO code is found in the language array.
	  if( DL.SEL_LANG[ i ] === lang_iso ) {
	    // Query for the redirect method (defined in "/msg_prop_l10n.js", column 0).
	    lang_mode	= l10n.index_redirect_text[ i / 3 * 2 ];
	    lang_text	= l10n.index_redirect_text[ i / 3 * 2 + 1 ];
	    break;
	  }
	}

	// Convert the browser URL into a string.
	link = String( document.location );

	// Does the browser URL contain already a redirect mode?
	// If yes, set the new redirect mode to override the customized mode.
	if( link.indexOf( "hard" ) !== -1 ) {
	    lang_mode = "hard";
	} else if( link.indexOf( "soft" ) !== -1 ) {
	    lang_mode = "soft";
	} else if( link.indexOf( "none" ) !== -1 ) {
	    lang_mode = "none";
	}

	// Fix for English as main language for the website, it does not need a language code.
	if( lang_iso === "en-us" || lang_iso === "en-gb" || lang_iso === "en-uk" || lang_iso === "en" ||
	    lang_iso === "en-US" || lang_iso === "en-GB" || lang_iso === "en-UK" ) {
		lang_iso = "";
	}

	// Fix for Norwegian, since Download language is "nb" but site language is "no".
	if( lang_iso === "nb" ) {
		lang_iso = "no";
	}

	switch( lang_mode ) {
		case "hard":
			// Do not show a message, just redirect.
			window.open( "https://www.openoffice.org/" + lang_iso , "_self" );
			break;
		case "soft":
			// Show a message and redirect only on user's click.
			// Assign the message text that is defined in:
			// "/msg_prop_l10n.js", array "l10n.index_redirect_text", column 1),
			document.write( "<div id='redirect_box'"
			+ " onclick='window.open( \"https://www.openoffice.org/" + lang_iso + "\", \"_self\" );"
			+ "return false;'>"
			+ "<ul><li>"
			+ "<p>" + lang_text + "</p>"
			+ "</li></ul>"
			+ "</div>" ); // Redirect box.
			break;
		case "none":
		default:
			// Do nothing and show nothing.
	}

	return;
      }
    </script>
</head>

<body>

<!-- The text in the H1 tag is intentionally shown as not displayable, just to please accessibility tools like a
screen reader.
-->
<h1 style="display: none;">Apache OpenOffice</h1>

<div id="actionstatements">

  <script>
  <!--
  // Show event box.
  // Show a banner logo and message of the event.
  // In "/msg_prop_l10n.js": Change to 'true' to show the box that is defined in the variables.
  showEventBox();

  // Show alert box.
  // Show an important message or announcement.
  // In "/msg_prop_l10n.js": Change to 'true' to show the box that is defined in the variables.
  showAlertBox();

  // Show redirect box.
  // Show a text how to redirect to the NL webpage.
  // In "/msg_prop_l10n.js": Change the mode and text how a redirect to the respective NL webpage should be done.
  setRedirect();
  //-->
  </script>

  <ul>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-info">
        <div class="action-text action-link">
          <a href="/why/index.html">
            <h2>I want to learn more about OpenOffice</h2>
            <p>What is Apache OpenOffice? And why should I use it?</p>
          </a>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
  </ul>

  <!-- Show the download link with currently available version number, loaded via JavaScript -->
  <script>
  <!--
  document.write( "<ul><li>"
    + "<div class='action-download'>"
      + "<div class='action-text action-link'>"
        + "<a href='/download/index.html'>"
          + "<h2>I want to download Apache OpenOffice</h2>"
          + "<p style='font-size: 1.0em; font-weight: bold;'>(Most recent release: " + DL.VERSION + ")</p>"
          + "<p>Download Apache OpenOffice for free <b>(really, no license fee!)</b> | "
            + "<a href='https://blogs.apache.org/OOo/entry/with_apache_openoffice_you_get'"
              + "title='Blog post: With Apache OpenOffice you get what you do not pay for' target='_blank'>"
              + "Click here to get more information"
            + "</a>."
          + "</p>"
        + "</a>"
      + "</div>"
    + "</div>"
  + "</li></ul>" );
  //-->
  </script>

  <!-- Show the download link, without version number -->
  <noscript>
    <div class="action-download">
      <div class="action-text action-link">
        <a href="/download/index.html">
          <h2>I want to download Apache OpenOffice</h2>
          <p>Download Apache OpenOffice for free, or find out about other ways of getting it.</p>
        </a>
      </div>
    </div>
  </noscript>

  <ul>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-help">
        <div class="action-text action-link">
          <a href="/support/index.html">
            <h2>I need help with my OpenOffice</h2>
            <p>Help is at hand whenever you need it.</p>
          </a>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-extend">
        <div class="action-text action-link">
          <a href="/extensions/index.html">
            <h2>I want to do more with my OpenOffice</h2>
            <p>Extend Apache OpenOffice with additional functionality, templates and clipart.</p>
          </a>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-participate">
        <div class="action-text action-link">
          <a href="https://openoffice.apache.org/get-involved.html">
            <h2>I want to participate in OpenOffice</h2>
            <p>Apache OpenOffice is made with help from people all over the world. Feel free to contribute!</p>
          </a>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-social">
        <div class="action-text action-link">
          <a href="/social/index.html" onclick="javascript:follow( 'SocialLink' );">
            <h2>I want to stay in touch with OpenOffice</h2>
            <p>Follow the progress of OpenOffice via announce list, our blog or social media.</p>
          </a>
          <div class="action-social-extra">
            <p>
              <span style="padding: 0 5px; cursor: pointer;" onclick="javascript:follow( 'ApacheBlog' );"
                title="Follow our official Blog">
                <img src="/images/logo-rss-16.png" alt="Blog" />
                <a>Official Blog</a>
              </span>
              <span style="padding: 0 5px; cursor: pointer;" onclick="javascript:follow( 'Facebook' );"
                title="Follow us on Facebook">
                <img src="/images/logo-facebook-16.png" alt="Facebook" />
                <a>Facebook</a>
              </span>
              <span style="padding: 0 5px; cursor: pointer;" onclick="javascript:follow( 'Twitter' );"
                title="Follow us on Twitter">
                <img src="/images/logo-twitter-16.png" alt="Twitter" />
                <a>Twitter</a>
              </span>
              <span style="padding: 0 5px; cursor: pointer;" onclick="javascript:follow( 'YouTube' );"
                title="Subscribe to our YouTube channel">
                <img src="/images/logo-youtube-16.png" alt="YouTube" />
                <a>YouTube</a>
              </span>
            </p>
          </div>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
  </ul>

  <div id="SupportedAndSupporters">
    <a href="https://validator.w3.org/check?uri=referer"
    title="W3C Markup Validation Service - Check the markup (HTML, XHTML, ...) of Web documents">
    <img src="https://www.w3.org/Icons/valid-xhtml10-blue.png"
    alt="Valid XHTML 1.0!" height="31" width="88" /></a>
  </div>
</div>

<div id="news">

  <div class="first campaign" style="height: 210px; float: right; overflow: auto;">
    <h2>Recent Blog Posts</h2>

    <p style="text-align:right">
      <a href="https://blogs.apache.org/OOo/" target="_blank">All Posts</a>
    </p>

    <p>
      <em>27 February 2023:</em>
      <br />
      <a href="https://openoffice.apache.org/blog/announcing_apache_openoffice_4_1_14.html">
      Announcing Apache OpenOffice 4.1.14</a>
      <br />

      <em>30 August 2022:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/more-than-333-million-downloads">
      333,333,333+ Downloads of Apache OpenOffice</a>
      <br />

      <em>22 July 2022:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-19">
      Announcing Apache OpenOffice 4.1.13</a>
      <br />

      <em>4 May 2022:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-18">
      Announcing Apache OpenOffice 4.1.12</a>
      <br />

      <em>6 October 2021:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-17">
      Announcing Apache OpenOffice 4.1.11</a>
      <br />

      <em>4 May 2021:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-16">
      Announcing Apache OpenOffice 4.1.10</a>
      <br />

      <em>7 February 2021:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-15">
      Announcing Apache OpenOffice 4.1.9</a>
      <br />

      <em>6 January 2021:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/new-release-for-apple-s">
      New release for Apple's macOS 11 (Big Sur) - Also with fixes for Linux and Windows</a>
      <br />

      <em>10 November 2020:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-14">
      Announcing Apache OpenOffice 4.1.8</a>
      <br />

      <em>29 October 2020:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/300-million-downloads-of-apache">
      300 Million Downloads of Apache OpenOffice</a>
      <br />

      <em>15 October 2020:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/the-apache-software-foundation-celebrates">
      The Apache Software Foundation Celebrates 20 Years of OpenOffice®</a>
      <br />

      <em>17 May 2020:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/apache-openoffice-needs-your-help">
      Apache OpenOffice needs your help</a>
      <br />

      <em>15 October 2020:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/the-apache-software-foundation-celebrates">
      The Apache Software Foundation Celebrates 20 Years of OpenOffice®</a>
      <br />

      <em>22 October 2019:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/1-6-million-downloads-of">
      1.6 million downloads of Apache OpenOffice 4.1.7</a>
      <br />

      <em>21 September 2019:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-13">
      Announcing Apache OpenOffice 4.1.7</a>
      <br />

      <em>18 November 2018:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-12">
      Announcing Apache OpenOffice 4.1.6</a>
      <br />

      <em>31 January 2018:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/over-3-2-million-downloads">
      Over 3.2 million downloads of Apache OpenOffice 4.1.5</a>
      <br />

      <em>30 December 2017:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-11">
      Announcing Apache OpenOffice 4.1.5</a>
      <br />

      <em>19 October 2017:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-1">
      Announcing Apache OpenOffice 4.1.4</a>
      <br />

      <em>28 November 2016:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/over_200_million_downloads_of">
      Over 200 million downloads of Apache OpenOffice</a>
      <br />

      <em>12 October 2016:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_12">
      Announcing Apache OpenOffice 4.1.3</a>
      <br />

      <em>28 October 2015:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_11">
      Announcing Apache OpenOffice 4.1.2</a>
      <br />

      <em>27 September 2015:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/coming_soon_apache_openoffice_4">
      Coming soon... Apache OpenOffice 4.1.2</a>
      <br />

      <em>13 May 2015:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/authoring_e_books_in_apache">
      Authoring e-Books in Apache OpenOffice</a>
      <br />

      <em>13 April 2015:</em>
      <br />
      <a href="https://blogs.apache.org/OOo/entry/collaboration_is_in_our_dna">
      Collaboration is in our DNA</a>
      <br />
    </p>
  </div>

  <div id="all_news" style="height: 375px; float: left; overflow: auto;">
    <div class="campaign">
      <h2>Recent News</h2>

      <p style="text-align:right">
        <a href="/news/index.html" target="_blank">Archived News</a>
      </p>
      <p></p>

      <h2>Apache OpenOffice 4.1.14 released</h2>

      <p>
        <em>27 February 2023:</em>
        The Apache OpenOffice project announces the
        <a href="https://openoffice.apache.org/blog/announcing_apache_openoffice_4_1_14.html"
        title="Official blog post about Apache OpenOffice 4.1.14">official release of version 4.1.14</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.14+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.14">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.14">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>More than 333,333,333 downloads</h2>

      <p>
        <em>30 August 2022:</em>
        The Apache OpenOffice project announces that Apache OpenOffice was
        <a href="https://www.openoffice.org/download/">downloaded</a> more than 333,333,333 times.
        Further information are in the
        <a href="https://blogs.apache.org/OOo/entry/more-than-333-million-downloads">Blog</a> available.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.13 released</h2>

      <p>
        <em>22 July 2022:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-19"
        title="Official blog post about Apache OpenOffice 4.1.13">official release of version 4.1.13</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.13+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.13">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.13">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.12 released</h2>

      <p>
        <em>4 May 2022:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-18"
        title="Official blog post about Apache OpenOffice 4.1.12">official release of version 4.1.12</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.12+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.12">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.12">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.11 released</h2>

      <p>
        <em>6 October 2021:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-17"
        title="Official blog post about Apache OpenOffice 4.1.11">official release of version 4.1.11</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.11+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.11">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.11">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.10 released</h2>

      <p>
        <em>4 May 2021:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-16"
        title="Official blog post about Apache OpenOffice 4.1.10">official release of version 4.1.10</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.10+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.10">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.10">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.9 released</h2>

      <p>
        <em>7 February 2021:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-15"
        title="Official blog post about Apache OpenOffice 4.1.9">official release of version 4.1.9</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.9+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.9">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.9">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.8 released</h2>

      <p>
        <em>10 November 2020:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-14"
        title="Official blog post about Apache OpenOffice 4.1.8">official release of version 4.1.8</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.8+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.8">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.8">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.7 released</h2>

      <p>
        <em>21 September 2019:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-13"
        title="Official blog post about Apache OpenOffice 4.1.7">official release of version 4.1.7</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.7+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.7">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.7">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.6 released</h2>

      <p>
        <em>18 November 2018:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-12"
        title="Official blog post about Apache OpenOffice 4.1.6">official release of version 4.1.6</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.6+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.6">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.6">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.5 released</h2>

      <p>
        <em>30 December 2017:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-11"
        title="Official blog post about Apache OpenOffice 4.1.5">official release of version 4.1.5</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.5+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.5">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.5">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.4 released</h2>

      <p>
        <em>19 October 2017:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing-apache-openoffice-4-1"
        title="Official blog post about Apache OpenOffice 4.1.4">official release of version 4.1.4</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.4+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.4">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.4">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.3 released</h2>

      <p>
        <em>12 October 2016:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_12"
        title="Official blog post about Apache OpenOffice 4.1.3">official release of version 4.1.3</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.3+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.3">Release Notes</a> you can read about all new bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.3">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.2 released</h2>

      <p>
        <em>28 October 2015:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_11"
        title="Official blog post about Apache OpenOffice 4.1.2">official release of version 4.1.2</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.2+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.2">Release Notes</a> you can read about all bugfixes,
        improvements and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.2">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Udine moves to OpenOffice, will save 360,000 Euro</h2>

      <p>
        <em>16 September 2014:</em>
        The City of Udine, in Italy, announced a process that will lead to the installation of OpenOffice on
        900 municipal desktops, saving the city 360,000 Euro. ZDNet's Raffaele Mastrolonardo has the
        <a href="http://www.zdnet.com/another-italian-city-announces-its-ditching-microsoft-windows-for-open-source-7000033682/">details</a>.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.1 released</h2>

      <p>
        <em>21 August 2014:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_1"
        title="Official blog post about Apache OpenOffice 4.1.1">official release of version 4.1.1</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.1+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.1">Release Notes</a> you can read about all new features,
        functions and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.1">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>Apache OpenOffice 4.1.0 released</h2>

      <p>
        <em>29 April 2014:</em>
        The Apache OpenOffice project announces the
        <a href="https://blogs.apache.org/OOo/entry/the_apache_openoffice_project_announce"
        title="Official blog post about Apache OpenOffice 4.1.0">official release of version 4.1.0</a>.
        In the <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1+Release+Notes"
        title="Release Notes for Apache OpenOffice 4.1.0">Release Notes</a> you can read about all new features,
        functions and languages. <a href="https://www.openoffice.org/download/"
        title="Download Apache OpenOffice 4.1.0">Don't miss to download</a> the new release and find out yourself.
      </p>
    </div>

    <div class="campaign">
      <h2>100 Million downloads</h2>

      <p>
        <em>17 April 2014:</em>
        The Apache OpenOffice project is proud to tell you that our software was
        <a href="https://blogs.apache.org/foundation/entry/the_apache_software_foundation_announces56"
        title="Apache OpenOffice was downloaded 100 million times">downloaded over 100 million times</a>. Join us in
        celebrating this big achievement!
      </p>
    </div>

    <div class="campaign">
      <h2>Italian region adopts OpenOffice, saves 2 Million Euro</h2>

      <p>
        <em>10 October 2013:</em>
        The Italian administrative region of Emilia-Romagna announced plans to move to OpenOffice,
        <a href="https://joinup.ec.europa.eu/community/osor/news/openoffice-italian-emilia-romagna-save-2-million">
        saving 2 million euro</a>.
      </p>
    </div>

    <div class="campaign">
      <h2>Volunteers, not Amateurs</h2>

      <p>
        <em>8 January 2013:</em>
        Apache OpenOffice is developed 100% by volunteers. Apache does not pay for developers, for translators, for QA,
        for marketing, for UI, for support, etc. Of course, we're happy to accept
        <a href="https://www.apache.org/foundation/contributing.html">donations to the Apache Software Foundation</a>, to
        keep our servers runnings and for similar overhead expenses. But our products are developed entirely by
        volunteers.
      </p>
      <p>
        Some users are initially worried by this statement:<br /><strong>How can software for free, developed by
        volunteers, be any good?<br /></strong><a href="/why/why_volunteers.html">Read on for an answer...</a>
      </p>
    </div>
  </div>
</div>

<!-- Every new element and text that is defined below the previous DIV will be actually displayed wrapped below this DIV
(because of "clear: both" instead of floated around the previous DIVs. This is really needed. -->
<div style="clear: both;">
</div>

</body>
</html>
