subota, 20 aprila, 2024
Mobilni kutak

Android ispod haube

Autor: Nikola Hardi

Da li je Android istovremeno i Linux?

Kao što već sigurno dobro znate, Android je jedan od najpopularnijih operativnih sistema za pametne telefone i slične uređaje i zasnovan je na Linux kernelu. Razvija ga kompanija Google koja je u saradnji sa proizvođačima mobilnih telefona osnovala grupu za razvoj Android-a, pod nazivom Open Handset Alliance. Ova grupa je više formalnog karaktera i do sada nije imala značajnog uticaja na razvoj Android-a. Android nije čistokrvni Linux i jako se razlikuje od klasičnih Linux sistema, a da li imamo pravo da ga svrstavamo u Linux operativni sistem ili ne, procenite sami. U duhu teksta „Linux unatraške” i nekih budućih tekstova o Linux kernelu i operativnim sistemima, u ovom tekstu ćemo se baviti tematikom koja je na nekom nižem nivou, dalje od korisnika i bliže hardveru.

Gde je tu Linux i šta je tačno Android?

Jedan Android uređaj karakterišu veliki ekran osetljiv na dodir, aplikacije pisane u Java-i, moderan grafički korisnički interfejs, prodavnica za aplikacije i drugo. Android projekat se bavi pravljenjem programske podrške koja pruža ove mogućnosti. Napravljen je API koji programerima pruža način da iskoriste Android uređaj. Takođe se napravljeni dodatni sistemi koji omogućuju izvršavanje Android aplikacija i pružaju razne servise. U takve sisteme spadaju Dalvik virtuelna mašina, Android API i biblioteke, sistem za kreiranje i upravljanje aplikacijama kao i razne izmene u Linux kernelu. Dakle, Android uređaji ne koriste čistokrvni Linux kernel, a o svim ovim temama više detalja možete da pročitate u nastavku teksta.

Dalvik

Dalvik je Java virtuelna mašina koja je zadužena za izvršavanje Java kôda na Android-u. Pre svega, Java je jedan vrlo specifičan programski jezik. Java izvorni kôd se prevodi u tzv. Java bytecode koji potom interpretira i izvršava Java virtuelna mašina. Pitanje zašto je izabrana baš Java, ostavićemo za neko drugo mesto i vreme, ali ostaje pitanje zašto nije izabrana neka od već postojećih implementacija Java virtuelnih mašina. Za ovo postoji nekoliko odgovora, a dva najvažnija su Oracle i prenosivi uređaji.

Java i Solaris postali su vlasništvo kompanije Oracle, nakon što je Oracle 2009. godine otkupio kompaniju Sun Microsystems. Ovo je dovelo do mnogih pravnih sporova i problema oko licenciranja koje su tvorci Android-a želeli da izbegnu, a dovelo je i do drugih bitnih prekretnica u izboru tehnologija, kao što je izbor Harmony Java standardne biblioteke koju razvija Apache a ne Oracle. Drugi bitan faktor je činjenica da je Android namenjen prenosivim uređajima, što podrazumeva ograničene resurse po pitanju memorije, procesorske snage i baterije, pa je Dalvik stvoren baš za ovakve uslove rada.

Dalvik se od klasične Java virtuelne mašine razlikuje po nekim formalnim stavkama oko implementacije i arhitekture, ali i po formatu datoteka koje izvršava. Među virtuelnim mašinama postoje dve klase, one čiji se rad bazira na stack-u, i one čiji se rad bazira na registrima. Neki primeri stack based virtuelnih mašina su klasična Java virtuelna mašina i .NET virtuelna mašina. Dalvik je register based i sasvim je drugačije organizovan. Osim po arhitekturi, razlikuje se i po tome što se Java kôd prevodi u .class datoteke, a Dalvik radi sa .dex datotekama. Neke od važnih osobina .dex datoteka su da omogućuju bolju kompresiju, manje su i smanjeno je ponavljanje podataka unutar njih u odnosu na .class.

Bionic i Harmony

