Produkty Novinky Články Návody Kontakty

Linux versus Windows

obrázek win-vs-linux
Nadpis by mohl být předzvěstí velké a nekonečné diskuze na téma, který operační systém je lepší, ale nebojte se. Nic takového nemáme v úmyslu. My si jen pěkne v klidu rozebereme výhody a nevýhody, které prostředí obou systémů přínáší, když v něm chceme vyvíjet aplikace pro embedded zařízení, v kterých běží Linux. Shrneme si, co nám který systém jako ”embedďádkům” nabízí a co naopak postrádá. Závěr našeho ”průzkum trhu” bude možná překvapivý, ale určitě velmi dobře aplikovatelný pro většinu z vás.

Linux jede!

Celý náš text je zaměřen na vývoj aplikací pro embedded zařízení s operačním systémem Linux. Stejný systém ovšem s úspěchem běží jak v pracovních stanicích, tak i na serverech. Je tedy otázkou jaké výhody nám přinese, když v našem pracovním počítači stejně jako v embedded zařízení poběží Linux. Pojďme si jednotlivé výhody ve zkratce rozebrat.
Prvním a hlavní výhodu jsme už vlastně zmínili - operační systém na pracovním počítači a v cílovém zařízení je stejný - v obou běží Linux. Ano, určité rozdíly zde přece jenom jsou:
  • Distribuce Linuxu v cílovém zařízení samozřejmě neobsahuje vývojové nástroje.
  • Je zde minimalizovaná sada systémových knihoven.
  • Jádro systému je obvykle upravené na míru embedded zařízení.
  • V shellu embedded zařízení nejsou dostupné všechny příkazy a/nebo mají omezenou funkcionalitu.
Důležité ale je, že co se týče filozofie používání a vývoje aplikací, jde stále o jeden a ten samý operační systém. Proto pokud už programátor zvládnul alespoň základní znalosti o vývoji aplikací pro operační systém Linux, tak pro něj nebude nijak obtížné zvládnout v podstatě totéž i pro embedded zařízení, kde běží také Linux. Byť je třeba získat určité znalosti o hardware daného zařízení a mít na paměti specifika linuxové distribuce embedded zařízení.
Druhou výhodou je snadná dostupnost vývojových nástrojů. Ve standardní linuxové distribuci, např. Debianu, jsou k dispozici balíčky s vývojovými nástroji pro různé platformy. Navíc někteří výrobci zvučných jmen poskytují své vývojové nástroje pro různá embedded zařízení v neplacené verzi i pro Linux.
Třetí výhodou, která souvisí s první, je fakt, že aplikace je vyvíjena na počítači s Linuxem pro zařízení, kde běží taktéž Linux. Díky tomu je možné značnou část funkcionality vyvíjené aplikace odladit přímo na pracovním počítači a to i bez fyzické dostupnosti cílového embedded zařízení, protože prostředí, v kterém aplikace nakonec poběží, se od prostředí pracovního počítače s Linuxem liší jen v detailech. Programátor tedy vyvíjenou aplikaci může zpočátku zkompilovat pro svůj počítač a ladit ji přímo na svém počítači. Teprve když už nelze zbývající funcionalitu ladit bez cílového zařízení, zkompiluje aplikaci pro embedded zařízení a pak může pokračovat v ladění aplikace přímo v zařízení. Tato výhoda se projevuje zejména u rozsáhlejších aplikací, kdy je například nutné otestovat přístup k databázi apod.

Zlaté Windows!

