петак, 26 априла, 2024
Мобилни кутак

Андроид испод хаубе

Аутор: Никола Харди

Да ли је Android истовремено и Linux?

Као што већ сигурно добро знате, Android је један од најпопуларнијих оперативних система за паметне телефоне и сличне уређаје и заснован је на Linux кернелу. Развија га компанија Google која је у сарадњи са произвођачима мобилних телефона основала групу за развој Android-а, под називом Open Handset Alliance. Ова група је више формалног карактера и до сада није имала значајног утицаја на развој Android-а. Android није чистокрвни Linux и јако се разликује од класичних Linux система, а да ли имамо право да га сврставамо у Linux оперативни систем или не, процените сами. У духу текста „Linux унатрашке” и неких будућих текстова о Linux кернелу и оперативним системима, у овом тексту ћемо се бавити тематиком која је на неком нижем нивоу, даље од корисника и ближе хардверу.

Где је ту Linux и шта је тачно Android?

Један Android уређај карактеришу велики екран осетљив на додир, апликације писане у Java-и, модеран графички кориснички интерфејс, продавница за апликације и друго. Android пројекат се бави прављењем програмске подршке која пружа ове могућности. Направљен је API који програмерима пружа начин да искористе Android уређај. Такође се направљени додатни системи који омогућују извршавање Android апликација и пружају разне сервисе. У такве системе спадају Dalvik виртуелна машина, Android API и библиотеке, систем за креирање и управљање апликацијама као и разне измене у Linux кернелу. Дакле, Android уређаји не користе чистокрвни Linux кернел, а о свим овим темама више детаља можете да прочитате у наставку текста.

Dalvik

Dalvik је Java виртуелна машина која је задужена за извршавање Java кôда на Android-у. Пре свега, Java је један врло специфичан програмски језик. Java изворни кôд се преводи у тзв. Java bytecode који потом интерпретира и извршава Java виртуелна машина. Питање зашто је изабрана баш Java, оставићемо за неко друго место и време, али остаје питање зашто није изабрана нека од већ постојећих имплементација Java виртуелних машина. За ово постоји неколико одговора, а два најважнија су Oracle и преносиви уређаји.

Java и Solaris постали су власништво компаније Oracle, након што је Oracle 2009. године откупио компанију Sun Microsystems. Ово је довело до многих правних спорова и проблема око лиценцирања које су творци Android-а желели да избегну, а довело је и до других битних прекретница у избору технологија, као што је избор Harmony Java стандардне библиотеке коју развија Apache а не Oracle. Други битан фактор је чињеница да је Android намењен преносивим уређајима, што подразумева ограничене ресурсе по питању меморије, процесорске снаге и батерије, па је Dalvik створен баш за овакве услове рада.

Dalvik се од класичне Java виртуелне машине разликује по неким формалним ставкама око имплементације и архитектуре, али и по формату датотека које извршава. Међу виртуелним машинама постоје две класе, оне чији се рад базира на stack-у, и оне чији се рад базира на регистрима. Неки примери stack based виртуелних машина су класична Java виртуелна машина и .NET виртуелна машина. Dalvik је register based и сасвим је другачије организован. Осим по архитектури, разликује се и по томе што се Java кôд преводи у .class датотеке, а Dalvik ради са .dex датотекама. Неке од важних особина .dex датотека су да омогућују бољу компресију, мање су и смањено је понављање података унутар њих у односу на .class.

Bionic и Harmony

