Zajímá vás, kudy vedla cesta k operačnímu systému Unix a posléze i programovacímu jazyku C, bez nichž by se svět počítačů vyvíjel úplně jinak? Pak je dnešní historické okénko určeno právě pro vás!
Základním programovým vybavením každého moderního počítače je operační systém, který obstarává komunikaci mezi uživatelem a hardwarovým rozhraním zařízení. Jak jsme v našem seriálu předznamenali, v raných dobách prvních počítačů operační systémy jako takové neexistovaly a programátor musel komunikovat s přístrojem jeho řečí, tedy pomocí strojových kódů. Aby mohl vůbec program vytvořit, musel nadto znát konfiguraci počítače a přesné rozložení jednotlivých zařízení. Když se postupem času s rozvojem výpočetní techniky stal tento postup neúnosným, začaly vznikat první programovací jazyky. Místo posloupnosti jedniček a nul se tak do počítače údaje zadávaly pomocí osmičkové nebo šestnáctkové soustavy a později i pomocí písmen a slov.
Snaha po komfortnějším a efektivnějším ovládání počítačů, při níž se muselo vyřešit množství problémů, vedla k vývoji operačních systémů, které začaly vznikat počátkem šedesátých let, a díky jak větší disponibilitě paměťových zdrojů, tak i rozvoji vyšších programovacích jazyků. Vývoj prvních operačních systémů je spjat s velkými výrobci sálových počítačů, zejména se společnostmi IBM a General Electric. Velký průlom v této oblasti představoval OS/360 firmy IBM, který bylo možné používat na všech modelech revoluční řady počítačů Systém/360.
S příchodem minipočítačů PDP firmy Digital Equipment Corporation (DEC) však vyvstala potřeba ještě výkonnějších a komfortnějších systémů. A tak přelom šedesátých a sedmdesátých let přinesl další mezník – v té době začal vznikat operační systém Unix, který se stal prvním moderním operačním systémem, a to nejen díky své přenositelnosti, ale i řadě dalších vlastností, které dnes považujeme za samozřejmost. Během následujících desetiletí vytvořil Unix mezi operačními systémy jakýsi „standard“, základ pro množství stále zdokonalovanějších systémů, které hrály obrovskou roli ve vývoji moderního softwaru. O to pozoruhodnější je skutečnost, že zrod tohoto operačního systému nevzešel z rozhodnutí vedení silné korporace, nýbrž ze soukromé aktivity dvou programátorů, kteří se setkali v Bellových laboratořích.
Cesty k programování
Dennis Ritchie, starší z dvojice programátorů, se narodil v roce 1941 v Bronxville ve státě New York. Stejně jako u řady jiných významných raných počítačových vědců se s vědou a technikou seznamoval už od útlého věku, a to díky svému otci, Alistairu Ritchieovi, jenž pracoval jako výzkumník v Bellových laboratořích (neboli Bell Labs) v Murray Hill, které provozovala společnost AT&T. V té době šlo o jedno z nejvýznamnějších komerčních výzkumných a vývojových center. Alistair Ritchie byl spoluautorem publikace věnující se teorii spínacích obvodů a později se stal ředitelem oddělení, jež se v Bell Labs spínacími obvody zabývalo.
Dennis, který kráčel ve šlépějích svého otce, vynikal na střední škole v matematice a technických předmětech. Díky tomu – a přirozeně i díky finanční podpoře svých rodičů – začal studovat fyziku na prestižní Harvardově univerzitě. Po získání bakalářského titulu jej však čím dál víc poutal svět počítačů, proto změnil obor a zaměřil se na studium aplikované matematiky. Později poznamenal, že ho k tomu vedl zájem o výpočetní možnosti strojů, jinými slovy o to, jak široké mohou být oblasti, v nichž mohou stroje nahradit lidskou mysl. Svou doktorskou práci věnoval problematice rekurzivních funkcí, tedy matematického postupu, který měl významný vliv na tvorbu nových programovacích jazyků v šedesátých letech. (Rekurzivní funkce, stručně řečeno, je metoda, kdy jedna a tatáž funkce volá před svým dokončením sama sebe s použitím nové sady parametrů.) Krátkou dobu působil Ritchie na Massachusettském technologickém institutu, než v roce 1967 nalezl zaměstnání v Bell Labs, kde právě hledali nové programátory.
Kenneth Thompson, s nímž začal Ritchie spolupracovat krátce po svém nástupu do Bell Labs, byl o dva roky mladší. Narodil se v roce 1943 v New Orleans. Jeho otec byl vojenským pilotem amerického námořnictva a rodina se často stěhovala po celých Spojených státech, od Seattlu po San Diego. Větší část dětství prožil v Kingsville ve státě Texas, kde rodina na delší čas zakotvila. Ken Thompson se ke studiu elektrotechnického inženýrství na univerzitě v Berkeley dostal díky svému zájmu o elektronické přístroje, který se v něm probudil již v chlapeckých letech. V Berkeley se pak seznámil s počítači a stejně jako Ritchie jej coby technika uchvátily jejich možnosti.
Na počátku byla… hra
V době, kdy Dennis Ritchie nastoupil do počítačového oddělení Bellových laboratoří, zde vrcholila práce na zcela novém operačním systému. Tento systém, navrhovaný pro výkonné střediskové počítače GE-635, byl nazván Multics (což je akronym původního názvu Multiplexed Information and Computing Service) a měl obsluhovat tisíce současně připojených uživatelů. Na ambiciózním projektu se kromě dvou obřích společností AT&T a General Electric podílel i Massachusettský technologický institut, kde pracovali vědci, kteří měli s vývojem provozní formy označované jako „time-sharing“ (sdílení času) cenné zkušenosti.
Během práce na Multicsu se tento systém změnil v grandiózní experiment, do něhož výzkumníci z Bell Labs a MIT implementovali řadu nových zajímavých funkcí. Ritchie na něm začal pracovat v poslední fázi vývoje a stal se členem skupiny programátorů, v níž vynikal právě Ken Thompson. Ten při práci na systému vytvořil na sálovém počítači GE-635 mimo jiné hru Space Travel, sloužící pro relaxaci a zábavu programátorů, ale také pro demonstraci některých možností nového systému.
Multics byl bezesporu na svou dobu zajímavým, nicméně značně složitým systémem, jehož optimalizace vyžadovala další a další finance. Problémem bylo, že neumožňoval některé z funkcí, pro které byl vyvíjen. Každá ze zainteresovaných stran navíc očekávala od konečné verze něco jiného. Z těchto důvodů vedení Bell Labs v roce 1969 usoudilo, že celý projekt zastaví.
Že se neúspěšný Multics později stal základem pro operační systém Unix, je známá věc lakonicky zmiňovaná v učebnicích informatiky. Cesta k tomuto systému však byla poněkud klikatější. Nezanedbatelnou roli při jeho vzniku sehrála právě ona počítačová hra, jež se stala prostředkem, díky němuž mohli programátoři plně rozvinout svou kreativitu.
Když byl vývoj Multicsu ukončen, Thompson přepsal hru v jazyce FORTRAN pro systém GECOS, který byl součástí počítače GE 632. Velký střediskový počítač však nebyl pro hru vhodný, a to nejen kvůli špatnému ovládání a nevhodnému displeji, ale zejména pro drahý strojový čas. Není se tedy co divit, že vedení počítačového oddělení nesouhlasilo s tím, aby se tento čas věnoval „neužitečné“ zábavě. Proto se Thompson a Ritchie nakonec rozhodli, že hru přepíšou tak, aby ji bylo možné spouštět i na jednodušším a méně výkonném minipočítači, PDP-7, přičemž chtěli zachovat vymoženost, aby s počítačem mohli pracovat i další uživatelé. To neznamenalo nic jiného než vytvořit operační systém podporující multiuživatelský režim. Jinými slovy, Thompson a Ritchie dospěli k názoru, že převezmou některé z novinek Multicsu a napíšou nový, mnohem jednodušší operační systém.
Unix a programovací jazyk C
Tento operační systém začal vznikat obdobným způsobem jako samotné přeportování hry Space Travel. Thompson vytvořil koncepci souborů (filesystem) a společně s Ritchiem pak naprogramovali jak základní utility pro kopírování, mazání a přemísťování editovaných souborů, tak i základní interpret příkazů. Dvojice programátorů sice vyvíjela systém pro počítač PDP-7, ale protože kapacita jeho operační paměti byla nedostačující (jednalo se o 18bitový počítač), vlastní vývoj jádra prováděli na již zmíněném 36bitovém GE-635 (na systému GECOS s využitím makroassembleru GEMAP). Po vytvoření objektového kódu assemblerem zapsali přeložené jádro i další pomocné programy na děrnou pásku. Tu pak vložili do čtecího zařízení na počítači PDP-7, odkud se systém „nabootoval“ příkazem zadaným z řídicího panelu. Tímto z dnešního pohledu komplikovaným a zdlouhavým způsobem vytvořili nejen samotné jádro systému, ale i jednoduchý textový editor, assembler, interpret příkazů a několik základních utilit. Převratnou myšlenkou, i když částečně převzatou z Multicsu, bylo, že jádro systému neobsahovalo interpret příkazů (neboli shell). Programy byly svěřeny uživatelskému režimu (tzv. user-space), přičemž s jádrem komunikovaly prostřednictvím systémových volání. Tím rovněž vzniklo stabilní rozhraní pro programování aplikací.
„Operační systém by měl být jednoduchý, elegantní a snadno použitelný,“ definoval Ken Thompson základní cíl snahy. Jak práce na novém systému pokračovala, rozšiřovaly se jeho možnosti, ovšem vždy v souladu s tímto cílem, který položil základy pozdější „unixové filosofii“. Co zpočátku vypadalo jako poněkud autistická zábava dvou programátorů, z toho se stal projekt, který na sebe poutal čím dál více pozornosti. Není jistě třeba dodávat, že už zdaleka nešlo o hru Space Travel. Ta svou roli sehrála coby spouštěcí mechanizmus k vývoji systému, jehož význam a vliv nebyli s to v té době docenit ani jeho tvůrci, natož manažeři Bell Labs. Thompson se sice pokusil krátce po zahájení práce na tvorbě souborového systému přesvědčit vedoucí pracovníky, aby projekt podpořili, ale se vstřícností se nesetkal. Ani to není překvapivé. Neúspěch Multicsu byl pro zodpovědné osoby dosud varovným znamením. Ale po krátkém čase, kdy programátoři mohli představit výhody operačního systému, se postoj vedení začal měnit. Na rozdíl od Multicsu, jehož specifikace popisoval více než tisícistránkový manuál, byl tento operační systém geniálně jednoduchý. A co víc, na minipočítači PDP-7 bezvadně fungoval, což se poprvé ukázalo při využití systému při přípravě podkladů po patentový úřad.
Brian Kernighan, jeden ze spolupracovníků dvojice programátorů, pro tento nový operační systém zvolil název Unics (Unary Information and Computing Service), jakožto protiklad k systému Multics. Z tohoto označení později vznikl název Unix. Ale nepředbíhejme. Jak už bylo poznamenáno, systém byl psán v assembleru. Thompson s Ritchiem si však záhy uvědomili, že pro využitelnost systému je nezbytný i programovací jazyk, v němž bude možné psát jak systémové programy, tak uživatelské aplikace. Thompson zprvu uvažoval o využití jazyka FORTRAN, ale to, jak se záhy přesvědčil, nebylo vzhledem k již zmíněné omezené operační paměti minipočítače uskutečnitelné.
Z tohoto důvodu se Thompson rozhodl, že vypracuje nový programovací jazyk. Vycházel při tom z již existujícího jazyka BCPL (Basic Combined Programming Language), který podstatně zjednodušil tím, že z něj odstranil některé nadbytečné vlastnosti. Dal mu název B – podle prvního písmena „otcovského“ jazyka. (Aby to nebylo příliš jednoduché, tento otcovský BCPL, vytvořený Martinem Richardsem v roce 1966, vznikl rovněž zjednodušením, a to jazyka CPL ze začátku šedesátých let.) Nakonec Thompson kvůli úspornosti změnil i syntax samotného jazyka, čímž došlo ke způsobu zápisu operátorů pomocí speciálních znaků, a nikoli klíčových slov, jak bylo dosud obvyklé. Soustavné zjednodušování mělo také svou negativní stránku. Vznikl tak jazyk značně limitovaný a vhodný pouze pro řešení určitých problémů, jehož zásadním nedostatkem navíc bylo, že se jednalo o jazyk interpretovaný, tedy i značně pomalý.
V jazyce B bylo pro nový operační systém napsáno několik základních nástrojů. Brzy se ovšem ukázalo, že možnosti „béčka“ jsou značně omezené. Nejenže podporoval pouze jeden datový typ – slovo (word), ale k jeho zvláštnostem patřil i fakt, že překladač jazyka B na PDP-7 překládal program nikoli přímo do strojového kódu, ale do bajtkódu, který musel být následně interpretován.
V roce 1971 se v Bell Labs začaly používat minipočítače PDP-11, které se brzy využívaly nejen v jiných vědeckých ústavech, ale i ve firmách, úřadech a průmyslových závodech. S příchodem tohoto vylepšeného typu minipočítače bylo třeba upravit jazyk B, tak aby byl lépe použitelný. Toho se zhostil Dennis Ritchie, který jej začal postupně upravovat. První fází byla implementace datových typů, čímž vznikl nepatrně rozšířený jazyk, který získal název NB (new B). Ve druhé fázi, při práci na kompilátoru, implementaci struktur a dalších úpravách (jimiž se Ritchie paradoxně vracel k některým dříve vyřazeným vymoženostem jazyka CPL), začal následujícího roku vznikat nový programovací jazyk, který Thompson nazval jazykem C. Zda se jedná o posloupnost abecedy nebo o odkaz na další písmeno otcovského jazyka BCPL, dodnes není jasné. Ne že by to bylo důležité. Daleko podstatnější byly vlastnosti jazyka C, k nimž patří především strukturovatelnost, možnost manipulace s daty na úrovni bitů či snadná rozšiřitelnost.
Díky své geniální koncepci se stal jazyk C pro programátory skvělým nástrojem. Ještě v roce 1972 přepsal tým programátorů jádro Unixu do „céčka“. Následujícího roku byl systém vedením Bell Labs konečně přijat, o čemž svědčí oficiální založení skupiny Unix System Group (USG), jejímž úkolem bylo poskytovat podporu Unixu pro interní potřebu Bell Labs.
Po krátké době byl do jazyka C přepsán skoro celý Unix a krátce nato pro dostupný hardware začaly vznikat překladače nového jazyka. C se stal prvním jazykem, který se výrazně prosadil pro programování přenositelných systémů. Protože si později mnoho z vytvořených překladačů k jazyku C přidalo další specifické vlastnosti, začala se z něj ve druhé polovině sedmdesátých let vytrácet jedna z jeho důležitých předností, a to přenositelnost. Nastala tak potřeba jazyk C standardizovat. Tento proces začal v roce 1978 uvedením knihy Programovací jazyk C (The C Programming Language), kterou napsali Dennis Ritchie a Brian Kernighan a jež se stala jakousi první neoficiální normou jazyka C.