diff --git a/doc/userman/user-sources.tex b/doc/userman/user-sources.tex
index 0bb8b4360ed20e101419d6464d87e3603f151742..16722ff85a63d64221a7862426ff6a1ee6b8b212 100644
--- a/doc/userman/user-sources.tex
+++ b/doc/userman/user-sources.tex
@@ -113,7 +113,8 @@ is set by default). Unless a custom preprocessor is specified
 installed and uses it as preprocessor.
 If you do \emph{not} want annotations to be preprocessed, you need to pass
 option \texttt{-no-pp-annot} to \FramaC. Note that some headers in the
-standard C library provided with \FramaC (described below) use such annotations,
+standard C library provided with \FramaC (described in Section~\ref{sec:libc})
+use such annotations,
 therefore it might be necessary to disable inclusion of such headers.
 
 Also note that ACSL annotations are preprocessed separately from the C
@@ -131,20 +132,6 @@ preprocessing for ACSL annotations only. Those files may contain
 the previous paragraph. This allows to have macros in ACSL annotations while
 using a non-GNU-like preprocessor.
 
-\begin{important}
-  An experimental, incomplete, C standard library is bundled with \FramaC and installed
-  in the sub-directory \texttt{libc} of the directory printed by
-  \texttt{frama-c -print-share-path}. It contains standard \C headers,
-  some \acsl specifications and definitions for some library functions.
-  By default, these headers are used instead of the standard library ones:
-  option \optiondef{-}{frama-c-stdlib} (set by default) adds
-  \texttt{-I\$FRAMAC\_SHARE/libc} to the preprocessor command, and also
-  \texttt{-nostdinc} if \optionuse{-}{cpp-frama-c-compliant} is set.
-  Note that this library is provided on a best-effort basis, but it is part
-  of the {\em trusted computing base}: the specifications must be proofread
-  for correctness.
-\end{important}
-
 \section{Merging the Source Code files}
 
 After preprocessing, \FramaC parses, type-checks and links the source
@@ -427,6 +414,56 @@ indicate the option needed to allow the file to be parsed:
          allowed in C11 (option -c11).
 \end{verbatim}
 
+\section{Standard library (libc)}\label{sec:libc}
+
+\FramaC bundles a C standard library in order to help parse and analyze code
+that relies on the functions specified in the ISO C standard.
+Such library is provided on a best-effort basis, and it is part of the
+{\em trusted computing base}: to ensure its correctness, the specifications
+must be ultimately proofread by the user.
+
+This library, while incomplete, is constantly being improved and extended.
+It is installed in the sub-directory \texttt{libc} of the directory printed by
+\texttt{frama-c -print-share-path}. It contains standard \C headers,
+some \acsl specifications, and definitions for a few library functions.
+
+By default, \FramaC's preprocessing will include the headers of its own standard
+library, instead of those installed in the user's machine. This avoids issues
+with non-portable, compiler-specific features.
+Option \optiondef{-}{frama-c-stdlib} (set by default)
+adds \texttt{-I\$FRAMAC\_SHARE/libc} to the preprocessor command, and also
+\texttt{-nostdinc} if \optionuse{-}{cpp-frama-c-compliant} is set.
+
+The use of \FramaC's standard library contains a few caveats:
+\begin{itemize}
+\item definitions which are not present in \FramaC's standard library may cause
+  parsing errors, e.g. missing type definitions, or missing fields in structs;
+\item if a header is included which is not available in \FramaC's library,
+  preprocessing will fail by default (due to the \texttt{-nostdinc} option);
+  if the user manually includes the system's library, e.g. by adding
+  \texttt{-cpp-extra-args='-I/usr/include'}, the preprocessor will end up
+  mixing headers from \FramaC's library with those from the system, often
+  leading to incompatible definitions and unexpected parsing errors.
+  In this case, the best approach is usually to include {\em only} the missing
+  definitions, for instance by copying them to a separate header file, included
+  manually or via the GCC-compatible option \texttt{-include <header.h>}
+  (see {\em GCC's Preprocessor Options} for more details). Alternatively,
+  consider filing an issue (see Chapter~\ref{user-errors}) to ask for the
+  inclusion of such headers and/or definitions in \FramaC's standard library.
+\end{itemize}
+
+In order to simplify parsing of code using common open-source libraries,
+\FramaC's standard library also includes some POSIX and non-POSIX headers which
+are not part of ISO C.
+
+Note that, while \FramaC's library intends to offer maximum portability, some
+definitions such as numeric constants require actual values to be defined.
+For pragmatic reasons, such definitions are most often based on the values
+defined in GNU/Linux's libc, and may differ from those in your system.
+As stated before, if you want to ensure the code analyzed by \FramaC is
+strictly equivalent to the one from the target system, you must either
+proofread the definitions, or provide your own library files.
+
 \section{Warnings during normalization}\label{sec:warnings-normalize}
 
 \emph{Note: the options below are deprecated, replaced by the more general and