diff --git a/libc/docs/OVERVIEW.TXT b/libc/docs/OVERVIEW.TXT
new file mode 100644
index 0000000..4c153b1
--- /dev/null
+++ b/libc/docs/OVERVIEW.TXT
@@ -0,0 +1,388 @@
+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-compliant 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 added, 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.
+
+System V IPCs:
+
+  Bionic intentionally does not provide support for System-V IPCs mechanisms,
+  like the ones provided by semget(), shmget(), msgget(). The reason for this
+  is to avoid denial-of-service. For a detailed rationale about this, please
+  read the file docs/SYSV-IPCS.TXT.
+
+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.
