# Init

Em sistemas operacionais baseados em Unix, init (abreviação de initialization, em português, inicialização) é o primeiro processo iniciado durante a inicialização do sistema de computador. O init é um processo daemon que continua executando até o sistema ser desligado. Ele é o ancestral direto ou indireto de todos os outros processos e automaticamente adota todos os processos órfãos. O init é iniciado pelo núcleo usando um nome de arquivo codificado de forma rígida. Uma pane do núcleo ocorrerá se o núcleo estiver impossibilitado de iniciar. Normalmente, o identificador de processo 1 é atribuído ao init.
Em sistemas Unix, como o System III e o System V, o projeto do init divergiu da funcionalidade fornecida pelo init nos derivados do Research Unix e BSD. Até recentemente, a maioria das distribuições Linux empregava um init tradicional que é um pouco compatível com o System V, enquanto algumas distribuições, como o Slackware, usam scripts de inicialização no estilo BSD e outras, como o Gentoo, têm suas próprias versões customizadas. O Systemd, inicialmente implementado pelo Fedora, suplantou o init tradicional nas versões mais recentes das distribuições mais usadas.
Diversas implementações de substituição do init foram criadas, tentando resolver as limitações de projeto nas versões padrões. Elas incluem o launchd, o Service Management Facility, o systemd e o Upstart. Desde março de 2015, o systemd foi adotado por várias distribuições Linux importantes, embora permaneça controverso.

## Estilo Research Unix/Estilo BSD

O init do Research Unix executava o script shell de inicialização localizado em /etc/rc e depois executava o getty em terminais sob o controle de /etc/ttys. Não há níveis de execução e o arquivo /etc/rc determina quais programas são executados pelo init. A vantagem deste sistema é que é simples e fácil de editar manualmente. No entanto, novos softwares adicionados ao sistema podem exigir alterações nos arquivos existentes que correm o risco de produzir um sistema não inicializável.
O init do BSD era, antes do 4.3BSD, o mesmo init do Research UNIX. No 4.3BSD, ele adicionou suporte para rodar um sistema de janelas, como o X, em terminais gráficos sob o controle de /etc/ttys. Para remover o requisito de editar o /etc/rc, as variantes do BSD, há muito tempo, suportam um arquivo /etc/rc.local específico de site, que é executado em um sub-shell próximo ao final da seqüência de inicialização.
Um sistema totalmente modular foi introduzido com o NetBSD 1.5 e portado para o FreeBSD 5.0 ​​e sucessores. Este sistema executa scripts no diretório /etc/rc.d. Ao contrário da ordenação de script do System V, que é derivada do nome do arquivo de cada script, este sistema usa tags de dependência explícitas colocadas em cada script. A ordem em que os scripts são executados é determinada pelo script rcorder com base nos requisitos declarados nessas tags.

## Outras implementações

Tradicionalmente, uma das principais desvantagens do init é que ele inicia as tarefas em série, aguardando que cada uma termine o carregamento antes de passar para a próxima. Quando os processos de inicialização terminam bloqueados em entrada/saída (E/S), isso pode resultar em longos atrasos durante a inicialização. Acelerando a E/S, por ex. usando SSDs, pode encurtar os atrasos, mas não resolve a causa raiz.
Vários esforços foram feitos para substituir os daemons de inicialização tradicionais para resolver esse e outros problemas de projeto, incluindo:
* BootScripts no GoboLinux
* boot-scripts
* busybox-init, adequado para sistemas operacionais embarcados, usado pelo OpenWrt antes de ser substituído por procd
* Initng, um substituto completo do init projetado para iniciar processos de forma assíncrona
* launchd, um substituto para o init em Darwin/macOS/iOS/tvOS a partir do Mac OS X v10.4 (lança o SystemStarter para executar processos 'rc.local' estilo antigo e SystemStarter)
* minit
* Mudur, um substituto do init escrito em Python e projetada para iniciar processos de forma assíncrona, em uso pela distribuição Pardus Linux
* OpenRC, um gerador de processos que utiliza o init fornecido pelo sistema, enquanto fornece isolamento do processo, inicialização paralela e dependência de serviço; usado pelo Gentoo e seus derivados e disponível como uma opção no Devuan
* procd é usado no LEDE/OpenWRT
* runit, um substituto completo multiplataforma para o init com o início paralelo de serviços, usado por padrão no Void Linux
* Shepherd, o serviço e gerenciador de daemon do GNU que fornece inicialização assíncrona baseada em dependência; escrito em Guile Scheme e destinado a ser interativamente hackeável durante a operação normal do sistema
* systemd, uma suíte de software que inclui um daemon init e um gerenciador de serviços, entre outras coisas
* SystemStarter, um gerador de processo iniciado pelo init estilo-BSD no Mac OS X antes do Mac OS X v10.4
* svscan from daemontools used as process 1
* Texas Flood Init System
* Upstart, um substituto completo do init projetado para iniciar processos assincronamente iniciados pelo Ubuntu.