marți, 11 octombrie 2016

Android: distribuție Linux sau sistem de operare?

E un lucru bine știut că Android este bazat pe Linux. La fel cum e și Ubuntu, Fedora, Arch, Rogentos sau altele. Totuși acestora din urmă li se spune "distribuții Linux" în timp ce Android-ul este pomenit peste tot ca sistem de operare. Dacă atât Ubuntu cât și Android au la bază Linux, de ce acesta din urmă n-ar fi tot o distribuție Linux? Răspunsul e că - și probabil l-ați mai auzit - depinde. Depinde de unde vrei să trasezi linia ce delimitează o distribuție de un sistem de operare. Și fiecare o cam trasează unde consideră el că e bine.

E GNU/Linux, bă, nu Linux!

Există o anumită categorie de oameni care insistă ca sistemului de operare Linux să i se spună GNU/Linux sau GNU+Linux (sau LiGNUx, însă au renunțat ulterior). Deseori se râde de insistența lor cu toate că au dreptate când cer asta. Păi stai - ați zice - cine sunt ăștia să decidă ei cum să i se zică Linuxului făcut de Linus Torvalds? Sunt cei care se referă la sistemul de operare, nu la kernel.

Vedeți voi, un sistem de operare e format din mai multe componente, iar Linux e doar una din aceste componente: kernelul. Linux, luat separat, nu e decât un alt fișier banal pe un hard-disk. Nu poate forma de unul singur un sistem de operare. Mai este neapărată nevoie de un bootloader, care să facă pașii premergători încărcării și executării codului din kernel și mai apoi un set de programe prin care acel kernel să se facă util cumva. În cazul particular al Linux, odată executat acesta va pregăti sistemul și va încărca driverele necesare pentru ca acesta să funcționeze, și cam atât. Este nevoie de un alt program care să încarce tot ce trebuie până când sistemul poate deveni utilizabil. Ați auzit de upstart sau systemd? Ei bine, asta e treaba lor. Există sisteme de operare care pot inițializa tot sistemul doar din kernel, însă acest lucru reduce foarte mult flexiblitatea acestora.

În cea mai de bază configurație un sistem de operare cu kernelul Linux vă va lăsa într-o linie de comandă. E frumos să puteți scrie cd, rm, cp, mkdir sau alte comenzi, însă v-ați gândit vreodată cine face toate operațiunile declanșate de acele comenzi?

I have GNU, I have Linux...
Ei bine, aici intervine GNU. GNU este o colecție de programe dezvoltată de Free Software Foundation. Scopul acesteia era să facă parte dintr-un sistem de operare total gratuit și open-source. Pentru că sunt mai simplu de dezvoltat și pe principiul fă-ți tu potcoave că după aia ți-ai lua și cal cândva aceste programe au fost dezvoltate înainte de un kernel. Iar pentru că Linus Torvalds a făcut lucrul ăsta înainte de cei de la Free Software Foundation, colecția de programe GNU a fost portată să funcționeze împreună cu Linux.

Totodată de la proiectul GNU vine și biblioteca C, o componentă vitală pe care se bazează toate programele scrise în acest limbaj de programare. Fără această bibliotecă programele ar fi trebuit scrise în cod mașină sau în cel mai fericit caz în limbaj de asamblare, în acest fel dezvoltarea acestora fiind mult mai dificilă decât este deja. Majoritatea covârșitoare a distribuțiilor Linux folosesc această bibliotecă cât și colecția de programe de la proiectul GNU.

Așadar avem un sistem de operare format dintr-un bootloader, kernelul Linux, colecția de programe GNU și, în funcție de distribuția pe care o folosim, alte diverse aplicații. Mai țineți minte linia aia de care ziceam că delimitează un sistem de operare de o distribuție? Ei bine, dacă vrei să o pui în așa fel încât să ai pe de-o parte bootloader-ul, kernelul Linux și programele GNU iar pe cealaltă parte tot ce urmează după (medii grafice, editoare de text, browsere web și etc.) atunci Ubuntu, de exemplu, e o distribuție GNU/Linux. Nu poți pune acea linie doar între bootloader și kernel sau între kernel și programele GNU pentru că cu greu poți numi ceea ce rezultă un sistem de operare. Dacă consideri însă un sistem de operare ca fiind absolut toate programele ce le cuprinde, începând de la bootloader și terminând cu Minesweeper atunci Ubuntu, Fedora, Arch, Rogentos, etc. sunt toate sisteme de operare (și tocmai ai desființat conceptul de distribuție).

Android nu e GNU/Linux

Având și el la bază kernelul Linux, Android nu poate exista fără o bibliotecă C și toate programele necesare inițializării sistemului. Diferența e că Android nu folosește nici biblioteca și nici vreun program din colecția GNU, din motive de licențiere. Pe post de bibliotecă C în Android stă Bionic, dezvoltată de Google. Busybox ține loc de unele din programele din colecția GNU. De fapt, în afară de kernel, Android nu are prea multe lucruri în comun cu un Ubuntu sau Fedora sau etc. Iar doar bootloader-ul și kernelul, după cum spuneam, nu prea pot fi considerate sistem de operare deoarece nu completează scopul pe care îl are unul. Așadar putem să delimităm cel mai mult pe deoparte bootloader-ul, kernelul Linux și Bionic și pe de altă parte celelalte componente ale unui Android (SurfaceFlinger, AudioFlinger, etc). Pentru că nu avem nimic de la GNU putem fi siguri că Android nu este în mod cert o distribuție GNU/Linux. Apoi nu putem spune nici că Android ar fi o distribuție Linux deoarece:

Linux în sine nu prea este un sistem de operare

Dar credeați cumva, din ce am spus, că un sistem de operare nu poate fi format doar din bootloader și kernel? Așa o fi în cazul Linux însă există sisteme de operare formate doar din bootloader (cam primitive, nu încap prea multe chestii în 512 bytes) sau bootloader și kernel (acesta din urmă având încorporate direct funcționalitățile care în cazul Linux se găsesc în GNU sau colecții similare). Așadar, în acest caz, putem trasa linia aia care delimitează un sistem de operare de o distribuție undeva între kernel și restul aplicațiilor. Totuși, deoarece Linux nu integrează nici măcar un interpretor în linie de comandă e cam dificil să spui că ai un sistem de operare dacă iei în considerare doar bootloader-ul și kernelul.

După cum spuneam, totul depinde de unde vrei să trasezi acea linie imaginară între un sistem de operare și o distribuție. De asta nici nu e neapărat greșit să spui că Kogaion e un sistem de operare românesc dar nici nu e neapărat greșit să spui că Android este doar o altă distribuție de Linux. Totul ține de percepția fiecăruia.