Skrytá úskalí binární kompatibility

DEFINICE Binární kompatibilita dvou počítačů znamená jejich schopnost provozovat stejný software, aniž by bylo třeb...


DEFINICE
Binární kompatibilita dvou počítačů znamená jejich schopnost provozovat stejný
software, aniž by bylo třeba jej přepisovat nebo znovu překládat pro každý z
nich.
Otázky binární kompatibility existují ve světě číslicových počítačů takřka od
počátku jejich existence. Na významu pak výrazně nabyly v okamžiku, kdy se
počítače začaly vyrábět ve větším množství.
Dva počítače jsou považovány za binárně kompatibilní tehdy, jestliže na nich
lze spouštět stejný software bez nutnosti jeho úprav nebo rekompilace
(opakovaného přeložení ze zdrojového do binárního kódu). Předpokladem binární
kompatibility je kompatibilita procesorů, které musejí být schopny provádět
stejné strojové instrukce, a kompatibilita softwarové vrstvy, která zajišťuje
komunikaci aplikací s ostatním hardwarem počítače. Vlastní hardware však může
být do velké míry odlišný.
Binárně kompatibilní počítače mohou být různými produkty stejného výrobce, ale
třeba i soupeřícími produkty různých výrobců. Například notebook IBM ThinkPad a
desktopový počítač Hewlett-Packard Vectra jsou binárně kompatibilní, a to
přesto, že používají zcela rozdílné komponenty značky procesorů, motherboardy,
paměťové čipy, grafický hardware, disky i podpůrné obvody.
Opačným příkladem mohou být třeba iMac od Apple Computer a NetVista od IBM.
Počítač iMac nemůže v nativním režimu provozovat aplikace napsané pro Windows a
NetVista zase nemůže provozovat aplikace pro Macintosh. Pravdou ovšem je, že na
počítači iMac lze spustit emulační software, který zde umožňuje spouštět
aplikace pro Windows, jako například Microsoft Word. To ale neznamená binární
kompatibilitu. Emulační program totiž provádí překlad softwaru tak, aby mohl
být provozován na zcela odlišném (a binárně nekompatibilním) hardwaru. K tomu
samozřejmě potřebuje určitý čas, což snižuje výkon celého řešení.
Díky standardu IBM PC je dnes naprostá většina osobních počítačů vzájemně
kompatibilní. Tak tomu ale nebylo vždy. Například ve zlatém věku osmibitových
počítačů, tedy na počátku 80. let minulého století, spolu soupeřilo množství
vzájemně naprosto nekompatibilních platforem a to i od jednoho výrobce. Za
všechny jmenujme ZX 81 a ZX Spectrum od společnosti Sinclair Research, 800 XL
firmy Atari nebo C64 společnosti Commodore. Každý z těchto počítačů byl schopen
provozovat pouze software, který byl napsán přímo pro něj.

