Michael Kerrisk The Linux Programming Interface - The Linux Programming Interface | Michael Kerrisk | Second Edition ...
The Linux Programming Interface | Michael Kerrisk | Second Edition ...

O único livro que realmente funciona

Se você trabalha com Linux há algum tempo, já se deparou com a man page que explica uma chamada de sistema, mas não mostra como ela falha na prática. O livro que responde a essa lacuna é o michael kerrisk the linux programming interface, publicado pela No Starch Press, e ele ocupa um espaço que nenhum tutorial da internet preenche direito.

Por que esse livro existe

Kerrisk é o mantenedor das man pages do projeto man-pages-lng. Ele escreveu esse livro porque percebeu algo simples: as páginas de manual são referências técnicas precisas, mas não ensinam programação. O livro cobre mais de oitocentas páginas de sistemas, começando por construção de programas, passando por arquivos, E/S, sinais, processos, threads, IPC, e terminando com sockets e redes. A abordagem é consistentemente prática. Cada capítulo termina com exemplos de código que você pode compilar e rodar. Eu tive esse livro em cima da mesa enquanto debuggingava um programa C que lia arquivos de configuração via getrlimit. A man page dizia que RLIMIT_NOFILE controlava o número máximo de descritores de arquivo abertos. O código funcionava em development, mas em produção os filhos do daemon travavam abrindo arquivos após 1024 conexões simultâneas. O livro mostra como usar getrlimit e setrlimit corretamente, incluindo a diferença entre soft limit e hard limit. A solução era chamar setrlimit antes de fazer fork, senão os filhos herdam os valores e não conseguem elevá-los depois. Isso leva dois minutos no livro, semanas de google e stack overflow sem ele.

O que não está no livro

O livro é um guia de referência sistemático, não uma introdução. Se você nunca abriu um terminal ou não sabe a diferença entre compilar com gcc e executar, não é o livro certo para começar. Ele assume familiaridade com C, compilação em linha de comando e navegação pelo sistema de arquivos do Linux. A versão mais recente é a de 2010. O conteúdo técnico permanece válido porque as chamadas de sistema do kernel Linux mudam muito devagar. No entanto, algumas áreas ficaram desatualizadas. O capítulo sobre threads cobre POSIX threads (pthreads), que ainda são o padrão, mas não menciona io_uring ou as novas interfaces de E/S assíncrona do kernel 5.x+. Para threads, pthreads continua sendo a escolha certa na maioria dos casos. Para E/S de alta performance em produção, vale estudar io_uring separadamente.

O livro também não entra em containers, namespaces ou cgroups. Se o seu objetivo é entender como Docker funciona por baixo dos panos, isso exige leitura complementar. Os conceitos de processo e namespace são mencionados, mas não de forma profunda.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Como usar o livro na prática

Não leia de capa a capa. Abra no capítulo que corresponde ao problema atual. O índice remissivo é extenso e preciso. Procure pelo nome da função que você precisa. O livro dá o protótipo completo, os valores de retorno em sucesso e erro, e exemplos compiláveis. Compile os exemplos. Copie, cole, rode. A primeira vez que você vê um buffer de leitura de arquivo sendo gerenciado manualmente com read e write em vez de fopen, a diferença entre buffered e unbuffered I/O deixa de ser abstração e vira algo que você pode observar. Eu fiz isso com o exemplo de copiar arquivos com open/read/write. A versão com fopen foi cerca de 40% mais lenta num arquivo de 2GB num disco SSD SATA. A versão manual usava um buffer de 64KB e chamadas de sistema diretas. A diferença ficou clara sem precisar de ferramentas de profiling complexas.

O livro também cobre sinais de forma mais completa que qualquer documentação online. A maioria dos programadores ignora a parte de handlers assíncronos e acaba cometendo o erro clássico de chamar funções não reentrantes dentro de um signal handler. O livro explica exatamente por que perror e malloc não são sinal-safe. Eu já perdi metade de um dia de trabalho num servidor de produção porque um handler de SIGTERM chamava uma função de logging que usava mutex interno. O mutex travava e o processo entrava em deadlock. A correção foi simples: substituir a chamada por write() direto no handler, como o próprio livro recomenda no capítulo de sinais.

Versão online e acesso gratuito

A versão impressa é vendida pela No Starch Press. O autor disponibiliza o manuscrito completo gratuitamente no site man7.org/lpi. Isso é incomum para um livro técnico desse porte. Você pode ler online, baixar em PDF, ou comprar o exemplar físico se preferir anotar nos margens. O conteúdo online é praticamente idêntico ao impresso, com exceção de algumas figuras e diagramas que ganham qualidade adicional na versão impressa. Para códigos-fonte, o repositório oficial com todos os exemplos está em github.com/mkerrisk007/linux-programming-interface.

Limitações reais

Alguns leitores esperam encontrar exemplos de bibliotecas de alto nível. O livro não cobre libc adicional além do essencial, não menciona Qt, GTK, nem frameworks modernos. É um livro sobre o kernel e a API de sistema, não sobre desenvolvimento de aplicações. Se você quer construir uma GUI, esse não é o caminho. Outro ponto: o livro usa a arquitetura x86_64 nos exemplos. Em ARM, RISC-V ou s390x, algumas chamadas de sistema ou estruturas podem ter ligeiras diferenças. Para a maioria dos casos o código funciona, mas em ambientes embedded ou em servidores ARM, vale testar os exemplos antes de confiar cegamente.

Existe também um gap enorme em segurança. O livro fala sobre permissões de arquivo e setuid, mas não entra em SELinux, AppArmor, capabilities, ou ataques de side-channel. Para quem desenvolve software crítico em segurança, esses tópicos são obrigatórios e ficam fora do escopo. O livro de Michael Kerrisk é essencial para quem programa em C no Linux. Ele não é perfeito. Não cobre tópicos modernos como containers, io_uring, ou segurança avançada. Mas para entender como o Linux funciona por baixo do capô, ele continua sendo a referência mais completa disponível em qualquer idioma.