Už slyším výkřiky vývojářů, kteří na svém počítači k plné spokojenosti používají operační systém Windows a kteří o nějakém Linuxu nechtějí ani slyšet. Ukažme si, ale jaké obtíže nás čekají, když chceme na Windows vyvíjet pro Linux.
Vývoj aplikací pro embedded zařízení, v kterých běží Linux, vyžaduje, aby v počítači programátora bylo k dispozici kompletní vývojářské prostředí. To znamená, že zde v prvé řadě musí být nainstalovány typické nástroje programátora (kompilátor, linker, make, debugger atd.), které sice poběží na Windows, ale které dokáží sestavit spustitelný soubor vhodný pro cílové embedded zařízení a pak s ním dále pracovat (ladit, zkoumat jej apod.). Kromě toho zde musí být sada standardních systémových knihoven (libc a další) a jejich hlavičkových souborů, které na cílovém zařízení budou vytvářet vhodné běhové prostředí pro naši aplikaci. A často jsou potřeba i hlavičkové soubory jádra. To tehdy, když naše aplikace volá přímo systémové služby jádra.
Což o to, samotné vývojářské nástroje lze dnes už bez větších potížích získat, ale co s těmi knihovnami a hlavičkovými soubory jádra? Nehledě na to, že program make umí sestavit naši aplikaci jen, když je k dispozici klasický linuxový shell (Bash apod.). Tato potřeba linuxového prostředí se obchází různě.
Častým řešením je použití Cygwinu, což je emulátor Linuxového API (rozhraní operačního systému) se sadou běžných linuxových příkazů. Cygwin umožňuje celou řadu úkonů vykonávat způsobem běžným v Linuxu, ale přitom v prostředí MS Windows. Nevýhoda je, že pomocí Cygwinu nelze spustit aplikace, které byly zkompilovány pro běh ve skutečném Linuxu. Naopak je nutné, aby tyto aplikace byly zkompilovány přímo pro prostředí Cygwinu. Což v případě vývoje aplikací pro Linux pod Windows prakticky znamená, že veškeré vývojové nástroje a utility musí už být připravené pro běh v Cygwinu nebo musíme mít k dispozici jejich zdrojové kódy, abychom si je mohli zkompilovat znovu s potřebným nastavením.
Dalším možným řešením je instalace nějakého placeného integrovaného vývojového prostředí (např. SourceryG++, které je v edici Lite dokonce dostupné zdarma). Tato vývojová prostředí řeší chybějící linuxové prostředí každý po svém. Nicméně například konfigurace a sestavení linuxového jádra bývá s využitím těchto vývojových prostředí velmi obtížná až nemožná.
Posledním řešením je využití virtuálního počítače. Tedy speciálního programu, který umí více či méně dokonale emulovat hardware běžného PC včetně síťové karty, DVD mechaniky, pevného disku apod. Takové virtuální PC se pro operační systém ve vašem počítači chová jako jakákoliv jiná aplikace. Ale protože je to skutečně počítač, byť virtuální, lze do něj nainstalovat jakýkoliv běžný operační systém. Například Linux. Díky tomu máte vlastně počítače dva. V klidu si pracujete ve svých Windows a zatímco odepisujete své drahé polovičce na email, v dalším okně vám běží plnohodnotný Linux, kde zrovna kompilujete nové jádro pro své embedded zařízení. Roztomilé, že? Jak to vypadá v praxi můžete vidět na obrázku 1.2.
obrázek debian-ve-win7
Obrázek 1.2 Debian virtuálně ve Windows 7
Některé klíčové výhody řešení s virtuálním počítačem:
  • Uživatel má k dispozici veškerý komfort, na který je v prostředí Windows zvyklý.
  • Nemusí měnit svoje pracovní návyky, ale přitom má v okně virtuálního počítače kompletní linuxové prostředí.
  • Mezi skutečným a virtuálním počítačem lze sdílet adresáře - snadná výměna dat.
  • Snadná přenostitelnost virtuálního počítače. Virtuální počítač lze snadno přenést a zprovoznit na jiném pracovním počítači (např. kolegy).
  • Snadné zálohování celého vývojového prostředí - prostě se zazálohuje celý virtuální počítač.
Samozřejmě nic není zadarmo. Virtuální počítač je zas jen aplikace, která si žádá svoji porci systémových prostředků - čas procesoru, operační paměť a místo na pevném disku. Ovšem v dnešní době vícejádrových procesorů a levných pamětí v řádech Gigabytů jsou nároky virtuálního počítače snadno uspokojitelné. Pro představu moje virtuální vývojářské PC s linuxovou distribucí Debian 6.0 Squeeze si při nečinosti řekne o pár procent výkonu mého procesoru, 768MB paměti RAM a cca 10GB místa na disku.
Řešení s virtuálním počítačem autor považoval za natolik elegantní, že celý další text předpokládá jeho použití. Ale jelikož vlastně všechny rady a návody byly vytvářené v prostředí běžné linuxové distribuce, není problém je využít i na Linuxu běžícím na skutečném počítači.
Pro ty, kteří s virtuálními počítači nemají moc zkušeností, jsme připravili stručný návod jak si zprovoznit virtuální počítač a jak do něj nainstalovat Linux. Čtěte dále!