# Init

Op Unix-gebaseerde besturingssystemen is init (afkorting van initialisatie) het eerste proces dat gestart wordt tijdens de opstartprocedure. Init is een daemon die blijft draaien tot het systeem afgesloten wordt. Init regelt het opstarten van processen in de juiste volgorde, zodat er een werkend, opgestart computersysteem verkregen wordt. Dit wordt gerealiseerd door scripts op te starten of gebruik te maken van services. Shellscripts en services zijn bestanden met instructies welk proces er moet gestart worden. In het geval van services wordt er gespecifieerd wat vereist is om het proces te kunnen opstarten (bijvoorbeeld een netwerkverbinding).
Init is de directe of indirecte ouder van alle andere processen die gestart worden. Ook worden processen die niet langer een rechtstreekse ouder hebben ("zombieprocessen"), automatisch onder init geplaatst in de boomstructuur van processen. Init wordt gestart door de kernel met een vaste bestandsnaam. Als het initproces niet gestart kan worden door de kernel, dan zal er een kernel panic (crash) optreden. Init krijgt vaak de procesidentifier (PID) 1.

## Traditionele initsystemen

In Unix-systemen zoals System III en System V wijkt het design en de functionaliteit af van init in Research Unix en BSD-afgeleidden. De traditionele initsystemen voor Linux zijn enigszins compatibel met System V. Sommige distributies zoals Slackware gebruiken BSD-achtige opstartscripts en anderen zoals Gentoo Linux gebruiken dan weer hun eigen versies (OpenRC voor Gentoo).

## Nood aan alternatieve init-implementaties

Er zijn verschillende alternatieve init-implementaties ontwikkeld om designproblemen in standaardversies op te lossen. Enkele designproblemen:
* Netwerk: er worden processen gestart die een netwerkverbinding vereisen, terwijl er nog geen netwerkverbinding voorhanden is.
* Synchroon opstarten: traditionele initsystemen starten doorgaans alle processen achter elkaar op, terwijl het sneller is om meerdere processen tegelijk te starten (vanwege schijftoegang, processorbelasting en netwerkbeperkingen).
* Opstartsnelheid van shellomgeving: de snelheid waarmee Bash (of een andere shell) opstart is niet verwaarloosbaar als er meerdere scripts moeten uitgevoerd worden.
* Onoverzichtelijkheid: een combinatie van scripts die in een bepaalde volgorde opgestart moeten worden, zijn moeilijker te onderhouden dan service-gebaseerde oplossingen waar het initsysteem de afhankelijkheden regelt.
Om deze nadelen op te lossen, werden er alternatieve initsystemen ontwikkeld. Voorbeelden van alternatieve initsystemen zijn launchd (Apple voor OS X), de Service Management Facility (Sun voor Solaris), systemd (voor Linux) en Upstart (Canonical voor Ubuntu). Anno 2016 wordt systemd door de meeste Linuxdistributies gebruikt, hoewel het controversieel blijft (zie het artikel van systemd).

## Vervangingen voor init

* BootScripts, gebruikt door GoboLinux.
* busybox-init, geschikt voor embedded toepassingen. OpenWrt gebruikte dit voordat werd overgestapt op procd.
* DEMONS, een aanpassing van het initproces gebruikt in KahelOS, waarbij daemons alleen gestart worden als de desktopomgeving start.
* eINIT, een volledige vervanging van init die processen asynchroon start, maar met een mogelijkheid om geen shellscripts te vereisen.
* Epoch, een singlethreaded initsysteem voor Linux. De focus ligt op eenvoudigheid en op servicemanagement.
* Initng, een volledige vervanging van init die processen asynchroon start
* launchd, een vervanging voor init in Darwin OS/OS X/iOS/TvOS vanaf Mac OS X 10.4 (het start ook SystemStarter om oude 'rc.local' en SystemStarter-processen te starten)
* Mudur, een vervanging voor init geschreven in Python die processen asynchroon start. Wordt gebruikt door Pardus.
* nosh, een verzameling van systeemgereedschappen voor het initialiseren en uitvoeren van een BSD- of Linuxsysteem. Beheert daemons, terminals en logging.
* OpenRC, een processtarter die een voorzien initsysteem gebruikt om op te starten. Voorziet procesisolatie, parallelle opstart en service-afhankelijkheid. Wordt gebruikt op Gentoo en afgeleidden.
* procd, een OpenWrt-procesmanager geschreven in C. Maakt gebruik van initscripts (via ubus-aanroepen). Dubbele aanvragen om een service te starten of te herstarten worden genegeerd wanneer de omgeving en configuratie niet veranderd is.
* runit, een multiplatform-initsysteem die parallelle opstart van services voorziet. Wordt gebruikt in Void Linux.
* s6, een multiplatform initsysteem, gelijkaardig aan runit
* Service Management Facility, een volledige vervanging en herontwerp van init. Wordt gebruikt in Illumos/Solaris vanaf Solaris 10. Het traditioneel initsysteem (System V-stijl) start de Service Management Facility als enige service.
* Shepherd (voorheen dmd), een vervanging voor init gemaakt door GNU die service-afhankelijkheid kent.
* systemd, een volledige vervanging voor init in Linux met gelijktijdig opstarten van services. Wordt gebruikt door veelgebruikte Linuxdistributies.
* SystemStarter, een processtarter, die gestart werd door een init in BSD-stijl voor Mac OS X 10.4.
* Upstart, een volledige vervanging van init die processen asynchroon start. Ontwikkeld door Canonical en gebruikt in Ubuntu en afgeleidden, totdat het vervangen werd door systemd.