Tuesday, October 21, 2008

Google Android Native libc Bionic library

Google developed a custom library for the C compiler (libc) called Bionic. This was necessary for three main reasons:

  • License: they wanted to keep GPL out of user-space. Bionic code uses the BSD license.
  • Size: the library has to be loaded in each process, so it needs to be small. Bionic is about 200K, or half the size of glibc (the GNU version of libc).
  • Speed: limited CPU power means it needs to be fast. Bionic has a small size and fast code paths, including a very fast and small custom pthread implementation.
Bionic has built-in support for important Android-specific services such as system properties and logging. It doesn’t support certain POSIX features, like C++ exceptions and wide chars, which were not needed on Android. Thus it’s not quite compatible with the gnu libc. All native code must be compiled against bionic, not glibc.

13 comments:

atomic said...

Static bins work, but busybox for instance has resolver issues that have me scratching my head (and strace won't strace it). Does the API include stuff for linking to this libc? I'm guessing no, since the offical way of creating apps is to use the sandbox'ed java environment..

Ramakrishna said...

So, does this mean if I have a try/catch in my code, it won't compile on Bionic?

ineyaa said...

"Size: the library has to be loaded in each process, so it needs to be small." -> Linux can reuse the page frames mapping the same shared library's code in multiple processes, so I don't understand this argument.

Scarlett said...

Wow! I'm pretty sure that this caught up plenty of people's attention, Thumbs up for your work and Good writing skills!

i am jayne and i am a freelance writer..
see my related post here ------> Man Suits

Arghya Chakraborty said...

Very best regards from Arlington criminal lawyer Paul Previte for your well written article. I got many unknown information from this blog.

Konstantin Krstev said...

strace works fine. either use bionic or place ld-linux.so.3, libc.so.6, libresolv.so.2, libnss_dns.so.2 in your /system/lib.

glibc resolverr library has issues with static building since ages :)

Massjo said...

I want to show gratitude for writing such a nice feature article, really will support me out in frequent ways…
Health Insurance Providers

zaro said...

This is highly informative .....
auto financing bankruptcy

zaro said...

Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts...
Physiological response to stress 

Liza Akter said...

Nice Post ...I like You

Anubis said...
This comment has been removed by the author.
Anubis said...

I guess if BuxyBox can be compiled against uClibc.

Pop Neo said...

Be meticulous using this type formal dresses cheap of portion, so that you can even be positive sexy prom dresses you actually look ideal as part of your dream wedding.
We offer wedding dresses, bridesmaid dresses, beach wedding dresses,my friends welcome to visit and see!
wedding dresses