# Machkernel

Mach is een compacte kernel ontwikkeld aan de Carnegie Mellon Universiteit (CMU). Het werd ontwikkeld voor de ondersteuning van onderzoek op het gebied van besturingssystemen, waarbij de nadruk lag op gedistribueerde en parallelle berekeningen. Het project aan de CMU was actief van 1985 tot en met 1994.

## Gemeenschappelijke onderdelen

Mach is ontwikkeld vanuit het inzicht dat moderne besturingssystemen een aantal dingen met elkaar gemeen hebben of zouden moeten hebben, zoals:
* draaien van meerdere toepassingen tegelijk door middel van multitasking;
* threads, dat wil zeggen onderdelen van een toepassing die zelf kunnen multitasken als een soort minitoepassingen;
* ondersteuning voor meerdere processoren, in een enkele machine of via een netwerk;
* verkeer tussen processen, het direct sturen van berichten tussen toepassingen;
* geheugenbescherming en veiligheid.

### Projecten

In het begin en midden van de jaren 80 waren er een aantal projecten die probeerden in deze behoeften te voorzien. Vaak ging het daarbij om het veranderen van onderdelen van bestaande besturingssystemen, vooral BSD. Na iedere wijziging werd het besturingssysteem opnieuw gecompileerd, de machine opnieuw opgestart en de wijziging uitgeprobeerd. Deze benadering was problematisch, vooral ook omdat zelfs kleine probleempjes de hele machine deden crashen.

## Microkernel

Met Mach begon men een nieuw concept te verkennen, dat nu bekendstaat onder de naam microkernel. Daarbij bevindt zich de code van het besturingssysteem niet in één grote kernel, maar wordt de meeste code gedelegeerd in kleinere programma's, zogenaamde servers, die net als alle andere programma's draaien als processen onder de microkernel. Daarbij kwam een eind aan de situatie waarbij de kernel min of meer gelijkstond aan het besturingssysteem, en werd de rol van de kernel beperkt tot die van verkeersagent en dienstregelaar voor de servers.
Dit zou moeten betekenen dat men na een wijziging aan het besturingssysteem alleen maar het gewijzigde server-programma hoefde te herladen, zonder het hele besturingssysteem te hoeven hercompileren. Alleen na het werken aan de Machkernel zelf zou een herstart nog nodig zijn, en dat zou maar zelden moeten voorkomen.

## Machkernel en BSD: POE

Mach is zelf geen volledig besturingssysteem en zonder een verzameling servers is het vrijwel onbruikbaar. Deze servers bestonden toen echter nog niet. Om toch een bruikbaar systeem te krijgen, maakten de auteurs van Mach even snel een aanpassing van het besturingssysteem BSD: in plaats van BSD in onderdelen op te breken en van ieder onderdeel een server te maken, compileerden ze eenvoudigweg de hele kernel als één server en draaiden ze dat. Het resultaat stond bekend als POE.
POE draaide dus min of meer als een toepassing zoals alle andere, maar de prestaties waren vreselijk. Voor iedere aanroep vanuit een gebruikerstoepassing, bijvoorbeeld om de tijd op te vragen van de systeemklok, moest een bericht naar de kernel worden gestuurd (een bewerkelijke verrichting die bekendstaat als context switch). De kernel stuurde dat bericht dan via nog een context switch door naar de Unix-library. Het antwoord moest de hele weg weer terug. Dus kreeg Mach, buiten zijn schuld, de reputatie flexibel maar erg langzaam te zijn.
In het daarop volgende decennium heeft men dit berichtenverkeer vele malen sneller kunnen maken. Uiteindelijk werden de prestaties van Mach-achtige besturingssystemen vaak beter dan die van de BSD's waar ze op gebaseerd waren. Tegen die tijd had de academische wereld echter de interesse in het onderzoek op het gebied van besturingssystemen min of meer verloren, en zo is de belofte van Mach nog altijd niet ingelost.
Ooit dacht men namelijk dat Mach de hele wereld van de besturingssystemen langzaam zou overnemen, maar dit is niet gebeurd. Misschien is de belangrijkste reden voor het algemene falen van Mach wel luiheid: iedereen leek te denken dat iemand anders maar een op bibliotheken gebaseerd besturingssysteem moest leveren, en dus deed niemand het. De tot nu toe grootste inspanning in die richting is de Hurd van GNU. De Hurd is echter al meer dan tien jaar vertraagd, mede door de opkomst van Linux. Een aantal commerciële besturingssystemen heeft meer succes gehad, zoals QNX, dat alle beloften van Mach lijkt in te lossen.
Het werk aan Mach vond een aantal jaren lang plaats aan de CMU, maar werd uiteindelijk stilgelegd toen veel van de medewerkers de universiteit verlieten voor het bedrijfsleven. Mach is in het midden van de jaren 90 korte tijd weer tot leven gewerkt aan de University of Utah, wat leidde tot Mach 4 met belangrijke verbeteringen, maar werd daarna weer een slapend project.
Ondertussen benaderde een aantal bedrijven het gebruik van Mach op een praktische manier. De BSD-laag (of die van een ander besturingssysteem) werd direct binnenin de kernel gedraaid, zodat veel context switches konden worden voorkomen. Dat leverde redelijke prestaties op, zonder op de mogelijkheden van meerdere processoren en makkelijk te gebruiken threads in te leveren. Maar zelfs deze voordelen zijn relatief kleiner geworden omdat de verscheidene Unix-aanbieders ze inmiddels in hun eigen producten hebben verwerkt.
Dergelijke versies van op Mach gebaseerde besturingssystemen waren onder andere OSF/1, NeXTSTEP, en OS/2 van IBM voor de op de RS/6000 gebaseerde machines. Van deze systemen wordt er geen nog gebruikt. Ook andere besturingssystemen verkenden de mogelijkheid om naar een dergelijke benadering over te stappen, zoals Pink van Apple en Workplace OS van IBM.
Inmiddels heeft Apple OpenSTEP overgenomen om daarmee het Mac OS te vervangen. (OpenSTEP is in feite een bijgewerkte versie van het op Mach 2.5 gebaseerde besturingssysteem NeXTSTEP.) Het resultaat heet Mac OS X, wat net als zijn voorlopers gebaseerd is op de combinatie Mach/BSD.