Hlavní navigace

Příchod hackerů: Sněhurka a osmý bit

Lukáš Erben

Jeden byte má osm bitů. Poučka, kterou se dnes jistě děti dozvídají již na základní škole. Nebylo tomu ale tak vždy. První počítače pracovaly s nejrůznějšími délkami slova a pěti či šestibitovým kódováním znaků.

Standardy jsou skvělá věc, někdy vás ale přeci jen až příliš omezují. Když se na přelomu 40. a 50. let objevily první počítače, existovaly standardy binárního kódování vyvinuté pro telegrafní komunikaci. Ten vůbec první navrhl Francouz Emile Baudot již v roce 1870 a o čtyři roky později si jej nechal patentovat (nejednalo se sice o první pětibitové kódování – s tím přišel v podobě vlastní šifry Francis Bacon o tři století dříve, byl to ale první strojový binární pětibitový kód).

Baudotovo kódování nabízelo 2 sady (písmena a číslice) po 32 znacích. To v původní i řadě pozdějších variant znamenalo možnost kódovat základní písmena latinské abecedy (bez rozlišení na malá a velká, deset číslic a pár dalších základních interpunkčních a jiných znaků. Systém nejprve vylepšil Donald Murray v roce 1901, když přidal například kontrolní a řídící znaky. Další drobné změny přineslo kódování Western Union, z nějž byl v roce 1930 vytvořen první skutečný standard v podobě ITA2 – International Telegraph Alphabet No. 2.

Děrná páska s „Baudotovým“ pětibitovým kódováním.

Od Baudota k ASCII

Když se ve druhé polovině 40. a počátkem 50. let objevily první počítače, byl „Baudot“ (v podobě ITA2) jediným zavedeným standardem, a tak není divu, že po něm řada konstruktérů sáhla. Pětibitový kód je ale poměrně omezující množstvím znaků, které v něm lze vyjádřit. Navíc v situaci, kdy nejcennější „komoditou“ prvních počítačů byla paměť, nebyl ideální volbou. Některé z raných systémů v USA proto používaly čtyřbitové (BCD) kódování čísel v desítkové soustavě a šestibitové kódování „grafických“ znaků (abecedy a speciálních znaků) podle standardu, který zavedla armáda (Fieldata). Ani v tomto „duálním“ kódování ale obvykle nebyl prostor pro rozlišení malých a velkých písmen – to přinesl až první „velký“ standard v roce 1963 v podobě (dodnes používaného) sedmibitového ASCII.

ASCII bylo navrženo jako standard pro přenos (zejména dálnopisný) – původně se zvažovalo využít šestibitové kódování s „posunem“ podobně jako u Baudotova kódování (tím se efektivně zdvojnásobí počet kódovaných znaků). Další variantou byl osmibitový kód, ten by měl výhodu v možnosti přenést dvě čtyřbitově kódované číslice nebo jeden osmibitový znak, nicméně byl nakonec zamítnut ze dvou důvodů – za prvé i úspora jediného bitu dávala na přelomu 50. a 60. let smysl, za druhé osmibitový zápis (podporovaný například na děrných páskách) bylo možné využít pro paritní (kontrolní) bit. Bylo tedy zvoleno sedm bitů – dostatek pro základní písmena velké a malé latinky, číslice, speciální a také velký počet řídících znaků. Dost pro angličtinu, málo pro ostatní jazyky. Osmibitové kódování ale bylo takřka za rohem a s ním i možnost doplnit základní sadu ASCII o další znaky – a přinesl jej právě System/360. Nepředbíhejme ale.

ASCII tabulka z manuálu k tiskárně (1972)

Byte, aby se to nepletlo

S označením byte přišel Werner Buchholz, když v roce 1956 pracoval na rané fázi návrhu „superpočítače“ IBM Stretch. Počítač totiž umožňoval adresovat paměť po bitech a zároveň variabilní délku pole instrukce i vlastního znaku – jeho délka byla kódována přímo v instrukci (smyslem bylo využít co nejefektivněji paměť i výpočetní výkon, bylo ale potřeba jasně odlišit, kdy je řeč o bitu a kdy o znaku či číslici – tedy několika bitech. V IBM používali termín bite (kousek), což se ale s bit snadno pletlo, a tak Buchholz navrhl záměrně slovo bite zkomolit na byte. Jenže stále tu byly čtyř a šestibitové bajty, z nichž vycházela z dnešního pohledu podivná šířka slova, s níž počítače v padesátých letech pracovaly (jednalo se typicky o násobky šesti – 12, 18, 36 bitů). Počítače s větší šířkou slova mohly pochopitelně zpracovávat přesnější výpočty (a byly tak často určeny spíše pro vědecké účely).

A osmým bitem se odlišit

Příběh toho, jak se vlastně stalo, že IBM System/360 přišel jako první s osmibitovým kódováním, vyprávěl po letech Gene Amdahl v rozhovoru pro Institut Charlese Babbage. Na počátku vývoje System/360 vypracoval výbor expertů v IBM tajnou zprávu Spread Report (dnes je pochopitelně dostupná online), která shrnovala požadavky a cíle, kterých by s novou platformou mělo být dosaženo. Zvláštní ale bylo, že řada lidí z konstrukčního týmu, včetně šéfkonstruktéra Amdahla Spread Report nečetla, protože byl podle všeho udržován v přísném utajení i před vlastními zaměstnanci. Amdahl a jeho kolegové tak znali jen závěry a požadavky, které ze zprávy vycházely. To vedlo ke sporům o to, jakou architekturu by vlastně nová platforma měla mít.

Chtěl jsem jít cestou 24/48 bitových slov, což by nám umožnilo pracovat buď se šesti nebo s osmi bity. Ale to bylo samozřejmě verboten (sic). Když jsem ten návrh přednesl, tak Fred [Brooks] prohlásil, že to nepřichází v úvahu. Bránil jsem se a prohlásil: „Nemyslím si, že v opačném případě můžeme efektivně pracovat s plovoucí desetinnou čárkou.“ Na to odvětil „Musíme si promluvit s nejvyšším vedením, já tohle nemohu rozhodnout.“ A tak jsme se ocitli v kanceláři Boba Evase – jen my tři. Bob sepsal na tabuli pozitiva a negativa a v případě 8bitového bajtu dal váhu 60 % – jednoduše proto, že se tím odlišíme od ostatních dodavatelů.“

Gene Amdahl v rozhovoru pro Institut Charlese Babbage.

Podle Amdahla bylo rozhodnutí výboru Spread použít osmibitové bajty paradoxně chybou. Kdyby System/360 pracoval s tradiční architekturou 6/24/48 bitů (namísto 8/16/32), mohl být podle něj lepším vědeckým systémem – nabízejícím vyšší výkon pro přesné výpočty. Jenže IBM nechtělo stavět vědecké počítače. Chtělo stavět počítače pro podniky, pro průmysl a chtělo se odlišit. Osmibitové kódování navíc mělo i některé další výhody, související s dálkovým přenosem dat – na počátku šedesátých let jej začalo poprvé používat AT&T pro úvodní fázi digitalizace páteřních telefonních sítí.

IBM nicméně pro svůj osmibitový znakový kód vytvořilo poněkud nepraktický a časem až neuvěřitelně roztříštěný standard EBCDIC (Extented Binary Coded Decimal Interchange Code), který sice navazoval na šestibitové kódování BCD a kód děrných štítků, ale to jej zároveň předurčovalo k tomu, aby nepřekročil hranice své domovské platformy. Z dnešního pohledu se může zdát nepochopitelné, že IBM, přestože bylo členem výboru ustanovujícího ASCII, použilo v případě System/360 vlastní poněkud obskurní kódování. Důvody to ale byly čistě praktické – ASCII nebylo v té době podporováno na stávajících periferiích a vyvinout periferie nové by bylo příliš časově a finančně náročné. EBCDIC byl oproti tomu zpětně kompatibilní.

Příklad kódovací tabulky EBCDIC

Osmibitové kódování a bajt se nicméně uchytily – a masově rozšířily zejména díky nástupu osmi a později šestnácti a dvaatřicetibitových procesorů pro osobní/domácí/mikro počítače v sedmdesátých, osmdesátých a devadesátých letech. Základem kódování znaků se nicméně stala sada ASCII, případně její rozšířené varianty a v posledních letech zejména Unicode. Přesto, kdyby Gene Amdahl prosadil počátkem 60. let „svou“, možná bychom dnes pojmu „osmibit“ vůbec nerozuměli.

Vývoj rozšíření ASCII vs. UTF-8 (Unicode) na webu v čase.

Odkazy

Našli jste v článku chybu?