Fundamentos de computação

O que é Linux?

A resposta mais simples e correta para esta pergunta pode ser:

Linux é um kernel de código livre criado em 1991 por Linus Torvalds, que segue o padrão POSIX

No entanto, esta resposta não satisfaz a curiosidade de quem não sabe:

  • O que é um kernel?
  • O que é código livre?
  • O que é POSIX?
  • O que o nome Linux significa?
  • Por que o Linux é tão popular?

E eu pretendo responder a tudo isso nesta primeira aula.

Parte I - UNIX, o antepassado do LINUX

Antes que você possa responder o que é Linux, é preciso conhecer o POSIX, que nasceu por consequência do UNIX. O UNIX é o sistema operacional antepassado do Linux, no qual o Linux foi (indiretamente) baseado.

Sistema Operacional UNIX

  • Em 1969, foi concebido um sistema operacional chamado UNIX
  • Dentro do Bell Labs
  • Por Ken Thompson, Dennis Ritchie e outros
  • Foi licenciado comercialmente por diversas empresas, gerando múltiplas versões diferentes do Unix
  • Originalmente desenvolvido em linguagem Assembly
  • Diz a lenda que Ken Thompson escreveu a primeira versão do Unix em 3 semanas
Ken Thompson e Dennis Ritchie trabalhando em um PDP-11
Imagem: Thompson e Ritchie trabalhando em um “microcomputador” PDP-11

Sistema de arquivos do UNIX

  • O UNIX nasceu originalmente como um simples sistema de arquivos para o PDP-7, desenvolvido por Ken Thompson
  • Árvore de diretórios
  • Para navegar no sistema de arquivos, utiliza-se comandos como ls, pwd e cd
Diagrama do sistema de arquivos do UNIX
Fonte: The Design of the UNIX Operating System (BACH, 1986)

