+/** @addtogroup GRAS_msg
+ * @brief Defining messages and callbacks, and exchanging messages (Communication facility)
+ *
+ * There is two way to receive messages in GRAS. The first one is to
+ * register a given function as callback to a given type of messages (see
+ * \ref gras_cb_register and associated section). But you can also
+ * explicitely wait for a given message with the \ref gras_msg_wait
+ * function.
+ *
+ * Usually, both ways are not intended to be mixed of a given type of
+ * messages. But if you do so, it shouldn't trigger any issue. If the
+ * message arrives when gras_msg_wait is blocked, then it will be routed
+ * to it. If it arrives when before or after gras_msg_wait, it will be
+ * passed to the callback.
+ *
+ * For an example of use, please refer to \ref GRAS_ex_ping.
+ *
+ * @{
+ */
+
+/** @name 1. Message declaration and retrival
+ *
+ * GRAS messages can only accept one type of payload. If you absolutely want to declare a message
+ * able to convey several datatypes, you can always say that it conveys a generic reference (see
+ * \ref gras_datadesc_ref_generic).
+ *
+ * In order to ease the upgrade of GRAS applications, it is possible to \e version the messages, ie
+ * to add a version number to the message (by default, the version is set to 0). Any messages of the
+ * wrong version will be ignored by the applications not providing any specific callback for them.
+ *
+ * This mechanism (stolen from the dynamic loader one) should ensure you to change the semantic of a given
+ * message while still understanding the old one.
+ */
+/** @{ */
+/** \brief Opaque type */