Introdução

Este mdbook está sendo desenvolvido com o propósito de me ajudar e ajudar outras pessoas interessadas no tema OS (Operational Systems, Sistemas Operacionais) e Linux, sendo mais preciso o gentoo, este livro terá minhas anotações e minha trajetória no tema, eu pretendo aprender sobre Arch Linux, Void Linux e Gentoo Linux.

Por quê essas distros?

Eu acredito que essas distribuições linux tenham tudo que preciso para que eu possa estudar e entender sobre OS e me aprofundar no mundo linux.

Claro que isso não foi um ótimo motivo, no entando meu pensamento sobre essas distros é ir da mais "fácil" até a mais difícil.

Minha trágetoria será a seguinte:

Estudar a base sobre OS -> Arch Linux (opcional) -> Void Linux -> Gentoo Linux

O que eu espero dessas distros?

  • Arch Linux: Aprender a instalar do zero, desde o particionamento dos discos até a instalação da interface gráfica.

  • Void Linux: Usar um sistema sem systemD, usando runit, sem abstrações pesadas.

  • Gentoo Linux: Aprender sobre compilação, useflags, montar a toolchain.

Materiais

Eu irei tentar adicionar aqui a maioria dos vídeos, artigos, etc que eu encontrar.

Vídeos:

Documentação:

Wiki:

Livros:

Sistemas Operacionais

O que é?

Em poucas palavras um Sistema Operacional é um programa que atua entre o usuário e o hardware. Seu propósito é fornecer um ambiente no qual o usuário possa executar programas.

Ele foi desenvolvido com o propósito de facilitar o uso do hardware.

Uma visão simples:

Representação
Usuário
⬇️
Programas, aplicativos, etc
⬇️
Sistema Operacional
⬇️
Hardware

O Hardware - a unidade central de processamento (CPU, Central Processing Unit, vulgo processador), a memória RAM (Random Access Memory) e os dispositivos de entrada e saída (I/O, Input/Output) - fornecem recursos básicos de computação.

Os softwares como: navegadores web, compiladores, processadores de texto, etc - definem as maneiras em que esses recursos são usados. O Sistema Operacional controla e coordena o uso desses recursos.

Este é o papel do kernel (Núcleo de um Sistema Operacional) que irei falar dele mais para frente.

Exemplos de Sistemas Operacionais

Sistemas em lote (batch) PT.1

Antigamente as computadores eram máquinas exageradamente grandes e eram operadas por um console. Os dispositivos de entrada comuns eram leitores de cartões e unidades de fita, os dispositivos de saída eram impressoras de linhas, unidades de fita e perfuradores de cartões.

O usuário não interagia diretamente com a máquina. Em vez disso ele preparava um job (tarefa) para que o computador executasse.

O Sistema Operacional nessa época era bem simples, sua principal função era transmitir o controle de um job para o seguinte. Os operadores começaram a agrupar jobs com necessidades parecidas para os executar em grupo ou batch, aceleando o processamento e se tornando mais eficiênte, na teoria...

Exemplo em Go:

type Writer interface {
	Write()
}

type Job1 struct {}

type Job2 struct {}

func (Job1) Write() {
	// escreve...
}

func (Job2) Write() {
	// escreve...
}
// passa os jobs para que o OS execute
func OS(jobs ...Writer) {
	// executa cada job passado
	for _, job := range jobs {
		Execute(job)
	}
}

Aqui basicamente Job1 e Job2 são tarefas a serem executadas tendo suas funções Write(), a interface chamada Writer define que se um objeto tiver a função Write() ele será um Writer, nesse caso o Sistema Operacional está sendo representado como uma função OS() e ela pode receber inúmeros jobs com as mesmas características, no final cada jobs é executado um por vez.

Exercendo essa prática as CPUs ficavam ociosas pelo fato de que os dispositivos mecânicos (I/O nesse caso) eram extremamente mais lentos do que os dispositivos eletrônicos (CPU). Mesmo uma CPU lenda ainda sim era capaz de executar milhões de instruções por segundo.

Com os avanços tecnológicos e melhorias resultou em dispositivos I/O mais rápidos, porém a velocidade das CPUs também aumentaram, com isso o problema não só não foi resolvido mas também foi exarcebado.

A Chegada dos Discos

A chegada dos discos permitiu com que o sistema operacional pudesse manter os jobs em disco, antes ficava em uma leitora de cartões serial¹. Com isso o escalonamento de jobs² poderia ser usado para realizar tarefas de forma mais eficiente.

Por falar em eficiência, o aspecto mais importante do escalonamento de jobs é a capacidade de multiprogramação.

