Bionic (λογισμικό)
Η βιβλιοθήκη Bionic libc είναι μια υλοποίηση της C πρότυπης βιβλιοθήκης (BSD). Η ανάπτυξη της βιβλιοθήκης ξεκίνησε από την Google για να χρησιμοποιηθεί στα λειτουργικά συστήματα Android [1] τα οποία βασίζονται στον πυρήνα Linux. Η βιβλιοθήκη Bionic παρέχει λειτουργίες σχετικές με τον πυρήνα του Linux. Σήμερα η ανάπτυξη της βιβλιοθήκης συνεχίζεται ανεξάρτητα με την ανάπτυξη του πηγαίου κώδικα της πλατφόρμας Android.
Γενικά[Επεξεργασία | επεξεργασία κώδικα]
Γενικά οι στόχοι της βιβλιοθήκης Bionic συνοψίζονται στα:[2][3]
- BSD ελεύθερη άδεια, μια προσπάθεια της Google να αποδεσμεύσει το λειτουργικό Android από τους περιορισμούς της άδειας GPL και LGP:
- Το Android βασίζεται στον πυρήνα linux το οποίο έχει ελεύθερη άδεια GNU (GPL) έκδοση 2.
- Η πιό διαδεδομένη βιβλιοθήκη της γλώσσας C για τον πυρήνα του Linux είναι η πρότυπη βιβλιοθήκη C και η uClibc οι οποίες έχουν ελεύθερη άδεια LGPL. Η LGPL σε αντίθεση με την GPL επιτρέπει δυναμικό linking αλλά δεν επιτρέπει στατικό linking εμπορικού (μη ελεύθερου) λογισμικού.
- Μικρό μέγεθος: Η βιβλιοθήκη Bionic είναι μικρότερη από την GNU πρότυπη βιβλιοθήκη C (glibc) και λίγο μικρότερη από την uClibc.
- Ταχύτητα: Η βιβλιοθήκη Bionic είναι σχεδιασμένη για επεξεργαστές με χαμηλές επιδόσεις λειτουργίας (όπως οι επεξεργαστές των κινητών τηλεφώνων-συσκευών).
Προτείνεται η χρήση της βιβλιοθήκης Bionic με την βιβλιοθήκη NDK (Native Development Kit) του Android.
Δυνατότητες και περιορισμοί[Επεξεργασία | επεξεργασία κώδικα]
Η βιβλιοθήκη Bionic έχει διάφορους περιορισμούς σε σύγκριση με την βιβλιοθήκη glibc το οποίο πηγάζει από το γεγονός ότι η Bionic έχει σχεδιαστεί για το Android.[2][4][5] Μερικοί από τους περιορσισμούς είναι:
- Η βιβλιοθήκη Bionic δεν συμπεριλαμβάνει διαχείριση εξαιρέσεων της C++ (exception handling). Αυτό οφείλεται στο ότι οι εφαρμογές Android είναι κυρίως γραμμένες σε γλώσσα Java όπου και γίνεται η διαχείριση εξαιρέσεων.
- Η βιβλιοθήκη Bionic δεν περιλαμβάνει της βιβλιοθήκη STL. Αν οι προγραμματιστές χρειάζονται δυνατότητες της STL θα πρέπει να την συμπεριλάβουν ξεχωριστά.
- Η βιβλιοθήκη Bionic δεν υποστηρίζει wide characters.
- Μερικές συναρτήσεις POSIX και ορισμένες επικεφαλίδες (headers) για κλήσεις συστήματος είναι υλοποιημένες ως κενοί μέθοδοι (method stubs) ή ενθυλακώνουν (wrappers) λειτουργίες συσχετιζόμενες με το λειτουργικό Android (και σε κάποιες περιπτώσεις έχουμε μη αναμενόμενη/επιθυμητή συμπεριφορά).[2][5][6][7]
- Στο Android Jelly Bean MR1 (4.2), στο μεταγλωτισμένο κώδικα της bionic υπάρχει και υποστήριξη της βιβλιοθήκης glibc,[8] για συναρτήσεις όπως
strcpy()
strcat()
καιmemcpy()
όπου υπάρχει έλεγχος για υπερχείλιση των buffers (έλεγχος κατά την διάρκεια της μεταγλώττισης). Αυτή η δυνατότητα είναι διαθέσιμη για εφαρμογές οι οποίες έχουν μεταγλωττιστεί με τον GNU gcc μεταγλωττιστή για επεξεργαστές Arm.[9]
Παραπομπές[Επεξεργασία | επεξεργασία κώδικα]
- ↑ «Android Anatomy and Physiology» (PDF). Google I/Ο. 28 Μαΐου 2008. Αρχειοθετήθηκε από το πρωτότυπο (PDF) στις 8 Απριλίου 2016. Ανακτήθηκε στις 23 Μαΐου 2014.
- ↑ 2,0 2,1 2,2 Burnette, Ed (4 Ιουνίου 2008). «Patrick Brady dissects Android». ZDNet.
- ↑ Turner, David (7 Φεβρουαρίου 2009). «Questions about Bionic».
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.
- ↑ Devos, Devos (2014). «Bionic vs Glibc report - Master thesis» (PDF). Αρχειοθετήθηκε από το πρωτότυπο (PDF) στις 22 Μαρτίου 2014. Ανακτήθηκε στις 22 Μαρτίου 2014.
- ↑ 5,0 5,1 Gentry, Denton (28 Νοεμβρίου 2008). «The Six Million Dollar LibC».
- ↑ «Not working on Xoom/Android 3.0 Honeycomb». 15 Απριλίου 2011.
- ↑ «getmntent() is not implemented in bionic/libc/bionic/stubs.c». 25 Φεβρουαρίου 2011.
- ↑ «Jelly Bean». Android Developers. android.com. Ανακτήθηκε στις 27 Δεκεμβρίου 2013.
- ↑ «Android 4.2 and FORTIFY_SOURCE». Android Security Discussions. groups.google.com. Ανακτήθηκε στις 27 Δεκεμβρίου 2013.