Seria um pouco mais rápido em C, mas a escolha da linguagem não é o que mais afeta o desempenho. Geralmente, é mais eficaz executar várias tarefas em paralelo, em vez de esperar que cada uma seja concluída sequencialmente, conforme os sistemas de inicialização mais simples. Por exemplo, sshd e link podem ser iniciados ao mesmo tempo, uma vez que nenhum requer que o outro já esteja em execução.
Não existe uma única "sequência de inicialização do Linux". Cada distribuição tem a sua própria; Não há sequer uma única coisa que todos tenham em comum. pode estar em C, Perl, Haskell, qualquer coisa; o único requisito é que um executável chamado /init
esteja presente no initramfs ou /sbin/init
no sistema de arquivos raiz.
O esquema /etc/rc?.d
é simplesmente uma extensão do processo de inicialização do Unix de 20 anos atrás, talvez até 30 anos. Os primeiros sistemas Unix foram reinicializados muito raramente, então eles teriam um script simples, /etc/rc
ou similar, que seria lançado por init e iniciaria vários daemons sequencialmente.
Até hoje SysV init está sendo usado para iniciar todos esses scripts, embora o método exato possa variar. Originalmente, um sistema iniciaria todos os scripts em /etc/rc?.d
em ordem; atualmente o Debian usa dependências no estilo Makefile.
Algumas distribuições - Ubuntu, Chrome OS, Fedora até a v14 - mudaram para Upstart , que é escrito em C e é "baseado em eventos", permitindo que os daemons sejam iniciados em paralelo. Outro sistema de inicialização, systemd , parece estar crescendo rapidamente em popularidade - ele é usado por padrão em Fedora e OpenSuSE. Ele também é escrito em C. (Ambos os sistemas ainda lêem arquivos de configuração textual para decidir quais daemons devem ser iniciados.)
AsdistribuiçõesquecontinuamcomoSysVinitnormalmentefazemissopor"simplicidade"; os argumentos mais comumente ouvidos parecem ser sobre scripts de shell sendo mais fáceis de manter do que o código C equivalente (embora esses scripts de shell consistam em 90% de copypasta), assim como um medo mortal de introduzir Dependências adicionais da biblioteca [subjectiva] . Você pode ver por si mesmo em este , este , this e this tópicos de discussão na lista de discussão do Debian de maio de 2012.
(Disclaimer: Eu sou um usuário systemd eu mesmo.)