Unix

familie van besturingssystemen met multitasking- en multiuser-mogelijkheden voor zeer uiteenlopende typen computers

Unix (of UNIX) is een familie van besturingssystemen met multitasking- en multiuser-mogelijkheden voor zeer uiteenlopende typen computers, ontwikkeld door verscheidene fabrikanten en groepen. De eerste versie van Unix werd ontworpen bij Bell Labs in 1969, door (onder anderen) Ken Thompson en Dennis Ritchie.

Beknopte stamboom van de Unixfamilie

Unix wordt gekenmerkt door de centrale rol van het bestandssysteem, dat niet alleen gebruikt wordt om bestanden op schijven en andere fysieke media aan te spreken, maar ook randapparatuur en in sommige varianten ook netwerkverbindingen.

Om met het bestandssysteem te werken maakt Unix van oudsher gebruik van een groot aantal kleine, niet-interactieve programma's, die allemaal één zeer specifieke taak verrichten, en die via de shell gecombineerd kunnen worden tot grotere programma's.

Hoewel Unix vaak geassocieerd wordt met een opdrachtregelinterface, zijn grafische gebruikersomgevingen op Unix al sinds begin jaren 80 beschikbaar. Ook macOS, het besturingssysteem van Apple, is "onder de motorkap" Unix (meer specifiek BSD-gebaseerd). Dat geldt ook voor iOS, het besturingsysteem van de iPad en de iPhone. Android, het besturingssysteem van Google voor mobiele apparaten, zoals smartphones en tablets, is gebaseerd op Linux, dat ook veel eigenschappen van Unix heeft.

Naam en handelsmerk

bewerken

De naam Unix wordt vaak met hoofdletters geschreven, maar is geen afkorting. Unix is een woordspeling op de naam van een eerder systeem, Multics (zie verderop). "UNIX" is een geregistreerd handelsmerk van The Open Group; dit consortium verleent het recht om het merk te gebruiken aan producten die voldoen aan de Single UNIX Specification.[1] De meeste systemen die aan deze standaard voldoen stammen af van de "oer-Unix" van Bell Labs, maar er zijn uitzonderingen, waaronder SOX en z/OS.

In de praktijk wordt de naam Unix ook wel gebruikt als generiek handelsmerk (soortnaam), ter aanduiding van alle besturingssystemen die op enigerlei wijze hun oorsprong vinden in het eerste Unixsysteem van Bell Labs. Voor meerdere Unixsystemen wordt wel het pseudo Latijnse meervoud unices gebruikt.

Werkomgeving

bewerken

Traditioneel biedt Unix de gebruiker een opdrachtregelinterface, de shell. Deze biedt de gebruiker niet alleen de mogelijkheid om programma's op te starten, maar heeft in feite een complete ingebouwde scripttaal met variabelen en control flow.

