<!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="kab" lang="kab">
<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_kab.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>
