diff --git a/libc/docs/OVERVIEW.TXT b/libc/docs/OVERVIEW.TXT
new file mode 100644
index 0000000..4d40df6
--- /dev/null
+++ b/libc/docs/OVERVIEW.TXT
@@ -0,0 +1,364 @@
+Bionic C Library Overview:
+==========================
+
+Introduction:
+
+Core Philosophy:
+
+  The core idea behind Bionic's design is: KEEP IT REALLY SIMPLE.
+
+  This implies that the C library should only provide lightweight wrappers around kernel
+  facilities and not try to be too smart to deal with edge cases.
+
+  The name "Bionic" comes from the fact that it is part-BSD and part-Linux: its source
+  code consists in a mix of BSD C library pieces with custom Linux-specific bits used
+  to deal with threads, processes, signals and a few others things.
+
+  All original BSD pieces carry the BSD copyright disclaimer. Bionic-specific bits
+  carry the Android Open Source Project copyright disclaimer. And everything is released
+  under the BSD license.
+
+Architectures:
+
+  Bionic currently supports the ARM and x86 instruction sets. In theory, it should be
+  possible to support more, but this may require a little work (e.g. adding system
+  call IDs to SYSCALLS.TXT, described below, or modifying the dynamic linker).
+
+  The ARM-specific code is under arch-arm/ and the x86-specific one is under arch-x86/
+
+  Note that the x86 version is only meant to run on an x86 Android device. We make
+  absolutely no claim that you could build and use Bionic on a stock x86 Linux
+  distribution (though that would be cool, so patches are welcomed :-))
+
+Syscall stubs:
+
+  Each system call function is implemented by a tiny assembler source fragment
+  (called a "syscall stub"), which is generated automatically by tools/gensyscalls.py
+  which reads the SYSCALLS.TXT file for input.
+
+  SYSCALLS.TXT contains the list of all syscall stubs to generate, along with
+  the corresponding syscall numeric identifier (which may differ between ARM and x86),
+  and its signature
+
+  If you modify this file, you may want to use tools/checksyscalls.py which checks
+  its content against official Linux kernel header files, and will report errors when
+  invalid syscall ids are used.
+
+  Sometimes, the C library function is really a wrapper that calls the corresponding
+  syscall with another name. For example, the exit() function is provided by the C
+  library and calls the _exit() syscall stub.
+
+  See SYSCALLS.TXT for documentation and details.
+
+
+time_t:
+
+  time_t is 32-bit as defined by the kernel on 32-bit CPUs. A 64-bit version would
+  be preferrable to avoid the Y2038 bug, but the kernel maintainers consider that
+  this is not needed at the moment.
+
+  Instead, Bionic provides a <time64.h> header that defines a time64_t type, and
+  related functions like mktime64(), localtime64(), etc...
+
+
+Timezone management:
+
+  The name of the current timezone is taken from the TZ environment variable, if defined.
+  Otherwise, the system property named 'persist.sys.timezone' is checked instead.
+
+  The zoneinfo timezone database and index files are located under directory
+  /system/usr/share/zoneinfo, instead of the more Posix path of /usr/share/zoneinfo
+
+
+off_t:
+
+  For similar reasons, off_t is 32-bit. We define loff_t as the 64-bit variant due
+  to BSD inheritance, but off64_t should be available as a typedef to ease porting of
+  current Linux-specific code.
+
+
+
+Linux kernel headers:
+
+  Bionic comes with its own set of "clean" Linux kernel headers to allow user-space
+  code to use kernel-specific declarations (e.g. IOCTLs, structure declarations,
+  constants, etc...). They are located in:
+
+     ./kernel/common,
+     ./kernel/arch-arm
+     ./kernel/arch-x86
+
+  These headers have been generated by a tool (kernel/tools/update-all.py) to only
+  include the public definitions from the original Linux kernel headers.
+
+  If you want to know why and how this is done, read kernel/README.TXT to get
+  all the (gory) details.
+
+
+PThread implementation:
+
+   Bionic's C library comes with its own pthread implementation bundled in. This is
+   different from other historical C libraries which:
+
+    - place it in an external library (-lpthread)
+    - play linker tricks with weak symbols at dynamic link time
+
+   The support for real-time features (a.k.a. -lrt) is also bundled in the C library.
+
+   The implementation is based on futexes and strives to provide *very* short code paths
+   for common operations. Notable features are the following:
+
+      - pthread_mutex_t, pthread_cond_t are only 4 bytes each.
+
+      - Normal, recursive and error-check mutexes are supported, and the code path
+        is heavily optimized for the normal case, which is used most of the time.
+
+      - Process-shared mutexes and condition variables are not supported.
+        Their implementation requires far more complexity and was absolutely
+        not needed for Android (which uses other inter-process synchronization
+        capabilities).
+
+        Note that they could be added in the future without breaking the ABI
+        by specifying more sophisticated code paths (which may make the common
+        paths slightly slower though).
+
+      - There is currently no support for read/write locks, priority-ceiling in
+        mutexes and other more advanced features. Again, the main idea being that
+        this was not needed for Android at all but could be added in the future.
+
+pthread_cancel():
+
+   pthread_cancel() will *not* be supported in Bionic, because doing this would
+   involve making the C library significantly bigger for very little benefit.
+
+   Consider that:
+
+     - A proper implementation must insert pthread cancellation checks in a lot
+       of different places of the C library. And conformance is very difficult to
+       test properly.
+
+     - A proper implementation must also clean up resources, like releasing memory,
+       or unlocking mutexes, properly if the cancellation happens in a complex
+       function (e.g. inside gethostbyname() or fprintf() + complex formatting
+       rules). This tends to slow down the path of many functions.
+
+     - pthread cancellation cannot stop all threads: e.g. it can't do anything
+       against an infinite loop
+
+     - pthread cancellation itself has short-comings and isn't very portable
+       (see http://advogato.org/person/slamb/diary.html?start=49 for example).
+
+   All of this is contrary to the Bionic design goals. If your code depends on
+   thread cancellation, please consider alternatives.
+
+   Note however that Bionic does implement pthread_cleanup_push() and pthread_cleanup_pop(),
+   which can be used to handle cleanups that happen when a thread voluntarily exits
+   through pthread_exit() or returning from its main function.
+
+
+pthread_once():
+
+  Do not call fork() within a callback provided to pthread_once(). Doing this
+  may result in a deadlock in the child process the next time it calls pthread_once().
+
+  Also, you can't throw a C++ Exception from the callback (see C++ Exception Support
+  below).
+
+  The current implementation of pthread_once() lacks the necessary support of
+  multi-core-safe double-checked-locking (read and write barriers).
+
+
+Thread-specific data
+
+  The thread-specific storage only provides for a bit less than 64 pthread_key_t
+  objects to each process. The implementation provides 64 real slots but also
+  uses about 5 of them (exact number may depend on implementation) for its
+  own use (e.g. two slots are pre-allocated by the C library to speed-up the
+  Android OpenGL sub-system).
+
+  Note that Posix mandates a minimum of 128 slots, but we do not claim to be
+  Posix-compliant.
+
+  Except for the main thread, the TLS area is stored at the top of the stack. See
+  comments in bionic/libc/bionic/pthread.c for details.
+
+  At the moment, thread-local storage defined through the __thread compiler keyword
+  is not supported by the Bionic C library and dynamic linker.
+
+
+Multi-core support
+
+  At the moment, Bionic does not provide or use read/write memory barriers.
+  This means that using it on certain multi-core systems might not be supported,
+  depending on its exact CPU architecture.
+
+
+Android-specific features:
+
+  Bionic provides a small number of Android-specific features to its clients:
+
+  - access to system properties:
+
+       Android provides a simple shared value/key space to all processes on the
+       system. It stores a liberal number of 'properties', each of them being a
+       simple size-limited string that can be associated to a size-limited string
+       value.
+
+       The header <sys/system_properties.h> can be used to read system properties
+       and also defines the maximum size of keys and values.
+
+   - Android-specific user/group management:
+
+       There is no /etc/passwd or /etc/groups in Android. By design, it is meant to
+       be used by a single handset user. On the other hand, Android uses the Linux
+       user/group management features extensively to secure process permissions,
+       like access to various filesystem directories.
+
+       In the Android scheme, each installed application gets its own uid_t/gid_t
+       starting from 10000; lower numerical ids are reserved for system daemons.
+
+       getpwnam() recognizes some hard-coded subsystems names (e.g. "radio") and
+       will translate them to their low-user-id values. It also recognizes "app_1234"
+       as the synthetic name of the application that was installed with uid 10000 + 1234,
+       which is 11234. getgrnam() works similarly
+
+       getgrouplist() will always return a single group for any user name, which is
+       the one passed as an input parameter.
+
+       getgrgid() will similarly only return a structure that contains a single-element
+       members list, corresponding to the user with the same numerical value than the
+       group.
+
+       See bionic/libc/bionic/stubs.c for more details.
+
+    - getservent()
+
+       There is no /etc/services on Android. Instead the C library embeds a constant
+       list of services in its executable, which is parsed on demand by the various
+       functions that depend on it. See bionic/libc/netbsd/net/getservent.c and
+       bionic/libc/netbsd/net/services.h
+
+       The list of services defined internally might change liberally in the future.
+       This feature is mostly historically and is very rarely used.
+
+       The getservent() returns thread-local data. getservbyport() and getservbyname()
+       are also implemented in a similar fashion.
+
+     - getprotoent()
+
+       There is no /etc/protocol on Android. Bionic does not currently implement
+       getprotoent() and related functions. If we add it, it will likely be done
+       in a way similar to getservent()
+
+DNS resolver:
+
+  Bionic uses a NetBSD-derived resolver library which has been modified in the following
+  ways:
+
+     - don't implement the name-server-switch feature (a.k.a. <nsswitch.h>)
+
+     - read /system/etc/resolv.conf instead of /etc/resolv.conf
+
+     - read the list of servers from system properties. the code looks for
+       'net.dns1', 'net.dns2', etc.. Each property should contain the IP address
+       of a DNS server.
+
+       these properties are set/modified by other parts of the Android system
+       (e.g. the dhcpd daemon).
+
+       the implementation also supports per-process DNS server list, using the
+       properties 'net.dns1.<pid>', 'net.dns2.<pid>', etc... Where <pid> stands
+       for the numerical ID of the current process.
+
+     - when performing a query, use a properly randomized Query ID (instead of
+       a incremented one), for increased security.
+
+     - when performing a query, bind the local client socket to a random port
+       for increased security.
+
+     - get rid of *many* unfortunate thread-safety issues in the original code
+
+  Bionic does *not* expose implementation details of its DNS resolver; the content
+  of <arpa/nameser.h> is intentionally blank. The resolver implementation might
+  change completely in the future.
+
+
+PThread Real-Time Timers:
+
+  timer_create(), timer_gettime(), timer_settime() and timer_getoverrun() are
+  supported.
+
+  Bionic also now supports SIGEV_THREAD real-time timers (see timer_create()).
+  The implementation simply uses a single thread per timer, unlike GLibc which
+  uses complex heuristics to try to use the less threads possible when several
+  timers with compatible properties are used.
+
+  This means that if your code uses a lot of SIGEV_THREAD timers, your program
+  may consume a lot of memory. However, if your program needs many of these timers,
+  it'd better handle timeout events directly instead.
+
+  Other timers (e.g. SIGEV_SIGNAL) are handled by the kernel and use much less
+  system resources.
+
+
+Binary Compatibility:
+
+  Bionic is *not* in any way binary-compatible with the GNU C Library, ucLibc or any
+  known Linux C library. This means several things:
+
+  - You cannot expect to build something against the GNU C Library headers and have
+    it dynamically link properly to Bionic later.
+
+  - You should *really* use the Android toolchain to build your program against Bionic.
+    The toolchain deals with many important details that are crucial to get something
+    working properly.
+
+  Failure to do so will usually result in the inability to run or link your program,
+  or even runtime crashes. Several random web pages on the Internet describe how you
+  can succesfully write a "hello-world" program with the ARM GNU toolchain. These
+  examples usually work by chance, if anything else, and you should not follow these
+  instructions unless you want to waste a lot of your time in the process.
+
+  Note however that you *can* generate a binary that is built against the GNU C Library
+  headers and then statically linked to it. The corresponding executable should be able
+  to run (if it doesn't use dlopen()/dlsym())
+
+Dynamic Linker:
+
+  Bionic comes with its own dynamic linker (just like ld.so on Linux really comes from
+  GLibc). This linker does not support all the relocations generated by other GCC ARM
+  toolchains.
+
+C++ Exceptions Support:
+
+  At the moment, Bionic doesn't support C++ exceptions, what this really means is the
+  following:
+
+    - If pthread_once() is called with a C++ callback that throws an exception,
+      then the C library will keep the corresponding pthread_once_t mutex locked.
+      Any further call to pthread_once() will result in a deadlock.
+
+      A proper implementation should be able to register a C++ exception cleanup
+      handler before the callback to properly unlock the pthread_once_t. Unfortunately
+      this requires tricky assembly code that is highly dependent on the compiler.
+
+      This feature is not planned to be supported anytime soon.
+
+    - The same problem may arise if you throw an exception within a callback called
+      from the C library. Fortunately, these cases are very rare in the real-world,
+      but any callback you provide to the C library should *not* throw an exception.
+
+    - Bionic lacks a few support functions to have exception support work properly.
+
+Include Paths:
+
+  The Android build system should automatically provide the necessary include paths
+  required to build against the C library headers. However, if you want to do that
+  yourself, you will need to add:
+
+      libc/arch-$ARCH/include
+      libc/include
+      libc/kernel/common
+      libc/kernel/arch-$ARCH
+
+  to your C include path.
