Futuros que nunca foram

O que sistemas do passado ainda podem nos ensinar sobre a computação pessoal?

Estevan Castilho | @tevo@bsd.cafe | riajuu.net | TOSCONF[5]

* altamente simplificado

* altamente simplificado

Plan 9 from Bell Labs

Contexto histórico (final dos anos 80s)

  • Workstations ganhando popularidade
  • UNIX bem difundido, mas não ubíquo em minicomputadores e workstations
  • Redes de computadores começam a se tornar comuns em organizações e universidades
  • Sun Microsystems: "The network is the computer"

Enquanto isso, na Bell Labs

  • Research UNIX v9 e v10
    • Userland significativamente diferente do UNIX comercial: rc, mk, /proc, streams montáveis, ...
    • Sistema atual cada vez mais inadequado para implementar as idéias do laboratório

E se refisessemos o UNIX do zero?

Plan 9 from Bell Labs

UNIX levado à sua conclusão lógica

  • Tudo é um (sistema de) arquivo(s), dessa vez de verdade
    • Sem casos especiais: dispositivos de bloco e caractere, ioctl(), symlinks, sockets não existem.
    • Arquivos são streams de bytes, potencialmente infinitos. Diretórios são arquivos contendo uma coleção de outros arquivos.
  • Recursos são expostos como sistemas de arquivos através de um protocolo único e bem definido: 9P
    • Sistemas de arquivos podem ser montados a partir de streams de bytes (outros arquivos!)
    • A implementação de um recurso não importa, apenas sua interface
      • nem sua localização: um processo local, o kernel, outra máquina, em outro sistema operacional, do outro lado do mundo...
    • Corolário: o kernel, conceitualmente, é apenas um cliente 9P
  • O namespace é uma visão dos recursos disponiveis
    • Namespaces não são globais: processos podem "bifurcar" o espaço de nome atual através de uma flag para o rfork()
    • O usuário pode manipular o namespace atual utilizando mount e bind
    • Importar recursos é apenas uma questão de montar um sistema de arquivos em um local adequado

Plan 9 from Bell Labs

Simplesmente um design de sistema superior

Uma rede Plan 9 não tão típica quanto esperado...
"Plan 9 from Bell Labs", Rob Pike et. al.
  • Sem autoridade global: root não faz sentido em um sistema distribuido.
  • Construido ao redor de sistemas heterogeneos, a estrutura de arquivos é organizada de forma a comportar diversos conjuntos de instruções em uma unica raiz.
    • Compiladores e sistemas de build estruturados de forma que programas possam ser cross-compilados apenas modificando uma variável de ambiente
  • Dialeto de C personalizado, incluíndo extensões à linguagem e uma biblioteca padrão repensada.
    • POSIX/ANSI C também é suportado, através de um ambiente especial.

Muito mais do que UNIX, Plan 9 é um sistema operacional construído em volta de manipulação de texto. A maior parte dos programas e sistemas de arquivos aceitam e exportam texto, e, na mesma tradição do UNIX, o sistema conta com diversas ferramentas para escrita e manipulação de texto, proceduralmente e interativamente.


em relação ao UNIX contemporâneo. Opiniões diferem; vide cópia do UNIX Haters Handbook para mais informações.

O que podemos aprender com Plan 9 from Bell Labs?

Apesar disso...

Muito do UNIX ainda é reconhecivel, pelo menos em princípio:

O que levanta a questão:

Como podería um sistema indo em uma direção completamente oposta se parecer?

As máquinas de Lisp do laboratório de inteligência artificial

Contexto histórico (mid-70s)

As máquinas de Lisp do laboratório de inteligência artificial

  • Arquiteturas de alto nível, estruturadas para executar Lisp eficientemente
    • CONS e CADR, assim como seus derivados, eram máquinas de microcódigo que interpretavam o "macrocódigo" da máquina de Lisp
      • Máquinas posteriores, como o Symbolics Ivory e o TI Megachip, abandonaram a microcodificação em favor da implementação direta em circuitos VLSI
    • Objetos na memória possuiam tags de tipos reconhecidas pelo processador, que verificava as mesmas durante a execução de uma instrução.

Nem tanto sobre as máquinas

Apesar do design de hardware notável, o mais interessante sobre as máquinas eram o seu software

  • Interface de usuário baseada em "apresentações": itens apresentados na tela são representações associados de objetos da linguagem, que podem ser inspecionados e manipulados diretamente ou programaticamente.
  • Introspectabilidade pervasiva
    • Grande parte dos elementos do sistema são estruturados de forma a permitir sua inspeção e modificação, inclusive partes do núcleo.
    • Seguindo a mesma linha, ferramentas de desenvolvimento e depuradores estão disponíveis o tempo inteiro, encorajando a extensão do sistema e a exploração oportunística da implementação
  • Não apenas Lisp: implementações de outras linguagens existiam, e herdavam muitas das caracteristicas do sistema, como introspectabilidade, tipagem forte ao nível de hardware e coleção de lixo pervasivas
    • O Symbolics Genera contava com, além de ZetaLisp e Common Lisp, implementações de C, Pascal, Ada, Prolog e Fortran

Aonde quero chegar com isso?

Liberdade de software praticável requer não somente que o código-fonte dos programas esteja disponível para livre inspeção e modificação, mas também que o sistema na qual o programa se encontra seja estruturado de forma a encorajar o usuário a explorar sua estrutura interna, habilitando-o a extender e modificar seu ambiente da forma na qual julgar apropriada para alcançar seus próprios objetivos.

Pesquisa em sistemas operacionais (não) está morta