Naast de shell beschikken veel Unices sinds de jaren 80 over grafische vensteromgevingen. Aanvankelijk had elke leverancier zijn eigen vensteromgeving, maar vanaf midden jaren 80 begon het X Window System (kortweg X of X11) langzaam de standaard te worden. Vandaag de dag wordt X gebruikt op bijna alle Unices, behalve Mac OS X (hoewel hiervoor wel een versie van X beschikbaar is, om grafische Unixprogramma's te kunnen draaien die niet specifiek voor OS X geschreven zijn) en enkele uitzonderingen die zijn overgegaan op Wayland. Voor X.Org bestaan daarnaast desktopomgevingen zoals KDE, GNOME, Xfce, LXDE en Enlightenment.

Bestandssysteem

bewerken

Het bestandssysteem van Unix vormt één grote boomstructuur. In tegenstelling tot systemen als MS-DOS en Windows kent Unix dus geen schijfletters; in plaats daarvan wordt een (fysieke of virtuele) schijf aan een bestaande directory gehecht met het commando mount; die directory wordt dan mountpoint genoemd. Als bijvoorbeeld systeembestanden op harde schijf 1 staan, en gebruikersbestanden op schijf 2, dan kan schijf 1 als root (wortel) van het bestandssysteem ingesteld worden, en wordt schijf 2 "gemount" op de directory /home. Deze directory gedraagt zich verder zo veel mogelijk als een gewone directory; de grens tussen beide schijven wordt zo veel mogelijk voor de gebruiker verborgen gehouden.

Bestanden worden op Unix aangeduid met een "pad" dat bestaat uit een aantal namen van directory's, gescheiden door slashes, en uiteindelijk een bestandsnaam. De root wordt aangeduid met /. Als in de root een directory foo staat met daarin een directory bar en daarin een bestand baz, dan kan dit bestand aangeduid worden met /foo/bar/baz. Deze manier van bestanden aanduiden komt ook voor in URL's (die op de Unixconventie gebaseerd zijn).

Een aantal directory's bestaat standaard op vrijwel elk Unixsysteem, de volgende zelfs al sinds eind jaren 70:

  • /bin bevat systeemcommando's
  • /dev bevat apparaatbestanden (device files; zie hieronder)
  • /etc bevat configuratiebestanden (en oorspronkelijk ook programma's voor systeembeheer)
  • /lib bevat programmabibliotheken
  • /tmp bevat tijdelijke bestanden
  • /usr bevat programma's die niet nodig zijn tijdens de opstartfase

Onder /usr bevindt zich weer een hele hiërarchie die gedeeltelijk vergelijkbaar is met de root (zo is er een /usr/bin en een /usr/lib).

Verder heeft elke gebruiker een eigen directory, de homedirectory, die alle privébestanden (documenten, instellingen, programma's) van die gebruiker bevat. Natuurlijk kunnen binnen deze directory weer subdirectory's aangemaakt worden. De homedirectory's zijn weer verzameld in een overkoepelende directory; oorspronkelijk was dit /usr, maar tegenwoordig is het meestal een aparte directory als /home of /users.

De verdeling van programma's over /bin en /usr/bin is gedeeltelijk een historische: op de oudste Unixinstallaties bij Bell Labs waren de harde schijven zo klein (10 à 25 MB) dat de programma's verdeeld moesten worden. Vanaf één schijf werd opgestart, waarna de andere werd gemount.

De huidige POSIX-standaard voor Unix-bestandssystemen is vastgelegd in de Filesystem Hierarchy Standard.

Koppelingen (links)

bewerken

Op Unix is het mogelijk een bestand meer dan één naam te geven, door middel van harde en zachte/symbolische koppelingen (hard links en soft of symbolic links).

Een harde koppeling is een koppeling tussen een bestandsnaam en het onderliggende bestand. Gewoonlijk heeft een bestand één koppeling, en dus één naam, maar nieuwe koppelingen kunnen gemaakt worden met het commando ln:

ln foo bar

maakt een nieuwe koppeling genaamd bar die naar hetzelfde bestand verwijst als foo. Bewerkingen die op de inhoud van foo worden uitgevoerd werken door in bar en vice versa. Alleen het verwijderen van een van beide heeft geen effect op de ander; het verwijderen van een bestand (met het commando rm) verwijdert eigenlijk alleen de koppeling.

Symbolische of zachte koppelingen (symlinks) werken anders. Een symbolische koppeling is een speciaal type bestand dat een verwijzing is naar een ander pad. Ze worden aangemaakt met ln -s:

ln -s foo bar

bar is nu een symlink naar foo. foo hoeft hiervoor geen bestand te zijn; het mag ook een directory zijn, en hoeft zelfs niet te bestaan. bar verwijst alleen naar de naam (het symbool) foo.

Eigendom en permissies

bewerken

Omdat Unix meerdere gebruikers op hetzelfde systeem toestaat, hebben alle bestanden in het systeem een eigenaar, die bepaalt wie er toestemming hebben om een bestand in te lezen, te wijzigen of uit te voeren (in het geval van een programma). Deze rechten worden apart toegekend aan de eigenaar van het bestand (die ze zelf kan wijzigen, maar op deze manier zijn bestanden tegen eigen fouten kan beschermen), de groep van het bestand (een gebruikersgroep waar de eigenaar lid van moet zijn) en alle andere gebruikers op het systeem.

Apparaatbestanden

bewerken

Unix heeft een vrij aparte manier om randapparatuur aan te spreken: in de directory /dev staan zogenaamde "apparaatbestanden", die gekoppeld zijn aan de apparaten. Op een modern systeem kunnen bijvoorbeeld bestanden met namen als /dev/usb0 (usb1, usb2, ...) aanwezig zijn. Door een dergelijk bestand te openen en de inhoud te lezen of er naar te schrijven, kan met een USB-apparaat gecommuniceerd worden. Voor de gebruiker, en zelfs voor softwareontwikkelaars gedraagt een apparaatbestand zich als een gewoon bestand, maar "onder de motorkap" worden alle in- en uitvoerhandelingen doorgesluisd naar het corresponderende apparaat.

Geschiedenis

bewerken

Voorgeschiedenis: Multics

bewerken
 
Ken Thompson (links) en Dennis Ritchie

In 1965 ging Bell Labs, de onderzoeksafdeling van de Amerikaanse telecomgigant AT&T, met General Electric en het MIT in zee om samen een besturingssysteem voor de GE-645 te ontwikkelen, dat Multics zou gaan heten. Het project was zeer ambitieus: Multics zou een timesharingsysteem worden, waarop meerdere gebruikers tegelijk interactief konden werken (aan meerdere terminals). Dergelijke faciliteiten waren medio jaren 60 bijzonder geavanceerd: de meeste computers werden gebruikt en geprogrammeerd door middel van ponskaarten. Voor Bell Labs werkten de softwareontwikkelaars Ken Thompson en Dennis Ritchie aan het project.

Omdat Multics echter niet op tijd aan de eisen van Bell Labs kon voldoen werd de deelname van Bell Labs aan de ontwikkeling van het systeem in april 1969 stopgezet. Het project werd echter wel met succes voortgezet door GE en MIT.[2]

Om te proberen er toch nog wat van te maken, besloten Ritchie en Thompson er een nieuw bestandssysteem voor te schrijven. Dit zou later het bestandssysteem voor Unix worden. Om het concept uit te werken schreef Ken Thompson zelfs een kernel voor de GE-645. Intussen schreef hij ook een spelletje voor deze machine, maar omdat het veel te duur was om te draaien en omdat het niet soepel liep ging hij op zoek naar een andere computer waar het beter op zou draaien. Dat werd een op dat moment ongebruikte PDP-7, een toen al verouderd type minicomputer. Door het programmeren hiervan leerde hij deze machine zo goed kennen dat hij later de kernel overbracht naar deze machine. Later werden er een hoop nieuwe hulpprogramma's geschreven door Ritchie en Thompson en anderen en het systeem ontwikkelde zich steeds meer tot een volwaardig bruikbaar besturingssysteem op de PDP-7. Toen er een naam voor het systeem moest komen werd UNICS voorgesteld (naar verluidt door Brian Kernighan[2]), voor Uniplexed Information and Computation Service, een woordspeling op Multics, dat stond voor Multiplexed Information and Computation Service. Uniplexed is een onzinwoord, dat zoiets zou moeten betekenen als "in enen gesplitst". In het Engels klinkt UNICS echter hetzelfde als eunuchs, "eunuchen;" het systeem was dus een "ontmande Multics."[3]

Om te laten zien wat het besturingssysteem waard was werd het in 1971 overgezet naar de PDP-11. Financiering voor dit experiment was beschikbaar omdat de patentenafdeling van Bell Labs een nieuw tekstverwerkingssysteem nodig had; dit zou samen met het nieuwe systeem ontwikkeld worden. Intussen was UNICS veranderd in UNIX; het precieze moment waarop de naamsverandering werd ingevoerd, en wiens idee dat was, is niet meer te achterhalen.[3]

Al snel probeerde Thompson een compiler voor de destijds universele programmeertaal Fortran te ontwikkelen. Na een tijdje bedacht hij zich echter, en vond hij de programmeertaal B uit, gebaseerd op de eerdere taal BCPL. Deze taal werd door een interpreter uitgevoerd, waardoor programma's relatief traag draaiden. Er werd daarom al snel gewerkt aan een nieuwe gecompileerde taal die C werd genoemd.

Verspreiding buiten Bell Labs

bewerken

In 1973 werd nagenoeg het hele systeem herschreven in C waardoor het makkelijker overdraagbaar werd naar andere computertypes en er steeds meer gebruikers bij kwamen.[4] Ritchie en Thompson presenteerden het systeem voor het eerst buiten Bell Labs op een informaticacongres aan de Purdue-universiteit, waarna het aan verschillende academia werd geleverd; het systeem was interessant voor onderwijs en onderzoek omdat de volledige broncode met het systeem meegeleverd werd, het conceptueel eenvoudig was, begrijpelijk geïmplementeerd (in een high-level language, C) en bovendien goedkoop: de relatief kleine PDP-11 paste binnen het budget van universiteiten. In dezelfde tijd begonnen binnen en buiten Bell Labs allerlei varianten te ontstaan. Er werd een interne UNIX Support Group opgezet, die later commerciële varianten ging verzorgen.

Unix Versie 6 (V6), van 1975, was de eerste versie die ook buiten Bell Labs veel gebruikt werd: een aantal universiteiten kocht een licentie voor $150[5] en maakte eigen Unixvarianten. In 1977 werd Unix voor het eerst overgezet naar een niet-PDP-machine, de Interdata 7/32. Dit werd gedaan door medewerkers van de Universiteit van Wollongong in Australië.

In 1979 kwam Versie 7 uit, misschien wel de belangrijkste versie ooit: praktisch alle latere versies van Unix stammen af van V7. In juni '79 volgde een versie van V7 voor de VAX, genaamd UNIX/32V.

De onderzoeksgroep binnen Bell Labs ontwikkelde Unix verder tot Versie 10, maar de versies na V7 werden buiten Bell Labs nauwelijks gebruikt. Wel kwamen onderdelen van V8 in System V terecht. Na V10 werd Plan 9 ontwikkeld, bedoeld als "opvolger" van Unix.

De jaren 80: commercialisering

bewerken

AT&T, het moederbedrijf van Bell Labs, had een overeenkomst gesloten met de Amerikaanse overheid waardoor het zich niet in de softwarebranche mocht begeven. Unix werd wel verkocht, via AT&T-dochter Western Electric, maar altijd tegen relatief lage kosten en zonder ondersteuningscontract. Dit maakte het vooral aantrekkelijk voor universiteiten en onderzoeksinstellingen. Ook het feit dat de broncode bij het systeem geleverd werd droeg hier sterk aan bij: gebruikers (onderzoekers en studenten) konden makkelijk zelf aanpassingen aan Unix maken. De Universiteit van Berkeley ontwikkelde eind jaren 70 haar eigen versie, de Berkeley Software Distribution (BSD), die in een concurrentieslag met AT&T UNIX zou belanden.

De eerste twee versies van BSD waren tapes met hulpprogramma's, uitgebracht in 1977 (voor Unix V6) en 1979 (voor V7). In 1979 kwam een versie van Unix voor de 32-bits VAX-computer uit (32V). Deze maakte echter geen optimaal gebruik van de VAX-processor; met name ontbrak ondersteuning voor de vernieuwing waar de VAX haar naam aan dankte, virtueel geheugen. De onderzoekers te Berkeley ontwikkelden een eigen versie van Unix en gaven die vrij als 3BSD. 4BSD en 4.1BSD volgden in 1980 en '81. Met sponsoring van het Amerikaanse ministerie van Defensie (via DARPA) ontwikkelde de onderzoeksgroep te Berkeley netwerkondersteuning, inclusief de mogelijkheid om Unix-machines aan het ARPANET te knopen, de voorloper van het Internet.

Softwarebedrijven konden intussen een licentie kopen op Unix om een eigen versie op de markt te brengen. Voorwaarde was dat zij de naam Unix niet voor hun product gebruikten. In 1980 ontwikkelde Microsoft zo'n eigen versie, die verkocht werd als Xenix en uitgroeide tot (waarschijnlijk) de meest gebruikte Unix.[6] Ook hardwarefabrikanten als Digital, Hewlett-Packard (HP) en Sun Microsystems kochten Unixlicenties om eigen versies te kunnen leveren bij hun servers en workstations.

In 1982 werd telecommonopolist AT&T op last van justitie opgesplitst in een aantal kleinere bedrijven. Regionale takken van het bedrijf werden afgestoten; in ruil daarvoor kwam de weg naar de ICT-sector vrij. Nog in hetzelfde jaar bracht AT&T een eerste commerciële variant van Unix op de markt, onder de naam UNIX System III. Er waren geen Systems I en II; de naam is waarschijnlijk gekozen omdat System III gebaseerd was op de intern gebruikte versies UNIX/TS 3.0.1 en CB UNIX 3. System III werd in 1983 opgevolgd door System V, gebaseerd op UNIX/TS 5.0.[7] Deze versie, inclusief varianten ontwikkeld door derden (inclusief Microsoft Xenix) bleek succesvol: in 1984 draaide Unix op ca. 10.000 computers wereldwijd.

Verschillende versies van System V werden door AT&T uitgegeven, waaronder System V.2 (1984) en System V.3 (1987, met netwerkondersteuning). De wildgroei aan onderling niet-uitwisselbare Unixversies leidde in 1984 tot de oprichting van X/Open, een consortium dat een standaard voor Unix zou produceren, zodat applicatieprogramma's niet langer voor elke specifieke versie van het besturingssysteem hoefden te worden aangepast.[8]

 
Typische werkomgeving van een Unixmachine, ca. 1990 (reconstructie)

De Unixoorlogen

bewerken

Eind jaren 80 besloten AT&T en Sun om System V, BSD, SunOS en Xenix te combineren in één versie, System V Release 4 (SVR4). AT&T kocht een aanzienlijk aandeel in Sun, dat een "voorkeursbehandeling" van AT&T zou krijgen. Andere Unixleveranciers, waaronder Digital en HP organiseerden zich in 1988 tegen het "monsterverbond" van AT&T en Sun.[8] Ook IBM, dat de System V-variant AIX uitgaf, sloot zich aan bij wat de "Hamiltongroep" genoemd werd. In mei '88 ontstond uit deze groep de Open Software Foundation (OSF), met als voornaamste doel een eigen verenigde Unix te produceren, eveneens op basis van System V.3 en 4.3BSD. AT&T en Sun reageerden met de oprichting van een eigen consortium met de naam Unix International.

AT&T SVR4.0 en de Sunversie Solaris verschenen in 1990. Het OSF-systeem, OSF/1, vormde de basis van Digital Unix maar werd verder weinig populair. De wereldwijde economische neergang van 1991/'92 bracht de Unixoorlogen tot een einde.[8] AT&T verkocht uiteindelijk in 1993 de rechten op Unix aan Novell, dat het verkocht als UnixWare. Novell verkocht dit systeem twee jaar later aan Santa Cruz Operation dat het in 2000 verder verkocht aan Caldera (in 2002 van naam veranderd in SCO). Na slepende procedures en uiteindelijk een rechtszaak in 2010 bleek echter dat SCO niet de auteursrechten van Unix had gekocht maar slechts het recht op de verkoop van licenties. X/Open en OSF fuseerden in 1996 tot The Open Group, dat het handelsmerk Unix beheert en dit toekent aan ieder systeem dat aan een bepaalde standaard voldoet. Intussen verloor Unix een groot deel van zijn marktpositie aan het nieuwe besturingssysteem Windows NT.

GNU en Linux

bewerken

Door toedoen van Richard Stallman en het door hem opgezette GNU-project ontstond eind jaren tachtig een vrije Unixkloon. In 1991 kwam Linus Torvalds met zijn Linuxkernel, het enige onderdeel dat nog ontbrak om van het GNU-project een compleet besturingssysteem te maken. GNU/Linux is tegenwoordig het bekendste vrije besturingssysteem.

Belangrijke Unix-varianten

bewerken

Enkele belangrijke Unixopdrachten

bewerken
pwd
print working directory
cd
change directory
cat
concatenate
cp
copy
ln
link
ls
list
mkdir
make directory
mv
move
rm
remove
su
switch user (ook wel run with substitute user and group IDs)

Zie ook

bewerken
bewerken
  • (en) Uitgebreide stamboom van de Unixfamilie
  NODES
INTERN 4
Note 1
Project 5
USERS 1