<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Apache Mesos</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <meta property="og:locale" content="en_US"/>
    <meta property="og:type" content="website"/>
    <meta property="og:title" content="Apache Mesos"/>
    <meta property="og:site_name" content="Apache Mesos"/>
    <meta property="og:url" content="https://mesos.apache.org/"/>
    <meta property="og:image" content="https://mesos.apache.org/assets/img/mesos_logo_fb_preview.png"/>
    <meta property="og:description"
          content="Apache Mesos abstracts resources away from machines,
                   enabling fault-tolerant and elastic distributed systems
                   to easily be built and run effectively."/>

    <meta name="twitter:card" content="summary"/>
    <meta name="twitter:site" content="@ApacheMesos"/>
    <meta name="twitter:title" content="Apache Mesos"/>
    <meta name="twitter:image" content="https://mesos.apache.org/assets/img/mesos_logo_fb_preview.png"/>
    <meta name="twitter:description"
          content="Apache Mesos abstracts resources away from machines,
                   enabling fault-tolerant and elastic distributed systems
                   to easily be built and run effectively."/>

    <link href="assets/css/bootstrap.min.css" rel="stylesheet" />
    <link rel="alternate" type="application/atom+xml" title="Apache Mesos Blog" href="/blog/feed.xml">
    <link href="assets/css/main.css" rel="stylesheet" />


  </head>
  <body>
    <!-- magical breadcrumbs -->
    <div class="topnav">
      <div class="container">
        <ul class="breadcrumb">
          <li>
            <div class="dropdown">
              <a data-toggle="dropdown" href="#">Apache Software Foundation <span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
                <li><a href="https://www.apache.org">Apache Homepage</a></li>
                <li><a href="https://www.apache.org/licenses/">License</a></li>
                <li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
                <li><a href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
                <li><a href="https://www.apache.org/security/">Security</a></li>
              </ul>
            </div>
          </li>

          <li><a href="https://mesos.apache.org">Apache Mesos</a></li>
        </ul><!-- /.breadcrumb -->
      </div><!-- /.container -->
    </div><!-- /.topnav -->

    <!-- navbar excitement -->
<div class="navbar navbar-default navbar-static-top" role="navigation">
  <div class="container">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#mesos-menu" aria-expanded="false">
      <span class="sr-only">Toggle navigation</span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="/"><img src="/assets/img/mesos_logo.png" alt="Apache Mesos logo"/></a>
    </div><!-- /.navbar-header -->

    <div class="navbar-collapse collapse" id="mesos-menu">
      <ul class="nav navbar-nav navbar-right">
        <li><a href="/getting-started/">Getting Started</a></li>
        <li><a href="/blog/">Blog</a></li>
        <li><a href="/documentation/latest/">Documentation</a></li>
        <li><a href="/downloads/">Downloads</a></li>
        <li><a href="/community/">Community</a></li>
      </ul>
    </div><!-- /#mesos-menu -->

    <div class="jumbotron">
      <h1>
        Program against your datacenter<br>
        like it’s a single pool of resources
      </h1>
      <p class="lead">
        Apache Mesos abstracts CPU, memory, storage, and other
        compute resources away from machines (physical or virtual), enabling
        fault-tolerant and elastic distributed systems to easily be built
        and run effectively.
      </p>
      <p>
        <a class="btn btn-default download" href="downloads/">Download Mesos</a>
      </p>
      <p>
        <a class="changelog"
           href="https://gitbox.apache.org/repos/asf?p=mesos.git;a=blob_plain;f=CHANGELOG;hb=1.11.0">
          Mesos 1.11.0 Changelog
        </a>
      </p>
    </div><!-- /.jumbotron -->

  </div><!-- /.container -->
</div><!-- /.navbar -->

<div class="feature-list-group">
  <div class="container">
    <div class="row header">
      <h3>What is Mesos? A distributed systems kernel</h3>
      <p class="lead">
        Mesos is built using the same principles as the Linux kernel, only
        at a different level of abstraction. The Mesos<br>kernel runs on
        every machine and provides applications (e.g., Hadoop, Spark, Kafka,
        Elasticsearch) with API’s for<br>resource management and scheduling
        across entire datacenter and cloud environments.
      </p>
    </div><!-- /.header -->

    <div class="row feature-list">
      <div class="col-md-3 col-sm-3 feature-item">
        <h4>Linear scalability</h4>
        <p >Industry proven to easily scale to 10,000s of nodes.</p>
      </div>

      <div class="col-md-3 col-sm-3 feature-item">
        <h4>High availability</h4>
        <p>Fault-tolerant replicated master and agents using Zookeeper.
           Non-disruptive upgrades.</p>
      </div>

      <div class="col-md-3 col-sm-3 feature-item">
        <h4>Containers</h4>
        <p>Native support for launching containers with Docker and
           AppC images.</p>
      </div>

      <div class="col-md-3 col-sm-3 feature-item">
        <h4>Pluggable isolation</h4>
        <p>First class isolation support for CPU, memory, disk, ports, GPU,
           and modules for custom resource isolation.</p>
      </div>
    </div><!-- /.feature-list -->

    <div class="row feature-list">
      <div class="col-md-3 col-sm-3 feature-item">
        <h4>Two level scheduling</h4>
        <p>Support for running cloud native and legacy applications
           in the same cluster with pluggable scheduling policies.</p>
      </div>

      <div class="col-md-3 col-sm-3 feature-item">
        <h4>APIs</h4>
        <p>HTTP APIs for developing new distributed applications,
           for operating the cluster, and for monitoring.</p>
      </div>

      <div class="col-md-3 col-sm-3 feature-item">
        <h4>Web UI</h4>
        <p>Built-in Web UI for viewing cluster state and navigating
           container sandboxes.</p>
      </div>

      <div class="col-md-3 col-sm-3 feature-item">
        <h4>Cross Platform</h4>
        <p>Runs on Linux, OSX and Windows. Cloud provider agnostic.</p>
      </div>
    </div><!-- /.feature-list -->

  </div><!-- /.container -->
</div><!-- /.feature-list-group -->


    <!-- footer -->
    <div class="footer">
      <div class="container">

        <div class="col-md-12 trademark">
          <p>&copy; 2012-2022 <a href="https://apache.org">The Apache Software Foundation</a>.
            Apache Mesos, the Apache feather logo, and the Apache Mesos project logo are trademarks of The Apache Software Foundation.
          <p>
        </div>

      </div><!-- /.container -->
    </div><!-- /.footer -->

    <!-- JS -->
    <script src="assets/js/jquery-1.11.0.min.js"></script>
    <script src="assets/js/bootstrap.min.js"></script>
    <script src="assets/js/anchor-4.1.0.min.js"></script>

    <!-- Inject anchors for all headings on the page, see https://www.bryanbraun.com/anchorjs. -->
    <script type="text/javascript">
    anchors.options = {
      placement: 'right',
      ariaLabel: 'Permalink',
    };

    // The default is to not add anchors to h1, but we have pages with multiple h1 headers,
    // and we do want to put anchors on those.
    anchors.add('h1, h2, h3, h4, h5, h6');
    </script>
  </body>
</html>