Bionic je zamena za standardnu biblioteku C programskog jezika koju je razvio Google, a zasniva se na BSD-ovoj biblioteci. Bionic se razvija odvojeno od Android-a, ali se vrlo čvrsto oslanja na Linux kernel. Objavljen je pod BSD licencom za razliku od GNU-ove varijante (glibc) i time je razvoj formalno slobodniji. Ovo naravno možemo da protumačimo i drugačije, jer je BSD licenca, u odnosu na GPLfamiliju licenci, zapravo pogodnija za izbegavanje objavljivanja kôda i izmena. Ovo jeste vid slobode, ali da li je prava stvar ili nije, to ostaje za neku drugu diskusiju. Osim licence, Bionic se razlikuje i po tome što je manji od glibc i optimizovan je za rad na sporijim procesorima. Iz sličnih razloga zbog koji su nastali Dalvik i Bionic, izabrana je Harmony biblioteka. Pored razlike u licenci, za Harmony je bitno navesti da je projekat pod Apache fondacijom i da je napisana iz početka. Vrlo je slična sa zvaničnim JavaSE i JavaME standardima, ali ne poklapa se sa njima potpuno.

Zygote

Android koristi poseban sistem za pokretanje sistema i Android aplikacija. Razlika u odnosu na standardne init sisteme je u tome što se rad Zygota ne završava po pokretanju svih servisa, već je Zygot aktivan, te i dalje kreira procese za novopokrenute Android aplikacije.

Servisi

Pošto je Android namenjen prenosivim uređajima, najčešće mobilnim telefonima i tabletima, on pruža i niz servisa za upravljanje periferijom. Servisi su različiti, od onih koji su zaduženi za razna obaveštenja, tajmere, alarme i drugo, do onih za upravljanje pokrenutim aplikacijama. Način pokretanja i upravljanja aplikacijama je takođe vrlo karakterističan. Dok na drugim sistemima imamo samo jednu aplikaciju koja je trenutno pokrenuta ili imamo pokrenute samo one aplikacije koje trenutno koristimo, Android koristi način koji funkcioniše po principu stack-a. Sve aplikacije koje smo pokrenuli, ostaju aktivne u pozadini i uvek se možemo vratiti na njih, a kada ponestane resursa, tada se stanje onih najstarijih aplikacija čuva i one se zaustavljaju.

Android biblioteke

Android je vrlo brzo stekao popularnost kako među krajnjim korisnicima, tako i među programerima, a za to je u velikoj meri zaslužan i deo Android-a koji programerima omogućava da na što jednostavniji način upravljaju raznim mogućnostima telefona. Ove biblioteke se jednim imenom zovu Android API i obuhvataju različite nivoe, od onih za definisanje izgleda i funkcionalnosti aplikacija do onih za komunikaciju sa drugim aplikacijama, servisima i hardverom.

Android kernel

Ovo je za mnoge bolna tačka. Da li je Android stvarno Linux ili baš i nije? Ne postoji tačan odgovor, a mi možemo opisati problem. Strogo gledano, Linux je samo kernel, dok je ostatak sistema proizvod GNU projekta. Dakle, možemo da pređemo na pitanje da li Android koristi Linux kernel? Da, Android koristi Linux kernel, s tim što su u potpunosti izmenjeni njegovi pojedini delovi. Ove izmene su dostupne i čak se nalaze u skladištu programskih paketa Linux kernela (za kernel hakere, /drivers/staging/android). Za sada ne postoje inicijative da ovaj kôd postane sastavni deo standardnog Linux kernela. Linux kernel na koji su primenjene ove izmene, često se naziva „androidizovan” Linux kernel, a procesom „androidizacije” od standardnog Linux kernela proizvoljne verzije možete napraviti kernel za Android, ukoliko vam je to iz nekog razloga potrebno.

Binder

Binder je zadužen za komunikaciju između procesa (IPC – inter process communication). Vrlo je čudno što se našao u samom kernelu. Mnogo češći slučaj je da se ovakva podrška implementira na višim nivoima, međutim, pošto je reč o sistemu sa ograničenim resursima i pošto se koristi za svakakve vidove komunikacije, ovakav potez je opravdan. Neki od primera za šta se sve koristi binder su: upravljač aplikacija i procesa, iscrtavanje na ekranu, unos podataka, pokretanje koda u drugim aplikacijama i drugo. Binder je u samom srcu Android-a i bilo bi vrlo teško zameniti ga na drugačiji način, barem u datom okruženju.

Ashmem

Na sistemima u kojima se izvršava više procesa istovremeno (multitasking), javlja se pojam deljenje memorije (shared memory). POSIX standard definiše deljenu memoriju, međutim, Android koristi drugačiji pristup problemu i ova implementacija se zove ashmem (Android shared memory). Naravno, i ovde je reč o štednji resursa, a glavna razlika između POSIX SHM i ashmem ogleda se u tome što se ashmem drugačije ponaša u sistemima sa malo radne memorije, a između ostalog, pruža i jednostavniji način za rad sa datotekama.

