Firmware i secure boot, FUD ili pretnja? (1. deo)
Autor: Ivan Bulatović
Nekada davno, u veoma, veoma udaljenoj galaksiji, kada je „dial-up” konekcija preko bakarne parice bez PCM-a bila privilegija, Linux korisnici su mnogo više cenili hardver koji je bio isporučivan u FoC (engl. Firmware on Chip) varijanti. Možda se prisećate tzv. „Win modema”, koji su se od hardverskih razlikovali po tome što je DSP (Digital Signal Processor) bio implementiran softverski. To je rezultiralo trošenjem CPU ciklusa i usporavanjem računara kada ste bili na mreži, ali je pogodovalo kompanijama poput US Robotics, Motorola, Lucent i ostalima, jer je PCB (Printed Circuit Board) bio do tri puta manji nego kod hardverskih modema, a gomila čipova i pratećih komponenti je moglo biti uklonjeno, čime je njihova proizvodnja pojeftinila. Sa raslojavanjem se ovde nije stalo, pa je postalo teško razlikovati hardverske i „Win modeme” samo po veličini. Primera radi, Conexant HSF je čist softverski modem dok je Conexant HCF manje procesiranja radio softverski. Prvi nije radio na Linux-u, dok je drugi mogao biti nateran na to kompajliranjem OEM driver-a i „skrnavljenjem” kernel-a. TV kartice imaju sličnu istoriju; „glomazne” kartice, većina sa BT878 čipom, su bile kompatibilne sa Linux-om, dok su kartice, koje su po specifikaciji tražile poslednji vrisak moderne PC tehnologije i bile malo veće od vozačke dozvole, imale nulte šanse da prorade pod, omiljenim nam,Linux distribucijama.
Dakle, hardver i firmware na njemu (dok god je programibilan) je naš prijatelj? Danas, ova konstatacija ne može biti dalja od istine.
Linux korisnici su se izborili za pravo da kupe hardver bez preinstaliranog „mainstream desktop” operativnog sistema, ali pobeda je donekle Pirova, jer u procesu proizvodnje tog istog hardvera, instalacija i korišćenje drugih operativnih sistema može predstavljati bolno iskustvo.
Sve se svodi na minimizaciju troškova u proizvodnji, diferencijaciji i ograničavanju funkcija hardvera koje bi on inače mogao da obavlja, a koje je proizvođač sa namerom onemogućio kroz firmware, da bi kupce naterao da pazare skuplji proizvod sa mogućnostima koje im možda nikada neće zatrebati. Primer za ovo je Intel, koji je H67 chipset „osakatio” tako da je VT-d podrška izostala iako se kroz BIOS mogla omogućiti. Ako ste planirali da svoj desktop računar koristite za virtuelizaciju, kupili Intel-ov procesor koji podržava VT-d instrukcije, kupili matičnu ploču sa chipset-om koji po specifikacijama podržava VT-d, čekalo vas je neprijatno iznenađenje u vidu OEM proizvođača koji su po smernicama iz Intel-a onemogućili VT-d u BIOS-u, a što u trenutku izlaska matične ploče na tržište nije bilo jasno naznačeno. Sa druge strane, proizvođači GPU čipova koriste firmware da neispravne komponente čipa isključe, a da proizvod ostane potpuno funkcionalan sa umanjenim performansama, što je apsolutno korisno za kupce koji grafičke kartice mogu kupiti po jeftinijoj ceni, a sa svim mogućnostima koje skuplje i brže kartice imaju; mada su ti isti proizvođači pribegavali istoj taktici kao i Intel, pa su korisnici hakovanjem firmware-a sa jeftinijim karticama dostizali performanse bržih (AMD HD6950 → HD6970). Dakle, firmware može biti koristan i kupcima i proizvođačima, ali se može i zloupotrebiti, tako da, inače ispravan hardver ograniče zarad manipulacije tržištem – dok god su sva ograničenja jasno naznačena na proizvodu, a često nisu, to i ne predstavlja neki problem za kupca.
Najpoznatija implementacija firmware-a se ogleda kroz BIOS/UEFI. To je interfejs kojim možete upravljati osnovnim postavkama računara i njegovih komponenti. Radi unifikacije, osmišljeno je nekoliko standarda i specifikacija od kojih je najbitnija ACPI. ACPI je otvorena specifikacija koja je, makar na papiru, platformski agnostična i koja kontrolu nad konfiguracijom i stanjem hardverskih komponenti prebacuje na operativni sistem koji podržava ACPI. To konkretno znači da korisnik, ili operativni sistem, može da reguliše podrazumevanu brzinu ventilatora ili takt procesora itd. Zvuči dobro, u mogućnosti smo da u određenoj meri kontrolišemo rad hardvera koji smo platili.
ACPI definiše određen broj tabela koje služe kao interfejs između operativnog sistema i samog firmware-a. OEM proizvođači definišu ove tabele sa AML izvornim kôdom, koji se zatim pomoću Microsoft ili Intel compiler-a pretvara u binarni oblik koji je dostupan, tj. vidljiv u kernel prostoru. Kako se generacije matičnih ploča zajedno sa ostatkom komponenti koji čine modernu PC platformu smenjuju svake godine, vrlo je kratak vremenski period koji se može posvetiti podršci proizvodu koji je aktuelan na tržištu. Primera radi, ažuriranja BIOS-a se po pravilu „izbacuju” tokom prve dve godine od kako se proizvod našao na tržištu, a zatim se svaki vid firmware podrške za takve proizvode ukida. Svaka generacija novih matičnih ploča je dostupna u vidu 15 različitih modela istog OEM-a, od kojih je za svaki neophodno održavati BIOS, za štȁ je potreban dovoljan broj programera, što sve, naravno, košta. Zato se vreme, za koje traje ovaj vid podrške, neprestano smanjuje, pa se događa da sa računarom koji je vremešan svega godinu dana i pored očiglednih problema nemate drugu opciju osim, da sa problemima naučite da funkcionišete ili da probate da hakujete sam BIOS. Možete kupiti i nov model što je i cilj proizvođača. Pomenete li Linux proizvođaču, velika je verovatnoća da će vam reći da ne odgovaraju za funkcionalnost uređaja na tom operativnom sistemu.
Postupak hakovanja BIOS-a se ogleda u kopiranju binarnih ACPI tabela iz zaštićenog memorijskog prostora, njihovim pretvaranjem u izvorni AML kôd, prilagođavanjem tog kôda, njegovim kompajliranjem a zatim učitavanjem pomoću definisanih kernel parametara. U većini slučajeva, AML je kompajliran sa Microsoft kompajlerom od strane OEM proizvođača, pa u slučaju da čak i ne modifikujete AML već samo pokušate da ga kompajlirate sa Intel kompajlerom, u velikom broju slučajeva Intel kompajler će izvršiti brojne optimizacije, prijaviti upozorenja pa čak i greške, što dovodi do zaključka da se ACPI specifikacija i ne primenjuje dosledno, već se BIOS programeri odlučuju za trikove koji su dovoljni da hardver radi ispravno na „mainstream” operativnom sistemu, čime se efektivno poništava platformski agnostična aspiracija ACPI specifikacije.
Ako zaboravimo BIOS na momenat, firmware može da sadrži patentom zaštićenu intelektualnu svojinu koja umnogome može da oteža razvoj otvorenih driver-a za hardver koji ga implementira. Veliki broj Linux korisnika koji su bili, ili i dalje su, ponosni vlasnici netbook prenosnih računara sa Atom procesorima i GMA500 (Poulsbo) IGP-om, znaju šta znači muka, gde se stabilnost i performanse pod Linux-om mogu opisati u rasponu od patetičnog do jadnog.
Nekoliko saveta kojih bi trebali da se pridržavate prilikom kupovine novog hardvera:
* Nemojte biti „early adopter”; sačekajte par meseci pre kupovine najnovijih komponenti koje su tek izašle na tržište. Posebnu pažnju obratite na matičnu ploču.
* Pretražite kakva su iskustva Linux korisnika sa željenim hardverom. Kernel bugzilla je odlično mesto gde možete da počnete; na raspolaganju su vam i internet forumi.
* Dobro se informišite o specifikacijama uređaja, vitalnim komponentama na kojima je baziran, proverite da li se driver za taj uređaj aktivno razvija unutar kernel stabla da biste izbegli zavisnost od OEM-a i njegove podrške za Linux.
* Pročitajte korisničko uputstvo svakog uređaja kojeg nameravate da kupite, pre nego što za njega date novac.
* Poželjno je da je na ambalaži opreme koju kupujete naznačena podrška za Linux.
Postoje nekoliko projekata koji za cilj imaju firmware otvorenog kôda ili makar olakšavaju dizajniranje istog, kao što su: Coreboot, Intel FSP, OpenBoot i OpenWRT. Međutim, istina je da nijedan nije dobio podršku od strane većine OEM proizvođača, te se ovakvi projekti retko gde mogu videti primenjeni u praksi.
U sledećem broju LiBRE! časopisa opisaćemo UEFI i Secure boot i njihov uticaj na korisnike Linux baziranih operativnih sistema.