We aim to compile on C89, but we try to avoid using any feature that's not in even older standards if possible. As this is a configure system, it should not need yet another configure system to compile. In this document we explain a few design decisions related to this topic. alloca: only a few systems supports alloca, we use (the slower) malloc/free method to get local storage. inline: do not use inline functions, some older C compilers don't like it (for example OSF/1 (Tru64)). local functions: for similar reason to that discussed at inline, we never use local functions (function definition inside a function). strdup(): POSIX.1-2001; we use strclone() instead snprintf(): C99; we use less safe sprintf() with "big enough" buffers instead. system(): popen() and pipe() are defined in POSIX.1-2001 only so we need to use the slower method by running system() and redirect output to a file that we later read. vararg macros: never; use instead.