macOS: Mach, XNU en BSD4.4 UNIX
- July 17, 2018
- 0
macOS is geen Linux en geen open source, maar het is wel UNIX en bestaat uit honderden open source componenten.
Apple heeft met macOS nog steeds een troef in handen. Het bedrijf is erin geslaagd het populairste UNIX-besturingssysteem te ontwikkelen voor de desktop en laptop en is op dit moment het enige echt geslaagde commerciële alternatief voor Windows. Linux is simpelweg te versnipperd en misschien wel te open. macOS bevindt zich in het neutrale midden: één ontwikkelaar en een mix van open en closed source. Gesteund door Microsoft dankzij Office 365.
Succes van Apple
Waarom doet macOS het zo goed? Het draait immers formeel alleen op de erg dure hardware van Apple. Apple wordt de laatst tijd bovendien verweten – zelfs door Mac-fans – dat nieuwe hardware te traag wordt ontwikkeld en te duur is. Het topmodel MacBook Pro met 16GB RAM, een 512GB SSD-schijf, een 15-inch scherm en een quad-code Intel Core i7 kost €3.199. Inclusief btw weliswaar. Toch slaagt Apple erin zo’n 7 tot 8 procent van de markt in handen te houden. Linux blijft maar hangen tussen de 1 en 2 procent. Het zijn echter niet alleen meer designers en de multimediabedrijven die zweren bij Apple, ook voor kantoorgebruik (vooral zzp’ers) en zelfs bij leerlingen in het voortgezet onderwijs zien we zo nu en dan een Mac. Het beschikbaar zijn van de Adobe Creative Cloud (Photoshop en alles wat erbij hoort) en vooral Microsoft Office 2011 en Office 365 dragen hier zeker aan bij. Het merendeel van deze gebruikers werkt met de grafische bediening en de meegeleverde en commerciële Apple-applicaties of apps uit de Mac-appstore.
UNIX
Mac OS X, in 2016 omgedoopt naar macOS, omdat dit qua naam beter aansluit bij andere besturingssystemen van Apple, is één van de weinige besturingssystemen die zich een ‘echte’ UNIX mag noemen, omdat het gecertificeerd is volgens de UNIX 3-standaard. Behalve Apple macOS zijn actuele versies van Solaris, HP-UX en AIX gecertificeerd. Deze certificering houdt in dat macOS voldoet aan de Single UNIX Specification Version 3 (SUSv3) die onder meer definieert hoe compilers en programmeerinterfaces dienen te werken. Apple mag macOS dus UNIX noemen in plaats van UNIX-achtig of UNIX-gebaseerd, zoals dat geldt voor Linux. Dit zegt op zichzelf weinig, UNIX is vooral een commercieel trademark. Zie https://www.opengroup.org/openbrand/register.
Darwin
Het besturingssysteem van Apple heet Darwin, commercieel wordt het macOS genoemd. macOS en Linux hebben als voornaamste overeenkomst dat ze gebaseerd zijn op een UNIX-variant. Dit betekent dat de meeste voordelen (beveiliging, stabiliteit, flexibiliteit), maar ook nadelen (afwijkende GUI, beschikbare applicaties) op beide omgevingen veel op elkaar lijken. De kernel van GNU/Linux is de monolithische kernel Linux, de kernel van GNU/Hurd is net als de kernel van Darwin gebouwd als microkernelarchitectuur waarbij elk proces een individuele component is – rond de Mach kernel van de Carnegie Mellon University. Echter heeft Apple de microarchitectuur losgelaten en er een meer hybride kernel van gemaakt door er componenten van het op BSD4.4 Lite gebaseerde FreeBSD aan toe te voegen. Dus veel van het oorspronkelijke concept is er niet meer over. De kernel heet XNU, dat staat voor XNU is Not UNIX. XNU is open source en wordt behalve voor macOS onder meer ook in iOS gebruikt. Zie https://github.com/opensource-apple/xnu.
Je vraagt de exacte versies van het besturingssysteem Darwin en de XNU kernel op met uname -a. In afbeelding 2 zie je de plek van de bootloader en de kernel. Daarnaast zijn er nog kernelextensies (kext bestanden) aanwezig in de directory /System/Library/Extensions.
De opdrachtregel
De meeste Mac-gebruikers doen het nooit, maar als we naar macOS kijken vanuit het perspectief van de command line, dan is het net Linux. Onder Apple’s Terminal tik je gewoon de commando’s die je kent. Nou ja, bijna dan, want het zijn voor het grootste deel natuurlijk BSD-commando’s. Het meest opvallende verschil met BSD voor Linux-gebruikers is dat de commando’s de opties alleen met een minteken laten voorafgaan, de lange variant voor opties ontbreekt veelal. macOS is voorzien van alle benodigde commando’s. Je hebt een brede keuze uit commandline shells. Standaard wordt de bash-shell gebruikt, maar je schakelt zo om naar sh, zsh, tcsh, ksh of csh als je wilt. Je programmeert in perl en python en edit bestanden met vim of emacs. Kijk maar eens in /bin en /usr/bin.
Wat je mist zijn de ontwikkeltools, zoals compilers en libraries. Op het moment dat je bijvoorbeeld gcc aanroept, worden deze tools alsnog op macOS geïnstalleerd doordat xcode-select –install wordt aangeroepen. Ook de door Apple aan de open source community gedoneerde programmeertaal swift wordt geïnstalleerd. Zie: www.apple.com/nl/swift/.
GNU
Je weet waarschijnlijk dat Linux eigenlijk GNU/Linux heet: de Linux-kernel met GNU (en andere) tools. De eigen kernel van GNU, Hurd genaamd, in combinatie met GNU-tools is dan het GNU/Hurd besturingssysteem. Darwin zou je om die reden eigenlijk BSD/XNU moeten noemen: BSD (en andere) tools met de XNU kernel. Je maakt van Darwin GNU/XNU door bijvoorbeeld macports te installeren. Download macports van macports.org en installeer het pkg-package, de bestanden komen default in /opt/local terecht. Port is een soort package manager om open source tools te downloaden, compileren en installeren op Darwin. Tik nu met macports:
sudo port install coreutils en je installeert de GNU-tools. Sommige opdrachten heb je nu dubbel (BSD én GNU) en roep je aan met het absolute pad of door je path variabele te veranderen. Zo is Apple’s ls te vinden in /bin en GNU’s ls in /opt/local/libexec/bin. Macports bouwt onder /opt/local een herkenbare directorystructuur, met een directory bin (voor veelgebruikte commando’s), etc (voor systeeminstellingen en systeemscripts), lib, libexec, sbin (beheer), doc, man, var, spool, log en meer. Naast macports zijn er nog andere vergelijkbare installers voor macOS: Fink (www.finkproject.org) en HomeBrew (www.brew.sh).
Handige extra’s
macOS heeft daarnaast standaard extra commando’s. Een handig kopieerhulpprogramma op de opdrachtregel is ditto, het lijkt wat op rsync dat eveneens te gebruiken is op macOS. Met ditto kopieer je de inhoud van een directory naar een andere directory. Het kan veel meer dan een simpele cp -rp, lees de online manpage maar eens door. Het say-commando doet wat de naam zegt: het spreekt de opgegeven tekst uit. Hiervoor wordt een synthesizer stem gebruikt die aan te passen is. Het leuke is, dat je gebruikmaakt van typische opdrachtregelfunctionaliteit (I/O-redirection en pipes). Stuur bijvoorbeeld de uitvoer van een commando naar say en de uitvoer wordt voorgelezen: ls | say leest bijvoorbeeld de directory inhoud voor. En ken je het commando caffeinate? Hiermee houd je de Mac wakker en worden de energiebesparende instellingen overruled. Als optie geef je de tijd op in seconden, hoe lang je Mac wakker moet blijven.
Stel je wilt schermafdrukken maken (met SHIFT-CMD-3), maar geen png-bestand bewaren maar een PDF-bestand. Je gebruikt dan het commando: defaults write com.apple.screencapture type PDF. Activeer de instelling met killall Finder. Schermafdrukken worden nu bewaard als PDF-bestand. Vervang PDF voor JPG om JPG-screenshots te maken. Met defaults write com.apple.finder QuitMenuItem -bool TRUE gevolgd door killall Finder voeg je een extra menu toe genaamd Quit (of Stop Finder in het Nederlands). Door dit te kiezen of op de toetscombinatie CMD-Q te drukken, worden alle Finder-vensters afgesloten. Het commando pbcopy kopieert de invoer naar het klembord. Het is dus eenvoudig de uitvoer van de opdrachtregel te kopiëren naar een grafische applicatie. Met ls /usr/bin | pbcopy kopieer je de directory listing in de opdrachtregel naar het klembord. De andere kant op, kopieer je met pbpaste het klembord naar de commandline.
Cocoa en Xcode
De grafische bediening van macOS is geen open source, macOS gebruikt Cocoa. Wil je naast de commandline tools voor ontwikkelaars de complete grafische ontwikkelomgeving gebruiken? Installeer dan Xcode (na inloggen met je Apple-ID) vanuit de appstore. Het kost je wel meer dan 4GB schijfruimte, maar je krijgt een mooie IDE (Integrated Development Environment) om Cocoa apps te ontwikkelen. Volwaardig geïntegreerde Mac-applicaties zijn ontwikkeld met of geport naar het Cocoa-raamwerk. Een voorbeeld is GIMP 2.8. Dit grafische programma is eenvoudig te downloaden en installeren op https://www.gimp.org/downloads. Het werkt zonder verdere aanpassingen op macOS.
Als je GIMP start, krijg je de eerste keer een waarschuwing dat het mogelijk malware is, omdat het niet uit de Apple App Store is gedownload. Je start GIMP dan door het met de rechtermuisknop te selecteren en met ingedrukte CTRL-toets voor Open te kiezen. De eerste keer dat je GIMP start duurt dit een paar minuten, omdat alle fonts gecachet moeten worden.
XQuartz
Pure, niet naar Cocoa geporte X-applicaties, draaien niet vanwege het ontbreken van een X-server op macOS. Bovendien zijn er standaard geen X-apps aanwezig op macOS. Via macports installeer je de X.org server: sudo port -v install xorg-server en de basis X-applicaties (de clients), installeer je met sudo port -v install xorg. In plaats van met port X11 te installeren, is het net zo handig XQuartz te downloaden, het is een X-server en -clients mede ontwikkeld door Apple. Installeer XQuartz via www.xquartz.org.
Als je bijvoorbeeld xterm start, lukt dit niet omdat het default Display niet geopend kan worden. Pas na inloggen en uitloggen starten x-applicaties standaard op. XQuartz start dan eveneens vanzelf op als je de allereerste X-applicatie aanroept, bijvoorbeeld xterm. Dit duurt daarom iets langer. Als XQuartz eenmaal actief is in het Dock, starten X-applicaties razendsnel. De meegeleverde quartz-wm Window Manager valt, net als veel andere Apple open source (https://opensource.apple.com) onder de Apple Public Source License. Zie https://opensource.apple.com/apsl.
Inkscape
Een X-server is noodzakelijk om grafische applicaties te gebruiken die niet voor Cocoa beschikbaar zijn. Stel je wilt Inkscape gebruiken. Na installatie van XQuartz download je Inkscape van de website of met macports: sudo port install inkcape +xquartz. De installatie duurt een hele tijd, inkscape met alle hulpprogramma’s waaronder ghostscript wordt gecompileerd, geconfigureerd en geïnstalleerd. Veel sneller gaat de pkg-download en installatie, die is immers al binair en draait meteen. XQuartz wordt gestart, de fonts worden gecachet en Inkscape is klaar voor gebruik.
Anders
Hoewel de BSD commandline in macOS veel op Linux lijkt, zijn er uiteraard ook grote verschillen. Die hebben vooral te maken met toevoegingen van Apple. Power users en vooral systeembeheerders ervaren deze verschillen regelmatig. Het bestandssysteem en de directory-indeling zien er anders uit, dat betekent soms even zoeken. Processen zijn afwijkend, zo wordt er gebruikgemaakt van launchd (http://www.launchd.info/) waarmee daemons (als root) en agents (als user) worden gestart en beheerd in plaats van init of systemd. Verder zijn heel veel macOS-specifieke instellingen en Cocoa-instellingen op de opdrachtregel te managen. Naast bekende commandline tools als shutdown, reboot, kill, su, sudo, halt, syn, uptime en top, zijn er handige tools aan toegevoegd. Zo geeft het commando sudo fs_usage je een overzicht van realtime informatie over het gebruik van het bestandssysteem. Om de Windows Manager van macOS te herstarten gebruik je killall SystemUIServer.
Apple-specifiek
Andere commando’s hebben te maken met het configureren van bijvoorbeeld Finder of Dock. Zo maak je het pictogram van verborgen applicaties in de Dock doorzichtig met defaults write com.apple.Dock showhidden -bool TRUE gevolgd door killall Dock. Om de pictogrammen weer normaal te maken, vervang je True door False. Je hebt toegang tot SpotLight met mdfind, dat zeer uitgebreide zoekmogelijkheden heeft. Back-ups met TimeMachine benader je met tmutil.
Om storingen te debuggen is het mogelijk een rapport te draaien van de gebruikte hardware en software op het systeem. Apple heeft hiervoor de system_profiler gemaakt. Een standaard rapport maak je met system_profiler -detailLevel basic > mijnrapport.txt. Het rapport bevat informatie, zoals serienummer, processor, RAM-geheugenverdeling, USB-gegevens en nog veel meer. Als je system_profiler op een remote mac uitvoert waarop je met ssh bent ingelogd, maak je een gedetailleerd rapport van de Mac op afstand. Mocht je ooit met Apple support bellen voor een storing, Apple zelf heeft nog meer trucs om met commando’s en toetscombinaties diagnostische informatie te genereren. Ook op de commandline.
PureDarwin en meer
Darwin is grotendeels open source maar dat wil niet zeggen dat het draait op niet-Mac’s. PureDarwin (http://www.puredarwin.org), informeel de opvolger van OpenDarwin, moet dat waarmaken. In de praktijk is het zeer lastig. PureDarwin heeft geen Dock, geen Finder en lijkt dus feitelijk niet op macOS. PureDarwin maakt geen Mac van je pc. Er bestaan wel thema’s voor bijvoorbeeld Gnome om je Linux-desktop bij benadering eruit te laten zien als die van de Mac als je dat wilt, kijk maar eens op https://www.gnome-look.org/p/1013490/. KDE-applicaties op je Mac draaien is erg lastig (https://www.kde.org/download) en GNOME-applicaties draaien net zo ingewikkeld. We zien wel dat steeds meer typische Linux-applicaties worden geport naar Cocoa en zo native draaien.
Leuk voor thuis?
macOS is absoluut leuk voor thuis. Het is een hightech, snel en stabiel uitgeëngineerd UNIX-product, goed gedocumenteerd en ondersteund. Met behulp van Xcode, MacPorts, XQuartz voeg je Linux-functionaliteit toe voor softwareontwikkeling en -gebruik. Hoewel macOS gratis is en voor een belangrijk deel uit open source is opgebouwd, draait het formeel alleen op de kostbare Mac’s van Apple. Daardoor wordt het plotseling wat minder leuk voor thuis. Zelfs het instappertje Mac Mini kost nog meer dan €550 zonder scherm. Het topmodel, de Mac Pro kost maar liefst €4.649! Zelfs zakelijk moet je je eens achter de oren krabben of het dat wel waard is, behalve als je bij Disney werkt en films moet renderen. Voor thuis zou je macOS virtueel kunnen draaien op VirtualBox. De performance hiervan valt gruwelijk tegen en het is bovendien niet legaal. Even terzijde, virtueel draaien van macOS op een Mac is wel legaal en is mogelijk met Parallels Desktop Lite (gratis).
Tot slot
Het enige model waar de prijs-kwaliteitsverhouding klopt, is de al wat oudere 13 inch Macbook Air voor €900. Die is dus wel leuk voor thuis. Want de echte hobbyist heeft thuis naast één of meer Windows en Linux pc’s (al dan niet virtueel, kies maar welke), meerdere Linux-Raspberry Pi’s en een Macbook met macOS.