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 editar

O init do Research Unix executava o script shell de inicialização localizado em /etc/rc[1] e depois executava o getty em terminais sob o controle de /etc/ttys.[2] 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.[3] A ordem em que os scripts são executados é determinada pelo script rcorder com base nos requisitos declarados nessas tags.

Outras implementações editar

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.

Referências

  1. «init(8)» (em inglês). . Capítulo 8. Manual da Sétima Edição do Unix.  templatestyles stripmarker character in |título= at position 37 (ajuda)
  2. «ttys(5)» (em inglês). . Capítulo 5. Manual da Sétima Edição do Unix.  templatestyles stripmarker character in |título= at position 37 (ajuda)
  3. Andrew Smallshaw (7 de dezembro de 2009). «Unix and Linux startup scripts, Parte 2» 

Ligações externas editar