16 pontos por GN⁺ 2023-08-13 | 2 comentários | Compartilhar no WhatsApp
  • O kernel Linux é um enorme projeto open source com 36 milhões de linhas, mas a primeira versão tinha 10.239 linhas (8.670 excluindo comentários e linhas em branco)
  • O Linux v0.01, por sua simplicidade, é um ótimo ponto de partida para aprender o funcionamento interno de um kernel de SO no estilo Unix
  • O v0.01 tinha apenas 66 chamadas de sistema
    • criação, remoção e escrita de arquivos/diretórios
    • chmod, chown, pipe, fork, execve
    • Como o conceito de socket ainda não havia sido introduzido, não havia suporte a rede
    • mount ainda não estava implementado
  • Era codificado de forma rígida para a arquitetura Intel 386 (o autor do MINIX criticou isso)
    • strcpy foi escrita em assembly usando instruções do i386
  • Suportava apenas dispositivos PC/AT
    • CMOS, PIT (Programmable Interval Timer), ATA (PIO), VGA (modo texto), teclado Intel 8042 PS2 (assembly)
    • Ainda não existia uma pasta drivers, e tudo ficava hardcoded nos subsistemas
  • Há um comentário no Makefile com o nome original pensado por Linus: "FREAX" Kernel
  • O sistema de arquivos suportava apenas MINIX (ext foi inspirado no MINIX)
  • No código do escalonador há um comentário dizendo: "esta parte é um código muito bom que funcionará em qualquer ambiente, então não haverá motivo para mudá-la!"
    • Claro que, com várias melhorias e algoritmos introduzidos depois, essa previsão estava errada
  • A implementação de kernel panic tem apenas 5 linhas: imprime "kernel panic: causa" e interrompe o sistema com for(;;)
  • Há uma parte no espaço do kernel que parece chamar fork(2)
    • Mas, embora pareça, na verdade o truque é o move_to_user_mode() logo antes
  • Linus não tinha nenhuma máquina com mais de 8 MB de RAM (como ele mesmo não tinha para testar, disse para quem tivesse tentar por conta própria...)
  • É difícil compilar com toolchains modernas
    • O GCC mantém compatibilidade retroativa, mas isso não é suficiente
    • Linus tinha sua própria versão do GCC com uma opção chamada -mstring-insns (provavelmente para suportar instruções de string do x86)

2 comentários

 
arfwene 2023-10-31

Interessante.

 
GN⁺ 2023-08-13
Comentários do Hacker News
  • Discussão sobre a complexidade do Linux moderno, levantando a questão de se a complexidade, 4500 vezes maior que o número de linhas de código do Linux v0.01, é realmente necessária.
  • Leitores gostariam de ver uma análise gráfica do número de linhas de código e das funcionalidades usadas em cada módulo principal de software do Linux.
  • É sugerido ler bases de código clássicas como Linux, SQLite e vim, que em sua maioria foram escritas por uma única pessoa e foram muito bem-sucedidas ou influentes.
  • Explicação sobre como o counter do Linux funciona, com a afirmação de que ele diminui exponencialmente até 2 * prioridade quando a tarefa não está executável.
  • Relato de que a Redhat enviou aos acionistas, na época do IPO, um pôster contendo o código-fonte 0.01, algo que os leitores acham interessante revisitar de vez em quando.
  • Discussão sobre a retrocompatibilidade do GCC (GNU Compiler Collection), incluindo um comentário de que o GCC por muito tempo não conseguia compilar suas próprias versões anteriores.
  • Leitores são direcionados ao Linux Kernel Source Code amplamente comentado para ler e obter uma compreensão mais profunda.
  • Sugestão de que ler a primeira versão funcional de grandes projetos de sucesso como o Linux é uma boa forma de entender, pois normalmente inclui apenas as funcionalidades centrais mais importantes, sem muitas abstrações/generalizações.
  • Alguns leitores notaram o uso de espaços em vez de tabs no código, especulando que Torvalds pode ter se tornado defensor de tabs mais tarde.
  • A profundidade e a frequência dos comentários no código são reconhecidas, tornando-o mais acessível aos leitores, e há curiosidade sobre se alguém conseguiu compilá-lo.