Alarm

Treća bitna karakteristika „androidizovanog” kernela su alarmi. Ovde nije reč o aplikaciji koja uznemirava vaše snove, već budi procese. U teoriji operativnih sistema postoji pojam signala kojima možemo obavestiti određeni proces o nekom događaju. Recimo, kada u terminalu pritisnemo kombinaciju tastera CTRL + C, tada u stvari trenutnom procesu šaljemo signal koji će proces da obradi i uradi nešto, najčešće će se zaustaviti. Drugi primer je signal SIGKILL kojim možemo da poručimo da se zaustavi, najčešće na destruktivan način. Sličnu funkcionalnost predstavljaju alarmi i SIGALARM. Program može da obavesti sistem da želi da se zaustavi i poruči od sistema buđenje u nekom trenutku. Tada taj proces prelazi u stanje čekanja, a po isteku zadatog vremena operativni sistem će tom procesu poslati signal SIGALARM i na taj način ga probuditi, odnosno nastaviti njegovo izvršavanje. Problem se javlja kada uređaj pređe u stanje pripravnosti (standby). U običnom Linux kernelu, tada vreme staje, a time se obustavlja i računanje vremena za ovakve alarme. Kada Android uređaj pređe u stanje pripravnosti (kada pritisnemo dugme za zaključavanje, na primer), o ovim alarmima se i dalje vodi računa.

Još nekoliko razlika

Android ne koristi X za iscrtavanje grafičkog okruženja, već se za to koristi direktno OpenGL ES (GLES), verzija OpenGL-a za embedded sisteme. GLES se razvija odvojeno od Android-a i za njegov razvoj je zadužena Kronos radna grupa, koja razvija OpenGL, OpenCL i druge nama već poznate biblioteke.

Mobilni telefoni koji koriste Android, najčešće u sebi imaju čip (SoC System on Chip) sa ARM procesorom i drugim delovima, međutim za upravljanje GSM/GPRS komunikacijom postoji poseban čip. Na ovim čipovima, koji se u Android svetu obično nazivaju radio-čipovima, pokrenut je poseban operativni sistem koji ostavlja ograničene mogućnosti za rad. O ovim operativnim sistemima i čipovima se ne zna mnogo, podaci o njima su u vlasništvu njihovih proizvođača, a ono na šta smo želeli da skrenemo pažnju, jeste da ne možemo tek tako da se igramo sa GSM signalima jer je to odvojen sistem sa jasno definisanom namenom.

Razvoj Android-a i licence

Android razvija Google i objavljen je pod ASL (Android Software Licence). Kôd do sada objavljenih verzija, javno je dostupan i slobodan za izmene na adresi android.googlesource.com. Kôd trenutne verzije koja je u fazi razvoja, dostupan je samo unutar kompanije ili drugim kompanijama sa kojima je potpisan poseban ugovor. U istom krugu ljudi ostaju i odluke o razvoju Android-a. Ovo jeste neobičan princip i nije karakterističan za svet slobodnog softvera, čak mnogi dovode i u pitanje da li je ovo uopšte slobodan softver. Po licenci jeste, a po načinu razvoja nije. Ni zajednica niti bilo ko izvan Google-a ne može ni na kakav način da utiče na razvoj ovog projekta. Opet, lepo od njih što su nam omogućili da zavirimo u kôd i nastavimo tamo gde su oni stali.

Alternative

Android nije jedini operativni sistem za prenosive uređaje i mobilne telefone koji je zasnovan na Linux-u. U proteklih deset godina imali smo priliku da vidimo projekte koji su se neslavno završili, a u nešto skorijoj istoriji imamo i nove projekte. U prvoj kategoriji su nažalost OpenMoko, MeeGo, Maemo i drugi. Lepa vest je da su Meego i Maemo nastavili da žive u projektu koji se zove Sailfish koji razvija finska kompanija za telefon Jolla. Druge dve popularnije alternative su FirefoxOS i Ubuntu za telefone.

Za kraj

Ovo je bio jedan kratak pregled Android-a i retka prilika da pročitate o detaljima sistema koji najverovatnije imate na svom telefonu. Sjajna knjiga na ovu temu je Embedded Android, a uvek možete da pitate i redakciju časopisa za više detalja ili pomoć. Na vama je sada ostalo da izvagate da li je Android Linux, ili baš i nije.