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]

Παραπομπές[Επεξεργασία | επεξεργασία κώδικα]

  1. «Android Anatomy and Physiology» (PDF). Google I/Ο. 28 Μαΐου 2008. Αρχειοθετήθηκε από το πρωτότυπο (PDF) στις 8 Απριλίου 2016. Ανακτήθηκε στις 23 Μαΐου 2014. 
  2. 2,0 2,1 2,2 Burnette, Ed (4 Ιουνίου 2008). «Patrick Brady dissects Android». ZDNet. 
  3. 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. 
  4. Devos, Devos (2014). «Bionic vs Glibc report - Master thesis» (PDF). Αρχειοθετήθηκε από το πρωτότυπο (PDF) στις 22 Μαρτίου 2014. Ανακτήθηκε στις 22 Μαρτίου 2014. 
  5. 5,0 5,1 Gentry, Denton (28 Νοεμβρίου 2008). «The Six Million Dollar LibC». 
  6. «Not working on Xoom/Android 3.0 Honeycomb». 15 Απριλίου 2011. 
  7. «getmntent() is not implemented in bionic/libc/bionic/stubs.c». 25 Φεβρουαρίου 2011. 
  8. «Jelly Bean». Android Developers. android.com. Ανακτήθηκε στις 27 Δεκεμβρίου 2013. 
  9. «Android 4.2 and FORTIFY_SOURCE». Android Security Discussions. groups.google.com. Ανακτήθηκε στις 27 Δεκεμβρίου 2013. 

Εξωτερικοί σύνδεσμοι[Επεξεργασία | επεξεργασία κώδικα]