+**
+** Commenting the source: doxygen
+**
+****************************************************
+
+The global structure of the documentation is in doc/modules.doc
+
+The structure of each module (xbt, msg, etc) is in doc/module-<module>.doc
+
+The structure of a module is in its public header. This way, you're sure to
+see all the public interface (and only it). The different parts of the
+interface are grouped using the @name construct, even if it's buggy. Since
+parts often get reordered, it's better to add numbers to the parts (so that
+users can see the intended order).
+
+The documentation of each type and macro are also in the public header since
+this is were they live.
+
+The documentation of each function must be in the C file were it lives.
+
+Any public element (function, type and macro) must have a @brief part.
+
+**
+** XBT virtualization mechanism (FIXME: this section is deprecated)
+**
+****************************************************
+
+There is some functionalities that we want to virtualize in XBT. We
+want xbt_time to give the simulated clock when running on top of the
+simulator, and the host clock when running on a real system. This
+could be placed in GRAS (and was, historically), but there is some
+reason to lower it down to XBT.
+
+Here is the used naming scheme:
+
+ - xbt_<module>_<func>(): functions working both in SG and RL
+ - xbt_os_<module>_<func>(): RL functions usable even in simulator
+
+ That way, in libsimgrid, we still can use native functions if we
+ want to. It may for example be useful to get the real time when
+ implementing the simulator. Think of the SIGINT handler, which
+ wants to see if the user pressed the key twice in a 5 seconds
+ interval. This is of little use to check the simulated time here.
+
+Here is the file layout:
+
+ - xbt_rl_<module>.c: native implementation (xbt_<module>_<func>()).
+ Simply call the corresponding xbt_os_<module>_<func>.
+ Part only of libgras.so
+
+ - xbt_sg_<module>.c: SIMIX implementation xbt_<module>_<func>()).
+ Simply call the corresponding SIMIX implementation.
+ Part only of libsimgrid.so
+
+ - xbt_os_<module>.c: body of the functions implementing natively the
+ stuff (xbt_os_<module>_<func>()).
+ Part of both libgras.so and libsimgrid.so
+
+Since there is almost nothing in xbt_rl_module.c and xbt_sg_module.c,
+it'd be better to use symbol aliasing here (to declare in the object
+code that the same function have two names), but I'm still
+investigating the portability of the thing to windows.
+
+
+*
+* SimGrid Hacker Survival Guide (FIXME: should be betterly placed)
+********************************
+
+* Before pushing any change, don't forget to check if the compilation
+ passes with compiler optimizations and warnings turned on:
+ cmake -Denable_compile_optimizations=ON \
+ -Denable_compile_warnings=ON
+
+* Your commit message should follow the git habits, explained eg here:
+ http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
+
+* When you add/remove files, and/or make changes in the lists of files to build,
+ please check that "make distcheck" still succeeds. This is needed to ensure
+ that the generated archive is consistent.
+
+* If you want to debug memory allocation problems, here are a few hints:
+ - disable compiler optimizations, to have better backtraces;
+ - disable the mallocators, or it will be hard to match malloc's with
+ free's;
+ - disable model checking, unless your problem lies in the model
+ checker part of SimGrid (MC brings its own malloc implementation,
+ which valgrind doesn't understand).
+ All this is configured with:
+ cmake -Denable_model-checking=OFF \
+ -Denable_mallocators=OFF \
+ -Denable_compile_optimizations=OFF
+
+* If you break the logs (for example while hacking in the dynars), you
+ want to define XBT_LOG_MAYDAY at the beginning of log.h. It will
+ deactivate the whole logging mechanism, switching to printfs
+ instead. SimGrid becomes incredibly verbose when doing so, but it
+ you let you fixing the dynars.