.. _about:

========================
About This Documentation
========================

This is the documentation for version |version| of Bugzilla, a bug-tracking
system from Mozilla. Bugzilla is an enterprise-class piece of software
that tracks millions of bugs and issues for thousands of organizations around
the world.

The most current version of this document can always be found on the
`Bugzilla website <http://www.bugzilla.org/docs/>`_.

.. _evaluating:

Evaluating Bugzilla
###################

If you want to try out Bugzilla to see if it meets your needs, you can do so
on `Landfill <https://landfill.bugzilla.org/bugzilla-4.4-branch/>`_, our test
server. The `Bugzilla FAQ <https://wiki.mozilla.org/Bugzilla:FAQ>`_ may also
be helpful, as it answers a number of questions people sometimes have about
whether Bugzilla is for them.

.. _getting-help:

Getting More Help
#################

If this document does not answer your questions, we run a
`Mozilla forum <https://www.mozilla.org/about/forums/#support-bugzilla>`_
which can be accessed as a newsgroup, mailing list, or over the web as a
Google Group. Please
`search it <https://groups.google.com/forum/#!forum/mozilla.support.bugzilla>`_
first, and then ask your question there.

If you need a guaranteed response, commercial support is
`available <http://www.bugzilla.org/support/consulting.html>`_ for Bugzilla
from a number of people and organizations.

.. _conventions:

Document Conventions
####################

This document uses the following conventions:

.. warning:: This is a warning—something you should be aware of.

.. note:: This is just a note, for your information.

A filename or a path to a filename is displayed like this:
:file:`/path/to/filename.ext`

A command to type in the shell is displayed like this:
:command:`command --arguments`

A sample of code is illustrated like this:

::

    First Line of Code
    Second Line of Code
    ...

This documentation is maintained in
`reStructured Text
<http://docutils.sourceforge.net/docs/user/rst/quickstart.html>`_ format using
the `Sphinx <http://www.sphinx-doc.org/>`_ documentation system. It has
recently been rewritten, so it undoubtedly has bugs. Please file any you find, in
the `Bugzilla Documentation
<https://bugzilla.mozilla.org/enter_bug.cgi?product=Bugzilla;component=Documentation>`_
component in Mozilla's installation of Bugzilla. If you also want to make a
patch, that would be wonderful. Changes are best submitted as diffs, attached
to a bug. There is a :ref:`Style Guide <style-guide>` to help you write any
new text and markup.

.. _license:

License
#######

Bugzilla is `free <http://www.gnu.org/philosophy/free-sw.html>`_ and
`open source <http://opensource.org/osd>`_ software, which means (among other
things) that you can download it, install it, and run it for any purpose
whatsoever without the need for license or payment. Isn't that refreshing?

Bugzilla's code is made available under the
`Mozilla Public License 2.0 <http://www.mozilla.org/MPL/2.0/>`_ (MPL),
specifically the variant which is Incompatible with Secondary Licenses.
However, again, if you only want to install and run Bugzilla, you don't need
to worry about that; it's only relevant if you redistribute the code or any
changes you make.

Bugzilla's documentation is made available under the
`Creative Commons CC-BY-SA International License 4.0
<https://creativecommons.org/licenses/by-sa/4.0/>`_,
or any later version.

.. _credits:

Credits
#######

The people listed below have made significant contributions to the
creation of this documentation:

Andrew Pearson,
Ben FrantzDale,
Byron Jones,
Dave Lawrence,
Dave Miller,
Dawn Endico,
Eric Hanson,
Gervase Markham,
Jacob Steenhagen,
Joe Robins,
Kevin Brannen,
Martin Wulffeld,
Matthew P. Barnson,
Ron Teitelbaum,
Shane Travis,
Spencer Smith,
Tara Hernandez,
Terry Weissman,
Vlad Dascalu,
Zach Lipton.
