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 <https://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/p/mesa3d/mailman/mesa3d-announce/>`__,
`mesa3d-users <https://sourceforge.net/p/mesa3d/mailman/mesa3d-users/>`__,
`mesa3d-dev <https://sourceforge.net/p/mesa3d/mailman/mesa3d-dev/>`__.

IRC
---

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

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

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

-  `Khronos' OpenGL Community <https://community.khronos.org/c/opengl-general/34>`__
-  Usenet newsgroups:

   -  `comp.graphics.algorithms <news:comp.graphics.algorithms>`__
   -  `comp.graphics.api.opengl <news:comp.graphics.api.opengl>`__
   -  `comp.os.linux.x <news:comp.os.linux.x>`__
