Quando você precisa realmente saber como as APIs do Linux funcionam
A maior parte dos desenvolvedores que trabalham com Linux usa syscalls todos os dias e nem sabe. Eles chamam funções da libc sem jamais olhar para baixo. Isso funciona bem até o sistema começar a se comportar de maneira estranha, ou até você precisar depurar algo que envolve file descriptors, sinais, ou memória compartilhada. O livro do Michael Kerrisk, completado em 2010 e atualizado periodicamente, cobre praticamente tudo. Desde as chamadas de sistema mais básicas até namespace, cgroups, e o novo sistema de memória hugetlbfs. É uma referência, mas ler como um tutorial linear é perda de tempo. Eu li os capítulos sobre pipes e FIFOs porque estava tentando resolver um problema de dead-lock entre dois processos que eu tinha escrito, e foi aí que percebi o quanto meu entendimento era superficial.
O que o linux programming interface book realmente oferece
Cada syscall é explicada com a assinatura da função, os códigos de erro mais comuns, exemplos de código compiláveis e a explicação do que acontece no kernel. Os exemplos são cuidadosamente construídos para rodar em sistemas modernos. O Kerrisk também mostra alternativas glibc versus syscall direto, o que é importante quando você precisa de controle fino. O capítulo sobre IPC (System V messages, shared memory, semáforos) é especialmente útil. A maioria dos tutoriais online trata esses tópicos de forma incompleta. Aqui você vê o comportamento real quando dois processos tentam acessar a mesma região de memória e um deles morre antes de liberar o recurso.
Eu tive um problema específico com shm_open e unlink que me fez passar duas horas debugando. O processo pai criava o segmento compartilhado, o filho usava, e ao finalizar, o unlink era chamado antes do close. O filho simplesmente via a região desaparecer. A solução foi garantir que o close() acontecesse antes do unlink, ou usar um contador de referência adequado. O livro aborda isso no capítulo de memória compartilhada POSIX, mas apenas se você parar para ler.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Como usar o material de forma prática
Você não precisa comprar o livro físico. A versão online pode ser acessada gratuitamente no site do autor. O conteúdo é o mesmo, com atualizações mais recentes do que a edição impressa de 2010. O download do site oficial é gratuito e legal. Não há motivo para procurar torrents ou PDFs pirateados. Para tirar proveito, siga esta sequência: primeiro, entenda como a libc se traduz para syscalls. Use strace nos seus programas. Depois, consulte o livro quando encontrar algo que não consegue entender pelo strace. Por exemplo, se um open() retorna EACCES em um arquivo que você acha que tem permissão, o livro explica os mecanismos de DAC, SELinux, e capabilities que podem estar interferindo.
Os exercícios no final de cada capítulo são úteis, mas muitos são deliberadamente obscuros. Eu levei cerca de três horas para resolver o exercício 8-4 sobre pipe duplo porque o Kerrisk assume que você já entende como o kernel gerencia os file descriptors em fork(). Sem esse conhecimento prévio, você fica travado.
O que o livro não cobre bem
A principal limitação é que ele não entra em detalhes sobre os novos recursos adicionados após 2010. Namespace de rede, o sistema de bpf(), e as melhorias em io_uring não estão presentes. Se você precisa desses tópicos, vai precisar consultar a documentação oficial do kernel e artigos recentes. Outro ponto: o livro foca em sistemas POSIX tradicionais. Programação assíncrona com epoll e io_uring recebe atenção mínima. Para projetos modernos de alta concorrência, considere complementar com "Advanced Programming in the UNIX Environment" do Stevens e Raggett, ou documentação específica do io_uring.
Eu tentei usar uma técnica descrita no livro para otimizar E/S com readv/writev em um serviço de rede, e os resultados foram piores do que o esperado. O overhead de montar os iovec structures em alta frequência mostrou-se maior do que simplesmente escrever dados diretamente. O livro não menciona essa limitação prática. Às vezes, a teoria do kernel não se traduz diretamente em performance no mundo real. Se você trabalha com Linux e quer entender o que acontece por baixo da libc, o livro do Kerrisk continua sendo a referência mais completa disponível. Não espere que ele resolva todos os seus problemas, mas espere que ele te dê as ferramentas para entendê-los.