Bionic је замена за стандардну библиотеку C програмског језика коју је развио Google, а заснива се на BSD-овој библиотеци. Bionic се развија одвојено од Android-а, али се врло чврсто ослања на Linux кернел. Објављен је под BSD лиценцом за разлику од GNU-ове варијанте (glibc) и тиме је развој формално слободнији. Ово наравно можемо да протумачимо и другачије, јер је BSD лиценца, у односу на GPL фамилију лиценци, заправо погоднија за избегавање објављивања кôда и измена. Ово јесте вид слободе, али да ли је права ствар или није, то остаје за неку другу дискусију. Осим лиценце, Bionic се разликује и по томе што је мањи од glibc и оптимизован је за рад на споријим процесорима. Из сличних разлога због који су настали Dalvik и Bionic, изабрана је Harmony библиотека. Поред разлике у лиценци, за Harmony је битно навести да је пројекат под Apache фондацијом и да је написана из почетка. Врло је слична са званичним JavaSE и JavaME стандардима, али не поклапа се са њима потпуно.

Zygote

Android користи посебан систем за покретање система и Android апликација. Разлика у односу на стандардне init системе је у томе што се рад Zygota не завршава по покретању свих сервиса, већ је Zygot активан, те и даље креира процесе за новопокренуте Android апликације.

Сервиси

Пошто је Android намењен преносивим уређајима, најчешће мобилним телефонима и таблетима, он пружа и низ сервиса за управљање периферијом. Сервиси су различити, од оних који су задужени за разна обавештења, тајмере, аларме и друго, до оних за управљање покренутим апликацијама. Начин покретања и управљања апликацијама је такође врло карактеристичан. Док на другим системима имамо само једну апликацију која је тренутно покренута или имамо покренуте само оне апликације које тренутно користимо, Android користи начин који функционише по принципу stack-а. Све апликације које смо покренули, остају активне у позадини и увек се можемо вратити на њих, а када понестане ресурса, тада се стање оних најстаријих апликација чува и оне се заустављају.

Android библиотеке

Android је врло брзо стекао популарност како међу крајњим корисницима, тако и међу програмерима, а за то је у великој мери заслужан и део Android-а који програмерима омогућава да на што једноставнији начин управљају разним могућностима телефона. Ове библиотеке се једним именом зову Android API и обухватају различите нивое, од оних за дефинисање изгледа и функционалности апликација до оних за комуникацију са другим апликацијама, сервисима и хардвером.

Android кернел

Ово је за многе болна тачка. Да ли је Android стварно Linux или баш и није? Не постоји тачан одговор, а ми можемо описати проблем. Строго гледано, Linux је само кернел, док је остатак система производ GNU пројекта. Дакле, можемо да пређемо на питање да ли Android користи Linux кернел? Да, Android користи Linux кернел, с тим што су у потпуности измењени његови поједини делови. Ове измене су доступне и чак се налазе у складишту програмских пакета Linux кернела (за кернел хакере, /drivers/staging/android). За сада не постоје иницијативе да овај кôд постане саставни део стандардног Linux кернела. Linux кернел на који су примењене ове измене, често се назива „андроидизован” Linux кернел, а процесом „андроидизације” од стандардног Linux кернела произвољне верзије можете направити кернел за Android, уколико вам је то из неког разлога потребно.

Binder

Binder је задужен за комуникацију између процеса (IPC – inter process communication). Врло је чудно што се нашао у самом кернелу. Много чешћи случај је да се оваква подршка имплементира на вишим нивоима, међутим, пошто је реч о систему са ограниченим ресурсима и пошто се користи за свакакве видове комуникације, овакав потез је оправдан. Неки од примера за шта се све користи binder су: управљач апликација и процеса, исцртавање на екрану, унос података, покретање кода у другим апликацијама и друго. Binder је у самом срцу Android-а и било би врло тешко заменити га на другачији начин, барем у датом окружењу.

Ashmem

На системима у којима се извршава више процеса истовремено (multitasking), јавља се појам дељење меморије (shared memory). POSIX стандард дефинише дељену меморију, међутим, Android користи другачији приступ проблему и ова имплементација се зове ashmem (Android shared memory). Наравно, и овде је реч о штедњи ресурса, а главна разлика између POSIX SHM и ashmem огледа се у томе што се ashmem другачије понаша у системима са мало радне меморије, а између осталог, пружа и једноставнији начин за рад са датотекама.

