.. Copyright David Abrahams 2006. Distributed under the Boost
.. Software License, Version 1.0. (See accompanying
.. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

============================
 |(logo)|__ Getting Started
============================

.. |(logo)| image:: ../../boost.png
   :alt: Boost
   :class: boost-logo

__ ../../index.htm

.. Admonition:: Use the latest version of this Getting Started guide

  The `Boost website version of this Getting Started guide`_ may
  have updated information, such as the location of additional installers
  or improved installation procedures, so you might want use that version
  if you've got an Internet connection available.

  .. _`Boost website version of this Getting Started guide`:
       http://www.boost.org/doc/libs/release/more/getting_started/index.html

Welcome
-------

Welcome to the Boost libraries!  By the time you've completed this
tutorial, you'll be at least somewhat comfortable with the contents
of a Boost distribution and how to go about using it.  

What's Here
-----------

This document is designed to be an *extremely* gentle introduction,
so we included a fair amount of material that may already be very
familiar to you.  To keep things simple, we also left out some
information intermediate and advanced users will probably want.  At
the end of this document, we'll refer you on to resources that can
help you pursue these topics further.

Preliminaries
-------------

We use one typographic convention that might not be immediately
obvious: *italic* text in examples is meant as a descriptive
placeholder for something else, usually information that you'll
provide.  For example:

.. parsed-literal::

   **$** echo "My name is *your name*\ "

Here you're expected to imagine replacing the text “your name” with
your actual name.

Ready?
------

Let's go!

.. footer::
  .. class:: nextpage

     | **Next:** `Getting Started on Microsoft Windows`__
     | **or:** `Getting Started on Unix variants (e.g. Linux, MacOS)`__

__ windows.html
__ unix-variants.html