Um único usuário não pode, na maioria dos casos, manter a CPU ou os dois dispositivos I/O ocupados em todos os momentos. A multiprogramação aumenta a utilização da CPU organizando os jobs de forma que a CPU sempre tenha um job para executar, consequêntemente evitando de deixar a CPU ociosa.

Representação
Sistema Operacional
⬆️
Job 1
⬆️
Job 2
⬆️
Job 3
⬆️
Job 4
⬆️
Job 5
  1. Dispositivo de entrada usado para ler cartões perfurados e enviar os dados ao computador por uma interface serial.

  2. Processo de decidir a ordem, momento e quanto tempo cada job vai usar os recursos do sistema.

Sistemas de Tempo Compartilhado

Experiência Com o Void Linux

Entrando no site oficial do void linux na parte de downloads já me deparei com os tipos de ISOs disponíveis, eu irei instalar para a arquitetura x86_64.

Temos as seguintes opções:

  • Base:

      1. live image com glibc
      1. live imagem com musl
      1. rootfs tarball com glibc
      1. rootfs tarball com musl
  • xfce:

    • live image com glibc
    • live image com musl

Explicação:

Eu vou abordar aqui uma visão mais conceitual sobre cada uma das bibliotecas (glibc e musl)

Base:

Vem com a base do sistema pronta e sem interface gráfica, a ISO com glibc significa GNU C library que é uma das bibliotecas padrão no mundo linux, quando seus programas rodam eles não falam diretamente com o kernel mas sim através de uma Biblioteca Padrão a libc, que é uma camada intermediária entre o kernel e seus programas.

A libc é um conjunto de funções que todo programa em C e outras linguagens utilizam para executar certas coisas como:

  • Abrir arquivos(fopen)
  • Escrever na tela(printf)
  • Alocar memória(malloc)
  • Criar threads(pthread_create)
  • Fazer requisições de redes(socket)

Funciona como uma "ponte" entre seus programas/softwares e o kernel, quando um programa chama um printf a lib processa e vê se é necessário executar uma chamada de kernel para aquela operação.

Resumindo: A libc é o tradutor universal que todo programa usa para pedir coisas ao sistema operacional.


Tá, já tive uma visão bem rasa do que é uma libc, mas e a glibc e musl?

GNU LIB C (glibc)

A glibc como já dito anteriormente é uma libc, porém desenvolvida pela GNU e é uma das bibliotecas padrão de C mais usadas em distros linux (Exemplo: Debian, Fedora, Ubuntu, Mint, etc).

Ela prioriza compatibilidade e desempenho entre os desktops/servidores, implementa muitas extenções além dos padrões (extenções da GNU), e seu alocador de memória é muito otimizado para programas com muitas threads, porém a glibc é mais pesada que a musl fazendo com que ela ocupe mais espaço na RAM e em Disco, seu código por ser antigo sendo assim mais difícil de ler.

MUSL

Musl é uma lib moderna, criada para ser simples e eficiênte, ela evita complexidade tendo suas funções implementadas de forma minimalista, seus pontos fortes é ser bem leve consumindo pouca RAM, como o seu código é simples isso facilita a correção de bugs e melhorias, e também o que eu achei interessante foi que o seu alocador de memória tem proteções contra ataques de heap.

Por ser uma lib nova não existem suportes oficiais e isso causa uma falta de compatibilidade com alguns softwares e drivers, falta de suporte para outros idiomas e seu desempenho em alocações de memória pode daixar a desejar em casos de muita concorrência entre threads.

Instalei o void

No dia 29/01/2026 vulgo ontem me deu uma vontade de experimentar algo completamente novo (mesmo que uns dias atras eu estava iniciando no VIM, inclusive eu estou escrevendo esse capitulo nele) entao eu baixei a ISO do void xfce com glibc e fui instalar removendo o fedora da minha particao.

A instalacao foi bem facil por que eu usei o void-installer e utilizei como apoio esse video e a ajuda do deepseek.

Adimito que isso nao foi uma bela instalacao, e por consequencia de eu nao saber configurar uma distro na mao eu estou passando por algumas dificuldades aqui como por exemplo ter que aumentar e diminuir o volume do computador entrando no controle de volume e tambem descobri que o bluetooth nao eh magica, eu tive que instalar um pacote para o bluetooth funcionar e mesmo assim ele nao reproduz o som mesmo estando conectado.

Enfim sao alguns problemas de uma pessoa que resolveu por a mao em um lugar obscuro saindo completamente da zona de conforto, queria pedir desculpas por estar escrevendo em acento pois o meu teclado ta como padrao US e to com preguica de ficar mudando para pt-br.

Por falar em zona de conforto eu nao estou feliz aqui... porem mesmo assim eu quero ficar uma ou duas semanas nessa distro so para que eu sinta o gostinho de algo mais puro.