Аларм

Трећа битна карактеристика „андроидизованог” кернела су аларми. Овде није реч о апликацији која узнемирава ваше снове, већ буди процесе. У теорији оперативних система постоји појам сигнала којима можемо обавестити одређени процес о неком догађају. Рецимо, када у терминалу притиснемо комбинацију тастера CTRL + C, тада у ствари тренутном процесу шаљемо сигнал који ће процес да обради и уради нешто, најчешће ће се зауставити. Други пример је сигнал SIGKILL којим можемо да поручимо да се заустави, најчешће на деструктиван начин. Сличну функционалност представљају аларми и SIGALARM. Програм може да обавести систем да жели да се заустави и поручи од система буђење у неком тренутку. Тада тај процес прелази у стање чекања, а по истеку задатог времена оперативни систем ће том процесу послати сигнал SIGALARM и на тај начин га пробудити, односно наставити његово извршавање. Проблем се јавља када уређај пређе у стање приправности (standby). У обичном Linux кернелу, тада време стаје, а тиме се обуставља и рачунање времена за овакве аларме. Када Android уређај пређе у стање приправности (када притиснемо дугме за закључавање, на пример), о овим алармима се и даље води рачуна.

Још неколико разлика

Android не користи X за исцртавање графичког окружења, већ се за то користи директно OpenGL ES (GLES), верзија OpenGL-а за embedded системе. GLES се развија одвојено од Android-а и за његов развој је задужена Kronos радна група, која развија OpenGL, OpenCL и друге нама већ познате библиотеке.

Мобилни телефони који користе Android, најчешће у себи имају чип (SoC System on Chip) са ARM процесором и другим деловима, међутим за управљање GSM/GPRS комуникацијом постоји посебан чип. На овим чиповима, који се у Android свету обично називају радио-чиповима, покренут је посебан оперативни систем који оставља ограничене могућности за рад. О овим оперативним системима и чиповима се не зна много, подаци о њима су у власништву њихових произвођача, а оно на шта смо желели да скренемо пажњу, јесте да не можемо тек тако да се играмо са GSM сигналима јер је то одвојен систем са јасно дефинисаном наменом.

Развој Android-а и лиценце

Android развија Google и објављен је под ASL (Android Software Licence). Кôд до сада објављених верзија, јавно је доступан и слободан за измене на адреси android.googlesource.com. Кôд тренутне верзије која је у фази развоја, доступан је само унутар компаније или другим компанијама са којима је потписан посебан уговор. У истом кругу људи остају и одлуке о развоју Android-а. Ово јесте необичан принцип и није карактеристичан за свет слободног софтвера, чак многи доводе и у питање да ли је ово уопште слободан софтвер. По лиценци јесте, а по начину развоја није. Ни заједница нити било ко изван Google-а не може ни на какав начин да утиче на развој овог пројекта. Опет, лепо од њих што су нам омогућили да завиримо у кôд и наставимо тамо где су они стали.

Алтернативе

Android није једини оперативни систем за преносиве уређаје и мобилне телефоне који је заснован на Linux-у. У протеклих десет година имали смо прилику да видимо пројекте који су се неславно завршили, а у нешто скоријој историји имамо и нове пројекте. У првој категорији су нажалост OpenMoko, MeeGo, Maemo и други. Лепа вест је да су Meego и Maemo наставили да живе у пројекту који се зове Sailfish који развија финска компанија за телефон Jolla. Друге две популарније алтернативе су FirefoxOS и Ubuntu за телефоне.

За крај

Ово је био један кратак преглед Android-а и ретка прилика да прочитате о детаљима система који највероватније имате на свом телефону. Сјајна књига на ову тему је Embedded Android, а увек можете да питате и редакцију часописа за више детаља или помоћ. На вама је сада остало да извагате да ли је Android Linux, или баш и није.