A safe estimate would be that Android and Linux are about 95% alike at the kernel level, and about 65% or so at the user-mode.
This guesstimate is drawn by taking into consideration that, at the kernel level, aside from
a few differences (ARM platform and drivers not withstanding), the rest of the kernel source is
unmodified. Those differences (which include IPC, memory and logging enhancements) are
collectively referred to as Androidisms, and most have in fact by now been merged into the
mainline – either replaced with similar kernel functionality, or included in the drivers/staging/
android) directory.
At the user-mode level, there is more of a divergence, introducing two entirely new components – the Dalvik runtime and the Hardware Abstraction Layer – as well as replacing glibc with Bionic, and providing a custom version of init, the system startup daemon.
Android also makes more clever use of features present in Linux, though left unused in
most desktop distributions. These include control groups, low-memory conditions (Linux OOM,
which Android expands on with its Low Memory Killer), and security features – capabilities and
SElinux
Android also uses quite a few open source projects which were of limited popularity in Linux, but form the backbone of its feature set. These projects (in the external/ folder of the AOSP) are largely responsible for implementing Android’s network capabilites, and include racoon(vpn),mdns (service discovery and Wi-Fi Direct), dnsmsg and hostapd (tethering and Wi-Fi Direct), and wpa_supplicant (Wi-Fi).