Mailing Lists
=============

These are the primary Mesa 3D / DRI mailing lists:

-  `mesa-users <https://lists.freedesktop.org/mailman/listinfo/mesa-users>`__
   - intended for end-users of Mesa and DRI drivers. Newbie questions
   are OK, but please try the general OpenGL resources and Mesa/DRI
   documentation first.

-  `mesa-dev <https://lists.freedesktop.org/mailman/listinfo/mesa-dev>`__
   - for Mesa, Gallium and DRI development discussion. Not for
   beginners.

-  `mesa-commit <https://lists.freedesktop.org/mailman/listinfo/mesa-commit>`__
   - relays Git check-in messages (for developers). In general, people
   should not post to this list.

-  `mesa-announce <https://lists.freedesktop.org/mailman/listinfo/mesa-announce>`__
   - announcements of new Mesa versions are sent to this list. Very low
   traffic.

-  `dri-devel <http://lists.freedesktop.org/mailman/listinfo/dri-devel>`__
   - for the Linux/BSD Direct Rendering Module (DRM) kernel modules
   supporting Mesa's userspace drivers

-  `piglit <https://lists.freedesktop.org/mailman/listinfo/piglit>`__ -
   for Piglit (OpenGL driver testing framework) discussion.

.. note::

   You **must** subscribe to these lists in order to post to
   them. If you try to post to a list and you're not a subscriber (or if
   you try to post from a different email address than you subscribed with)
   your posting will be held for an indefinite period or may be discarded
   entirely.

Follow the links above for list archives.

The old Mesa lists hosted at SourceForge are no longer in use. The
archives are still available, however:
`mesa3d-announce <https://sourceforge.net/mailarchive/forum.php?forum_name=mesa3d-announce>`__,
`mesa3d-users <https://sourceforge.net/mailarchive/forum.php?forum_name=mesa3d-users>`__,
`mesa3d-dev <https://sourceforge.net/mailarchive/forum.php?forum_name=mesa3d-dev>`__.

IRC
---

join `#dri-devel channel <irc://chat.freenode.net#dri-devel>`__ on
`irc.freenode.net <https://webchat.freenode.net/>`__

OpenGL Forums
-------------

Here are some other OpenGL-related forums you might find useful:

-  `OpenGL discussion
   forums <https://www.opengl.org/discussion_boards/>`__ at
   www.opengl.org
-  Usenet newsgroups:

   -  comp.graphics.algorithms
   -  comp.graphics.api.opengl
   -  comp.os.linux.x