Thunking to řeší
Možná nejvýraznějším příkladem vývoje binární kompatibility (a nekompatibility)
mohou být operační systémy DOS a Windows od Microsoftu, jejich aplikace, např.
balík MS Office, a procesory společnosti Intel. V době, kdy Intel změnil
základní architekturu svých procesorů z 8bitové na 16bitovou, prošel stejnou
proměnou i MS-DOS od Microsoftu a to s minimálními následky na kompatibilitu
aplikací. Následně přišel posun směrem ke 32bitovým procesorům, u kterých už
bylo zachování kompatibility obtížnější. Hlavní problém, který bylo třeba
řešit, spočíval v otázce, zda raději využít všech možností nových procesorů a
oželet kompatibilitu, nebo k celému problému přistoupit opačně.
Microsoft přišel se šalamounským řešením. V rámci evolučního vývoje nabídl
zákazníkům MS-DOS a grafickou nadstavbu Windows, přičemž podporoval jak
16bitové, tak i 32bitové počítače. Na 16bitových počítačích s procesorem Intel
286 běžely Windows v jiném režimu než na novějších 32bitových procesorech 386,
pro většinu zákazníků však rozdíl nebyl důležitý. Na obou platformách běžely
stejné aplikace.
Relativně nedávno se objevily 64bitové procesory Itanium od Intelu, kde už je
rekompilace aplikací nezbytností. Výrobci sice tvrdí, že jde především o otázky
efektivnosti jejich provádění, celou pravdou ovšem je, že na nových procesorech
lze 32bitové aplikace provozovat pouze s emulátory a platit za to ztrátou
výkonu.
S tím, jak se měnily platformy procesorů, ztrácela se i kompatibilita některých
aplikací. Přes veškerou snahu o zachování zpětné kompatibility (tedy schopnosti
provozování všech starších aplikací na novějším hardwaru, nikoli naopak) nebylo
možné dostát vždy všem požadavkům. Například aplikace, které nebyly
synchronizovány jinak než prostřednictvím výkonu procesoru, byly na nových
procesorech tak rychlé, že se staly nepoužitelnými.
Samostatnou otázkou pak je nutnost volání některých funkcí operačního systému,
které byly dostupné v 16bitovém prostředí a v 32bitovém nikoli. Microsoft zde
přišel s postupem nazvaným thunking, který zajišťuje možnost volání kódu napříč
platformami a tedy buď volání 16bitového kódu z 32bitové platformy, nebo naopak
volání 32bitového kódu ze 16bitové platformy. Díky thunkingu nemusely být
aplikace rekompilovány při přechodu z 16 na 32 bitů, je však třeba počítat s
určitou režií potřebnou pro tento proces.

Příchuť Unixu
Otázky binární kompatibility mají velký význam také ve světech Unixu a Javy.
Unix byl ostatně původně vyvinut proto, aby usnadňoval portaci aplikací z
jednoho typu počítače na jiný. Jakmile se však dostal do světa velkého byznysu,
téměř okamžitě to znamenalo jeho rozdělení do řady odlišných soupeřících
produktů (za všechny jmenujme např. Solaris, Irix, HP-UX, AIX, SCO Unix nebo
BSD Unix). Tyto produkty jsou natolik odlišné, že to způsobuje nemalé bolení
hlavy vývojářům i IT oddělením firem.
Společnost Sun Microsystems, po řadu let největší hráč na unixovém hřišti, se
mnohokrát chlubila binární kompatibilitou. CEO společnosti Scott McNealy často
uvádí, že software napsaný před 20 lety pro počítače na platformě Solaris/SPARC
poběží bez potřeby rekompilace i na současných systémech založených na
procesorech SPARC.
V polovině 90. let si představitelé společnosti Sun začali uvědomovat, že
jejími největšími konkurenty nejsou ostatní Unixy, ale Microsoft Windows a
zvláště Windows NT nyní nazývané .Net Server. A tak firma Sun představila
platformově nezávislý jazyk, který umožňuje, aby programy v něm napsané běžely
na libovolných počítačových architekturách beze změny kódu. Na svět přišla
Java. Zdrojový text programu v Javě je překládán do určitého mezistupně mezi
zdrojovým textem a binárním kódem. Tento mezistupeň je označován jako bytecode.
Pro každý stroj, na kterém mají být provozovány aplikace v Javě, je pak třeba
vytvořit překladač nazývaný Java Virtual Machine (JVM). Jak se tento přístup
liší od emulace? Rozdíl je malý, ale důležitý: Protože jsou programy pro jednu
platformu (např. pro Windows) navrženy tak, aby běžely nativně na určité
architektuře s danou instrukční sadou, jsou pro ni také optimalizovány (a tím
jsou de facto do jisté míry hendikepovány na ostatních platformách). Java ale
nikdy nebyla svázána s jednou platformou a architekturou, a proto se nemusí
nijak vypořádávat s jejími úskalími.
A ještě jedna poznámka: Binární kompatibilita také znamená interoperabilitu se
všemi původními chybami a zákoutími původního hardwaru i operačních systémů. Na
systému, který je binárně kompatibilní se svými předchůdci, by měly fungovat
všechny zkratkové klávesy a všechna udělátka, která lidé po léta tvořili, aby
se s těmito chybami vypořádali.









Komentáře
K tomuto článku není připojena žádná diskuze, nebo byla zakázána.