Características do UNIX

  • Multi-user e multiprocess
  • Sistema de arquivos (filesystem) com diretórios
  • Arquivos especiais (/dev/*)
  • Árvore de processos (fork)
  • Redirecionamento de I/O <, > e Pipe |
  • Separadores de comandos (; e &)
  • Sistema init
  • System Calls
  • Traps (Core dump, interrupt, quit)

Programas inclusos no UNIX

  • Editor de texto ed
  • Assembler as
  • make
  • Shell UNIX sh
  • Utilitários - desde básicos como cd, ls, cp, grep, find, até gerenciais como passwd, kill, ps
  • mail - nas versões iniciais, funcionava apenas para troca de mensagens entre usuários de um mesmo computador
  • man - manual
  • Compilador C cc (a partir de 1973)
  • Jogos como xadrez e blackjack

A Linguagem de Programação C

  • Em 1971, Ken Thompson, um dos criadores do Unix, iniciou o desenvolvimento de um compilador da linguagem Fortran para o Unix;
  • Este projeto acabou se transformando na linguagem chamada “B”;
  • Então, Ritchie juntou-se com outro pesquisador do Bell Labs, Brian Kernighan, e desenvolveu a evolução da linguagem B, que foi denominada “C”.
Livro sobre a linguagem C
Fonte: YouTube (The Math Sorcerer - The Most Famous Computer Programming Book In The World)

A era “C”

  • Os pesquisadores do Bell Labs refizeram todo o código do Unix na linguagem C
  • Isso permitiu a portabilidade do sistema para múltiplas arquiteturas
  • Antes o Unix era somente compatível com os computadores PDP-7, PDP-9 e PDP-11
  • Além disso, o Unix passou a contar com um compilador C (cc)
  • No total, foram 2 anos de desenvolvimento até esta versão do Unix
  • Em 1977, o número de sistemas Unix instalados era de aproximadamente 500
  • 125 desses estavam em universidades

Diferentes versões do UNIX

A partir do momento que o código do Unix foi reescrito em C, sua popularidade aumentou exponencialmente. Em 1984, haviam 100,000 instalações UNIX em todo o mundo. E com essa nova versão, vieram também outras distribuições licenciadas do Unix, tais como:

  • System V (AT&T)
  • University of California, Berkeley (BSD)
  • Microsoft (Xenix)
  • Sun Microsystems (SunOS/Solaris)
  • HP/HPE (HP-UX)
  • IBM (AIX)

5 anos depois, em 1989, haviam 1.2 milhões de instalações.

Parte II - O que é o Kernel?

O Kernel é a parte mais central de todo sistema operacional. Uma possível tradução de “Kernel” é “núcleo”, ou então “centro”. O Kernel realiza as ações mais primitivas de um sistema, e o Unix já possuía um Kernel.

Estrutura do Sistema Operacional UNIX

No Unix, o Kernel assume funções como:

  • Gerenciamento de processos
  • Leitura e escrita de arquivos
  • Controlar discos rígidos e dispositivos periféricos (teclado, monitor, impressora, discos)
  • Alocação de memória RAM aos processos
Diagrama da estrutura do sistema operacional UNIX
Fonte: The Design of the UNIX Operating System (BACH, 1986)

Syscalls - chamadas de sistema

  • Em volta do Kernel, há o shell sh, que foi chamado assim por ser como uma “casca” do Kernel.
  • O shell tem como função executar comandos e programas de maneira interativa.
  • Quando o shell e outros programas necessitam executar ações privilegiadas, estes devem solicitar ao Kernel.
  • Essa solicitação é denominada System call ou simplesmente Syscall.
  • O Kernel então executa a ação solicitada e retorna o resultado ao programa que fez a chamada.

Por exemplo, suponha que você deseja ler o conteúdo de um arquivo chamado “report.txt” em um editor de texto. O seu editor não possui permissão para ler o arquivo do disco rígido. Para isso, ele deve solicitar ao Kernel que abra o arquivo com a syscall open. Logo, os programas de computador dependem do Kernel para funcionarem.

O padrão POSIX

  • A fim de padronizar os sistemas UNIX, foi definido o padrão IEEE 1003.
  • Esse padrão foi denominado POSIX, que significa Portable Operating System com o sufixo “IX”, herdado do UNIX.
  • O POSIX determinou partes fundamentais do sistema operacional, tais como:
    • como as syscalls devem ser implementadas
    • como utilitários como grep, ls e sed devem se comportar
    • formato de arquivos e estrutura de diretórios
    • conjunto de caracteres, localização e variáveis de ambiente
    • expressões regulares (regex)
    • dispositivos de entrada e saída
  • Os sistemas compatíveis com o POSIX devem seguir essa especificação à risca.

Parte III - O projeto GNU e a Free Software Foundation

Com o padrão POSIX definido, quase todas as peças estavam se encaixando para que o Linux nascesse. Porém, um ator revolucionário ainda entraria em cena para mudar a história.

“Free Unix!”

  • Em 1983, o cientista do MIT Richard Stallman anunciou que estava trabalhando em um sistema operacional totalmente compatível com o Unix, chamado GNU (Gnu’s Not Unix).
  • Compatível com o UNIX = POSIX
  • O GNU seria um Kernel + todas as utilidades necessárias para programar em C
    • compilador C
    • editor de texto
    • shell
    • linker e assembler
  • Além disso, o GNU seria compatível com os programas já existentes feitos para o Unix
  • E ainda propôs melhorias, como nomes de arquivos mais longos
  • Stallman havia participado da criação do padrão POSIX (e inclusive cunhou o nome POSIX)
  • Para contextualizar, nessa época a Internet ainda não existia
Veja também: anúncio inicial do projeto GNU

Free Software Foundation

Para que o GNU pudesse ser verdadeiramente livre para todos, Stallman precisou criar uma licença “copyleft”, chamada GPL (GNU General Public License). A GPL define que o software disponibilizado sob esta licença é completamente gratuito e sua distribuição deve ser livre. Mas talvez o ponto mais importante de todos seja este: o software livre pode ser modificado por qualquer pessoa, e até mesmo redistribuido - contanto que esta nova versão seja também tão livre quanto.

Richard Stallman jovem
O jovem Richard Stallman. Fonte: Google

Parte IV - Linus

  • Em 1991, o estudante da universidade de Helsinki Linus Torvalds adquire um computador Intel 80386 (i386)
  • O processador executava na frequência 12.5 MHz
  • 10x mais rápido que o PDP-11, que executava em 1.25 MHz
  • Linus começou a brincar com seu 80386 escrevendo pequenos programas
Linus Torvalds
Linus Torvalds. Fonte: github.com/torvalds

MINIX

  • Livro “Operating Systems Design and Implementation” de Andrew S. Tanembaum (1988)
  • O minix foi criado para o aprendizado de programação, com fins didáticos
  • Era um Kernel simples + alguns utilitários mais básicos
  • Linus começou a utilizar o minix em seu 80386
  • No entanto, alguns recursos do minix traziam insatisfação para Linus, em especial o seu emulador de terminal

Linux

  • Partindo deste princípio, Linus iniciou o desenvolvimento de um emulador de terminal para o 80386, que juntamente com um bootloader evoluiu para um kernel básico
  • Linus conseguiu portar o GCC, compilador C do projeto GNU, para seu pequeno Kernel, além do shell bash
  • Linus divulgou seu pequeno projeto de “hobby” para o grupo de usuários do minix
Mensagem de Linus Torvalds sobre o projeto Linux
Mensagem de Linus Torvalds sobre seu pequeno projeto de “hobby”

GNU/Linux

  • Com a evolução do projeto de Torvalds, e a contribuição de inúmeros voluntários e usuários, o projeto cresceu muito em popularidade nos anos subsequentes
  • O Linux tornou-se portável, ou seja, pôde ser executado em outras arquiteturas além da i386
  • Foi distribuído sob a licença GPL
  • O projeto GNU possui um Kernel chamado hurd, que não estava maduro o suficiente para competir com o Linux
  • Os sistemas operacionais com Kernel Linux + GNU começaram a nascer e se popularizar

Os anos seguintes

  • Nos anos 1990, o Linux cresceu ainda mais em popularidade
  • Nasceram versões como a Slackware, Debian e Red Hat
  • E nos anos 2000 o Linux se popularizou ainda mais com a criação do Ubuntu Linux
  • O Sistema Operacional Android é uma distribuição Linux
  • Atualmente, a maioria esmagadora dos serviços de computação são desenvolvidos e executados em sistemas Linux
  • Além de dispositivos IoT, smartphones, entre outros

Parte V - Próximos passos

Por que utilizar Linux

  • Você já utiliza Linux (mas não sabe)
  • Filosofia Free Software
  • Até o Windows tem o WSL
  • Desenvolvimento de software
  • Docker
  • IoT
  • Servidores e supercomputadores

Como aprender a utilizar o Linux?

Para saber mais

Uma Breve História Sobre os Computadores

1969Criação do sistema operacional UNIX
1972Criação da linguagem de programação C
1978Lançamento do BSD Unix, uma distribuição do Unix da Universidade de Berkeley
1980Lançamento do Xenix, o “Unix da Microsoft”
1981Lançamento do primeiro PC IBM com MS-DOS
1983Início do projeto GNU (Gnu’s Not Unix)
1984Lançamento do Macintosh
1987Livro “Operating Systems Design and Implementation” de Tanembaum é publicado, junto com o sistema operacional MINIX
1988Definição do padrão IEEE 1003 (POSIX)
1991Linus Torvalds publica o Kernel Linux, com gcc e bash portados
1992Linux se torna Software Livre
1993Debian é criado, Red Hat é fundada
2004Ubuntu 4.10 é lançado (Linux + GNU)
2007Lançamento do Android versão alpha

Referências

The UNIX TimeSharing System, Dennis M. Ritchie e Ken Thompson, 1974, ACM Symposium on Operating Systems Principles. Disponível em ACM.

The Design of the UNIX Operating System, BACH, 1986, PRENTICE-HALL.

A brief tour of the PDP-11, the most influential minicomputer of all time, Andrew Hudson, 2022, Ars Technica. Disponível em Ars Technica. Acesso em fev/2023.

History and Timeline, The Open Group, 2020. Disponível em The Open Group. Acesso em fev/2023.

Oral History of Linus Torvalds, Computer History Museum, 2008. Disponível em Computer History Museum. Acesso em fev/2023.