Our study involves two types of experiments with real,
client-side applications on the three OSes: dynamic experiments
and static analysis. Dynamic experiments let us obtain
detailed and precise POSIX usage patterns, but we can only
run them at limited scale (e.g., 45 popular applications in
our Android study). Static analysis lets us generalize trends
at large scale (e.g., 1.1M applications in our Android study),
but conclusions are not as precise.
In support of these studies, we developed libtrack, a tool
that traces the use of a given native C library from modern
applications. While libtrack is general and can trace the usage
of arbitrary native libraries, in this paper we exclusively
use it to track POSIX C standard library implementations in
the OSes we study. libtrack implements two modules: (1) a
dynamic module, which collects and analyzes traces of calls
to a given C standard library produced by running applications;
and (2) a static module, which analyzes arbitrary native
libraries and binaries for links (i.e., dynamic relocations)
to the given C standard library. Section 4.1 describes our libtrack
implementation and Section 4.2 details our methodology
of using it.