<!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="om" lang="om">
<head itemscope itemtype="http://schema.org/Article">
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta itemprop="name" content="Download Apache OpenOffice" />
  <meta itemprop="description" content="Join the OpenOffice revolution, the free office productivity suite with over 330 million trusted downloads." />
  <meta itemprop="image" content="https://www.openoffice.org/images/AOO_logos/AOO-Logo-Download.png" />
  <meta property="og:title" content="Download Apache OpenOffice" />
  <meta property="og:description" content="Join the OpenOffice revolution, the free office productivity suite with over 330 million trusted downloads." />
  <meta property="og:image" content="https://www.openoffice.org/images/AOO_logos/AOO-Logo-Download.png" />
  <meta name="description" content="Official Apache OpenOffice download page. Join the OpenOffice revolution, the free office productivity suite with over 330 million trusted downloads." />
  <title>Apache OpenOffice Downloads - Official Site</title>
  <script type="text/javascript" src="/download/globalvars.js"></script>
  <script type="text/javascript" src="/download/msg_prop_l10n_en.js"></script>
  <script type="text/javascript" src="./msg_prop_l10n_om.js"></script>
  <script type="text/javascript" src="/download/languages.js"></script>
  <script type="text/javascript" src="/download/release_matrix.js"></script>
  <script type="text/javascript" src="/download/boxed_download.js"></script>
  <script type="text/javascript" src="/download/download.js"></script>
  <style type="text/css">
  /* <![CDATA[ */
  /*-------------------- Exceptions on standard css -----------------------*/
  @import "/download/styles.css";
  @import "/download/exceptions.css";
  /* ]]> */
  </style>
  <script>
    if ( window.document.referrer.indexOf( "shell.windows.com" ) != -1 ) {
       location.href = "/why/why_odf.html";
    }

    function share( platform ) {
      // _gaq.push( ['_trackEvent', 'social', 'shareDownload', platform] );

      if ( platform == 'apacheblog' ) {
        window.open( 'https://blogs.apache.org/OOo/', '_blank' );
      } else if ( platform == 'facebook' ) {
        window.open( 'https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fwww.openoffice.org%2Fdownload%2F', '_blank', 'toolbar=0, status=0, width=580, height=325' );
      } else if ( platform == 'twitter' ) {
        window.open( 'https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.openoffice.org%2Fdownload%2F&text=Join+the+OpenOffice+revolution%2C+the+free+office+productivity+suite+with+over+330+ million+trusted+downloads.', '_blank', 'toolbar=0, status=0, width=580, height=325' );
      }
    }
  </script>
</head>

<body>

  <div class="overall_optionset">

    <div class="optionset">

      <!-- Text above the first colored box -->
      <script type="text/javascript">
	<!--
	// The text in the H1 tag is intentionally shown as "display: none" (do not display).
	// This is to please accessibility tools like a screen reader.
	document.write( "<h1 style='display: none;'>" + l10n.dl_headline_text + "</h1>" );
	//-->
      </script>

      <!-- Green: Stable release -->
      <!-- Download via select boxes -->
      <script type="text/javascript">
	<!--

	// Set a specific language ISO code to force to assemble a certain localized build as download link.
	// Changed: The variable can now be found in the "msg_prop_l10n_<ISO_code>.js".

	// Get the download box from a separate file.
	DL.createDownloadBox();

	// Fill the select boxes and wait for the user's choice.
	DL.init( 1 );

	// entourage.initialize();

	//-->
      </script>

      <!-- Green: Stable release: No JavaScript enabled -->
      <noscript>
	<div class="first button green-sel" id="optionitem2">
	  <div class="green-sel-icon">
	  </div>
	  <h2>
	    <a style="cursor: pointer;" href="https://sourceforge.net/projects/openofficeorg.mirror/files/"
	      title="Select from all platforms, languages, language packs to download">
	      Apache OpenOffice Downloads - Official Site
	    </a>
	  </h2>
	  <p>
	    <a style="cursor: pointer;" href="https://sourceforge.net/projects/openofficeorg.mirror/files/"
	      title="Select from all platforms, languages and language packs to download">
	      The browser seems to have JavaScript disabled. This technique is used for showing the actual
	      download link. If you want to download Apache OpenOffice anyway, click this text to choose
	      from the alternative download webpage. You will have to navigate to
          the <em>version</em>/binaries/<em>language</em> subfolder and download the file named
          Apache_OpenOffice_<em>version</em>_<em>os</em>_<em>platform</em>_<em>package</em>_<em>language</em>.<em>ext</em>.
          Our apologies for the inconvenience.
	    </a>
	  </p>
	</div>
      </noscript>

      <!-- Light Blue: Share download with social networks -->
      <script type="text/javascript">
	<!--
	// Get the share box from a separate file.
	DL.createShareBox();
	//-->
      </script>

      <!-- Blue: Extensions -->
      <script type="text/javascript">
	<!--
	// Get the extensions box from a separate file.
	DL.createExtensionsBox();
	//-->
      </script>

      <!-- Blue: Templates -->
      <script type="text/javascript">
	<!--
	// Get the templates box from a separate file.
	DL.createTemplatesBox();
	//-->
      </script>

    </div> <!-- class "optionset" -->

    <div class="additionalinformation">

      <!-- Navigation bar -->
      <script type="text/javascript">
	<!--
	// Get the navigation bar from a separate file.
	DL.createNavigationBar();
	//-->
      </script>

      <br /><br />

      <!-- Logo section -->
      <script type="text/javascript">
	<!--
	// Get the logo section from a separate file.
	DL.createLogoSection();
	//-->
      </script>

    </div> <!-- class: additionalinformation -->

  </div> <!-- class: overall_optionset -->

</body>
</html>
