(This IsN't The F*cking Manual)
UNIX
a la Hamster
Igen, kedves nézőink, mai műsorunkban a számítástechnikai világ UNIX néven ismeretes csodájáról lesz szó! Kérjük, ha csak tehetik, vegyék videóra minden egyes adásunkat, így utólag, ha helyre lenne szükségünk, lesz mit letörölni...
Főcímzene: Echoes (Pink Floyd)
Történelemóra
A számítástechnika rohamos fejlődése a hatvanas évek vége fele szükségessé tette egy egységes nagygépes operációs rendszer létrehozását. Kifejlesztéséhez találták ki az ecuadori Kokochita Tech munkatársai a MogyorOS nyelvet. Az adatábrázolás megértéséhez képzeljünk el egy 13 * 29-es mátrixot, melynek csomópontjain elhelyeztek 13 * 29 darab mogyoróstálkát. Azok a tálkák, amikben csak mogyoró van, a 0 állapotot jelképezik, amelyekben a mogyoró mellett van mazsola is az 1-est. A rendszeroperátor ilyen technológiával volt képes felprogramozni a gépet. A nyelv hátránya volt, hogy egy kisebb adatbázis létrehozása évekbe és több tucat gyomormosásba került, így más megoldás után kellett nézni. Próbálkoztak mogyoró és mazsola helyett fröccsel és tiszta borral is, de továbbra sem volt elég hatékony. Miután a fentebb említett kísérletek nem vezettek eredményre, a kiábrándult számítástechnikusok visszatértek a batch alapú mainframe-es rendszerek használatához, és a lyukkártyás Fortran II programozáshoz.
Közben (1965) az Amerika Egyesült Államokban a General Electric, a Masschusetts
Institute of Technology és a Bell Laboratories egy Multics (Multiplexed
Information and Computing Service) nevű nagygépes operációs rendszer létrehozásán
fáradozott. Fáradoztak, ez a helyes szó, eredményre mindenesetre nem jutottak:
a késznek mondott változat negyedannyit tudott, mint amennyit célul kitűztek.
A Bell
Labsnak ez olyannyira nem tetszett, hogy a projekten dolgozó embereit
visszahívta (a General Electric majd később (1970-től) a Honeywell folytatta
a fejlesztési munkát, a köztudatban élő képpel ellentétben a mai napig
vannak működő Multics-os rendszerek néhány amerikai cégnél és egyetemeken).
A visszahívott Bell-munkatársak között volt Kenneth Thompson és Dennis Ritchie, akik nagyon megszerették a készülő rendszer szolgáltatásait, megszerzett tapasztalataikat pedig hasznosítani szerették volna. Munkahelyükön, a Murray Hill-en körülnézve figyelmesek lettek egy félreeső helyen eldugott Digital PDP-7-re.
1. kép: Digital Equipment Corporation
PDP-7
Képzeljük el ezt a masinát, amint éppen félreesik!
(Forrás: DEC Electronic Photo Library)
A masina két telexírógép-terminállal rendelkezett, egy grafikus display-el és egy fix-fejes lemezmeghajtóval. A képernyőt kihasználva Thompson eredetileg egy Multics-ra készült űrhajós játékot kezdett el újraírni rajta, méghozzá úgy, hogy eldobott minden szoftvert, ami a géphez volt, nulláról indulva. Amikor rájöttek, hogy jobban szeretnek a frissen írt debug-környezettel foglalkozni, mint a játékkal, elhatározták, hogy írnak egy oprendszert. Nosza hát, Thompson összedobott valamit, amit a labor munkatársainak ötleteivel bővítgettek. Rengeteg dolgot megcsináltak, amiről még lesz szó később, a számítógépet viszont kinőtték. 1969 végén elkezdtek egy nagyobb gépért lobbizni, kezdetben sikertelenül. aztán mégis rájuk mosolygott a szerencse:1970 májusában a cég benevezett egy PDP-11/20 vételébe. Ez a típus éppen akkor jött ki, a lehető legcsupaszabb modell volt: 16 bites memóriakezelés, semmi memóriavédelem, sőt, az első hónapokban még merevlemez se volt hozzá! Nem is használták túl sok mindenre: a PDP7-esen egy cross-compilerrel fordítottak rá egy UNIX-kernelt, azt papírszalagról bebootolták, a gép pedig az elkövetkező időkben sakkfeladványok megoldásán "gondolkodott" a gépterem sarkában.
Amikor a diszkek megérkeztek, gyorsan elkészült a UNIX-11 (1971 januárja
és márciusa között). Hogy képet kapjunk ennek méretéről, elmondom, hogy
a gép 24 Kszó (=48 Kbyte) memóriával rendelkezett, ebből a rendszer elfoglalt
16-ot, a felhasználónak maradt 8; a
diszk pedig 512Kbyte-os volt (1Kbyte-os blokkokkal). A két fejlesztő
jogosan volt büszke magára, azonban volt egy kis "bibi" a
dologban: a PDP-11 nem kifejezetten a UNIX kedvéért lett megvéve, Thompson
és Ritchie egy szövegszerkesztő-rendszer kifejlesztését
ígérte a Bell szabadalmakkal foglalkozó részlegének a gép használati
jogáért cserébe. Gyorsan megcsinálták a roff névre hallgató programocskát,
mely nagyszerűen bevált, olyannyira, hogy továbbfejlesztése mind a mai
napig használatos a UNIX-okon. Mindezek ellenére a PDP-11/20 nem volt alkalmas
kényelmes és biztonságos multiuser/multitask (ezek a szavak azt jelentik,
hogy egyszerre több felhasználó próbálkozik a rendszer használatnak álcázott
megborításával) megvalósítására. Először a KS11 névre hallgató opcióval
próbálkoztak, mely memóriavédelmet biztosított, aztán beépítettek egy kibővített
aritmetikai egységet is, hogy a gép teljesítményét növeljék.
2. kép: Digital Equipment Corporation PDP-11/20 (és
PDP-11/45, de az nem igazán látszik)
A kép 1972 környékén készülhetett, a UNIX két atyja előtt
két telexírógépet láthatunk, melyek a UI (user interface) szerepét töltötték
be
(Forrás: Bell Labs, Lucent Technologies, Dennis
M. Ritchie weboldala)
Mindez persze csak addig felelt meg, amíg meg nem érkezett az új PDP-11/45,
mely már képes volt 128Kszó memória védett
kezelésére is, valamint gyorsabb is volt. De közben persze történt
más is...
A C története, avagy Bábel tornya visszavág...
Ezidőtájt fejlesztették ki a C nyelvet a Nagyon Szűkszavú Programozók
Szervezeténél azok a számítástechnikusok, akik nem szerették
kimondani az addigi nyelvek "hosszú" neveit: pascal, basic, fortran,
algol, logo... Illetve ez nem is teljesen így történt, és nagyon sok köze
van az előbbi történethez: ugyanott, ugyanazok az emberek csinálták.
A UNIX kezdetben assembly-ben íródott, aztán valaki írt a TMG nevű nyelvhez
egy fordítót, Ken Thompson viszont inkább Fortrant szeretett volna használni,
ezért elkezdett egy Fortran fordítót írni TMG-ben. Mikor rájött, hogy annyira
azért mégsem akarja, a BCPL névre keresztelt nyelv alapjain elindulva létrehozta
a B nyelvet. Ez tetszett neki, ezért előbb írt egy PDP-11 B crosscompilert
a PDP-7-en (B-ben), kicsit később pedig a PDP-7 B fordítót is átírta B-re
(TMG-ből ugyebár). Mire idáig eljutott (1971-re), annyira belezavarodott
az egészbe, hogy a következő nyelv kitalálását, és a fordító megírását
már Ritchie-re hagyta. Ez a következő nyelv volt a C. 1973-ra a PDP-11
UNIX kernel is teljesen át lett írva C-re, lehetővé téve azt, hogy az operációs
rendszert olyan más számítógépekre is
átírják (portolják), amelyre valaki már írt egy C fordítót.
A jedi össze-visszatér
A harmadik UNIX-verzió volt az, amely a PDP-11 sorozat több számítógépén
is futott már (11/45, 11/40, 11/34, 11/60, 11/70). Nagy
újdonság volt a multiprogramozás megjelenése, és a fejlesztői környezet
is olyannyira barátságos lett, hogy egyre több fordító (fortran, algol,
c) készült hozzá, ennek köszönhetően viszont egyre több helyen kezdték
használni az addig főleg csak Bell-berkekben terjedő oprendszert.
A negyedik rendszer (milyen jó kis filmcím lenne ebből...) rendkívül
fontosnak bizonyult: a UNIX ezen verzióját portolták az Interdata
8/32-es számítógépre, kilépve a PDP-11-es architektúrán kívülre. Ez
a UNIX terjedésének szempontjából ügyes húzás volt, egyfajta bíztatás a
többi UNIX-felhasználónak, hogy ők is próbálkozzanak hasonlóval. Ekkortájt
ugyanis az AT&T (a Bell Labs tulajdonosa) ingyenesen az oktatási intézmények
rendelkezésére bocsájtotta az operációs rendszer forráskódját: a bátrak
belenyúlhattak, átírhatták, kísérletezhettek vele, akár át is írhatták
valamilyen másik gépre (például a Digital új VAX számítógépére, ami hamar
meg is történt)...
1978-ban az AT&T elkezdte pénzért árulni a UNIX forráskódját, a kereskedelmi UNIX-ok alapja az ekkor kiadott hetes verzió (7th Edition) lett, innentől kezdve ugyanis a toávbbfejlesztők is pénzt kértek a saját változataikért. A kaliforniai Berkeley Egyetem egy évvel később saját UNIX-variáns kialakítása melett döntött, amikor az AT&T kereskedelmi termékké minősítette az eredeti UNIX-ot. A gyerek neve BSD (Berkeley Software Distribution) Unix lett, egyébként az Internet-protokollok kifejlesztése is ezen a platformon történt. A BSD fejlesztői más megoldásokat alkalmaztak saját rendszerüknél, mint az AT&T-sek, ezért a UNIX-mozgalom két nagy táborra szakadt, és az egyes számítástechnikai cégek UNIX-ai és egyik vagy másik irányzat képviselői lettel: az Ultrix (DEC), a SunOS (Sun), a Unicos (Cray) például BSD alapúak, míg az AIX (IBM), IRIX (Silicon Graphics), vagy a HP-UX (Hewlett-Packard) az AT&T UNIX verziói. A nyolcvanas évek első felében (1983) jelent meg két nagy hatású verzió, az AT&T System V. névre keresztelt UNIX-a, és a Berkeley 4.2BSD-je, mindkettő egyfajta szabványt teremtett az operációs rendszerek világában.
Innentől kezdve a dolgok kicsit összezavarodtak: a Sun összefogott az
AT&T-vel, az eredmény a System V Release 4 (1990) volt, amit
sokszor SVR4-nek szoktak rövidíteni, ez gyorsan egyfajta szabvánnyá
vált. Sok másik hardvergyártó (DEC, HP, IBM) ekkor veszélyben érezte UNIX-os
üzletágát, ezért OSF (Open Software Foundation) név alatt szövetségre léptek,
egy évvel később pedig kiadták az OSF/1-et, amit érdekes módon csak a DEC
használt fel (Alpha AXP számítógépek). Ekkortájt indult meg BSD alapokon
egy ingyenes UNIX fejlesztése (FreeBSD), valamint Linus Benedict Torvalds
is ekkortájt fogott bele a Linux létrehozásába. Az ingyenes BSD irányzat
később személyes és filozófiai problémák miatt több ágra vált (az új ág
az OpenBSD), a NetBSD pedig más hardverplatformok (DEC MIPS, DEC VAX, DEC
Alpha, HP-RISC, Amiga, stb) meghódítását tűzte ki célul. A közös nevező
a BSD kódkönyvtár használata. (Ugyanez visszafele is igaz, a Berkeley a
különböző ingyenes irányzatok által készített kód felhasználásával BSDI
néven árul egy kereskedelmi (pénzes) UNIX-ot.)
Nem kell elkeseredni, semmi baj, ha nem látjuk át, hogy ki kinek a micsodája,
mert nem ez a lényeg: a UNIX nem egy operációs rendszer
(bár a "UNIX" név bejegyzett védjegy, jelenleg (az X/Open és a Novell)
után az SCO tulajdonában van), hanem egy életérzés, technológiai felfogás.
Az említett verziókon felül léteznek még ipari szabványok az operációs
rendszerek beskatulyázásához, például a UNIX95 minősítés, vagy a POSIX,
ezek mind azért lettek létrehozva, hogy a UNIX-ok kompatibilisek legyenek
egymással; az már tipikus probléma, hogy minden UNIX-os azt szeretné, ha
az ő UNIX-a lenne az alap a kompatibilitáshoz... Ebben az írásban a UNIX
egy operációsrendszer-típust jelöl, melynek felhasználói felülete többé-kevésbbé
konzisztens (Ezen persze el lehet vitatkozni, lásd "hogy hívják ezen
a héten a nyomtatás parancsot?"-szindróma. A "többé-kevésbbé" azt jelenti,
hogy egy-egy parancsnak más-más opciói lehetnek az egyes UNIX verziókban,
vagy hogy egy adott file-t máshol lehet megtalálni.) Talán idővel eltűnnek
ezek a különbségek is, a jelek legalábbis erre utalnak: a gyártók a Microsoft
Windows NT-től való félelmükben lassan kezdik megtalálni a közös hangnemet...
Szóval akkor inkább ugorgyunk, és már ott is vagyunk egy UNIX-os, gép elôtt (vagy mögött, bár az nehézkesebb). Ha mégsem, akkor gyakoroljunk DOSban, és gondolkozzunk el, hogy miért nem megy semmi se. Illetve hogy miért vannak hasonlóságok. Illetve hogy mennyi a sebessége egy töketlen buherátornak.
Ismerkedés (a találkozástól az első csókig)
A UNIX-al való ismerkedés valószínűleg célravezetőbb módja az, ha leülünk egy UNIX-os gép terminálja elé. Ehhez manapság már nincsen szükségünk egy csillagászati árú speciális hardverre, mert a PC-n (is) rendelkezésre áll több nagyszerű UNIX-jellegű operációs rendszer, melyek megpróbálnak számítógépet faragni PC-nkből. A Linux néha egész meggyőző tud lenni, a FreeBSD pedig elég hűen emulálja a tizenöt évvel ezelőtti idők hangulatát. Extremistáknak persze tudom ajánlani, hogy a további fejezetek feladatainak kipróbálásával DOS, VMS DCL vagy mondjuk CP/M alatt próbálkozzanak, de utána azért gondolkozzanak el azon, hogy miért nem sikerült bármit is elérniük...
A UNIX mint olyan (mint milyen?)
Már említettem, hogy a UNIX multitask rendszer, azaz párhuzamosan több (több tucat, több száz, több mint kéne) folyamat csordogál benne. Bármit csinálunk, az egy task. Ahol beírjuk, hogy mit akarunk csinálni, az is csak task. Jobb helyeken ez utóbbit parancsértelmező buroknak hívják, amit a műveltebb sznobok csakis command shell néven emlegetnek.
Shell van egypúpú, van kétpúpú, sőt van több: általában a Bourne-shellt
( sh ) és a C-shell t ( csh ) különböztetjük meg, ezek szintaktikájukban,
logikájukban, valamint nevükben különböznek. Pénzes UNIX-okban leggyakrabban
az sh-alapú ksh-val (Korn shell, a kifejlesztője után; lehetne akár
kommersz shell is...) fogunk találkozni, ingyenes klónok alatt pedig valószínűleg
a bash-al (Bourne again
shell), esetleg a zsh-val. Fontos tudni, hogy a shell is csak
egy program a sok közül (mivel csak egy task), így az elvi lehetőségünk
mindig megvan ahhoz, hogy átugorjunk egy másikba (azért csak elvi, mert
lehet, hogy a rendszergazda letiltotta ezt a lehetőséget, netán csak egyfajta
shell van telepítve a rendszerben).
A task és a shell fogalmán kívül kulcsszó a UNIX-nál a file. Na jó,
akkor fájl... júniksz bácsinál ugyanis nagyjából minden fájlként
kezelhető, a terminálok, a merevlemez, a memória, minden. Persze "hagyományos"
(DOS-os értelmezésben is annak számító) fájlokból is
többfajta van: fájl lehet egyedülálló fájl is, ahogy azt megszoktuk,
vagy directory, amikor más fájl(ok) adatait tartalmazza (meg még továbbiak,
de erről majd később).
Alapvetően három fájltípust különböztet(het)ünk meg:
Na jó, a gyengébbek (elsősorban a magam) kedvéért:
/ (root dir) / \ / \ home/ bin/ / \ / \ / \ ... ... hamster/ masvalaki/ / \ / \ News/ Mail/ ez/ amaz/Namármost, ebből az ábrából a legkezdőbb kezdőnek is le kellett vonnia a tanulságot, ti. hogy nem tudok ASCII-ban rajzolni... Meg még azt is, hogy ezt a rendszert ismernie kell, kivéve talán, ha ZX-81-ről, VM-ről, MVS-ről, OS-ről, stb-ről szállt át UNIX-ra...
Na jó, az érdekesebb tördelés kedvéért jöjjön új fejezet...