# Plan 9 from Bell Labs

O Plan 9 from Bell Labs é um sistema operacional distribuído que se originou no Computing Science Research Center (CSRC) da Bell Labs em meados da década de 1980 e construído nos conceitos primeiramente desenvolvidos no Unix e no final da década de 1980. Dês de 2000, o Plan 9 é livre e opensource. A ultima versão official foi liberada no início de 2015.
No Plan 9 a metáfora UNIX everything is a file (tudo é um arquivo) é estendida através de um sistema de arquivos abrangente centrado em redes, e o I/O endereçado por cursor, baseado em terminal no coração de sistemas operacionais UNIX-like é subsistido por um sistema de janelas e uma interface gráfica do usuário sem endereçamento por cursor, apesar disso o rc, o shell do Plan 9, é baseado em texto.
Ele não é variante Unix, mas é muito parecido. O Plan 9 explora várias "simplificações" do modelo Unix original. Isso incrementa a experiência de usar e programar o sistema, notavelmente em ambientes multi-usuários distribuídos. O Plan 9 foi um projeto interno da Bell Labs por muitos anos, mas a distribuição pública feita em 1993, seguida por uma versão encolhe-envolve em 1995. A Bell perdeu o interesse comercial no projeto após a década de 1990 e distribuiu uma terceira versão sobre um licença não-livre (porém com o código fonte disponível) em 2000, e finalmente sobre uma nova licença open source em 2002. Esta é a quarta, e atual, edição do sistema. Os direitos para um produto derivado, Inferno, são de propriedade de uma companhia britânica, Vita Nuova. O Inferno compartilha muitas das semelhanças de conceitos de design do Plan 9, mas usa uma nova linguagem de programação de aplicativos, a Limbo, que vem acompanhando de uma máquina virtual, Dis. O Inferno é vendido como um sistema operacional embarcado open source.
Um ambiente funcional instalável existe para x86, mas existem versões do Plan 9 rodado no Intel, MIPS, Alpha, SPARC, PowerPC, ARM e outras arquitecturas. O sistema por si é escrito em um dialeto do ISO/ANSI C; muitas aplicações foram anteriormente escritas em uma linguagem chamada Alef, que tiveram que ser reescritos no mesmo dialecto em C. Ele pode importar programas POSIX e pode emular o Berkeley socket interface. Ele tem um suporte completo ao UTF-8, e um sistema de janelas chamado rio.
O nome Plan 9 from Bell Labs é uma referência ao Filme Z cult de ficção científica chamado Plan 9 from Outer Space de Ed Wood, feito em 1957. Além disso, Glenda, the Plan 9 Bunny, é presumivelmente uma referência ao filme Glen or Glenda. O sistema continua a ser utilizado e desenvolvido por pesquisadores de sistemas operacionais e hobistas.

## História

O Plan 9 da Bell Labs foi desenvolvido originalmente, a partir de meados da década de 1980, por membros do Centro de Pesquisas em Ciência da Computação da Bell Labs, o mesmo grupo que originalmente desenvolveu Unix e C. A equipe do Plan 9 foi inicialmente liderada por Rob Pike, Ken Thompson, Dave Presotto e Phil Winterbottom, com o apoio de Dennis Ritchie como chefe do departamento de pesquisa de técnicas de computação. Ao longo dos anos, muitos desenvolvedores notáveis ​​têm contribuído para o projeto, incluindo Brian Kernighan, Tom Duff, Douglas McIlroy, Bjarne Stroustrup e Bruce Ellis.
O Plan 9 substituiu o Unix como plataforma principal dos Bell Labs para pesquisa de sistemas operacionais. Ele explorou várias alterações ao modelo original Unix que facilitam o uso e a programação do sistema, principalmente em ambientes multiusuários distribuídos. Depois de vários anos de desenvolvimento e uso interno, a Bell Labs enviou o sistema operacional para as universidades em 1992. Três anos mais tarde, em 1995, o Plan 9 foi disponibilizado em partes comerciais pela AT&T através da editora Harcourt Brace. Com licenças de origem que custam US $ 350, a AT&T segmentou o mercado de sistemas embarcados em vez do mercado de computadores em geral; Ritchie comentou que os desenvolvedores não esperavam fazer "muito deslocamento" dada a forma como outros sistemas operacionais estabelecidos tinham se tornado.
No início de 1996, o projeto do Plan 9 tinha sido "posto em segundo plano" pela AT&T em favor do Inferno, destinado a ser um rival à plataforma Java da Sun Microsystems. No final dos anos 90, o novo proprietário da Bell Labs, Lucent Technologies, abandonou o suporte comercial para o projeto e, em 2000, uma terceira versão foi distribuída sob uma licença de código aberto. Uma quarto lançamento sob uma licença nova de software livre ocorreu em 2002. Uma comunidade de usuários e desenvolvedores, incluindo funcionários atuais e antigos da Bell Labs , produziu lançamentos diários menores em forma de imagem ISO. Bell Labs hospedou o desenvolvimento. A árvore de origem de desenvolvimento é acessível através dos protocolos 9P e HTTP e é usada para atualizar instalações existentes. Além dos componentes oficiais do SO incluído nas ISOs, a Bell Labs também hospeda um repositório de aplicações e ferramentas desenvolvidas externamente.
| Data | Versão | Comentário |
| 1992 | Plan 9 1st edition | Distribuída pela Bell Labs a universidades |
| 1995 | Plan 9 2nd edition | Distribuída pela Bell Labs para fins não-comerciais |
| 2000 | Plan 9 3rd ed. (Brazil) | Distribuída pela Lucent Technologies sobre uma licença open source |
| 2002 | Plan 9 4th edition | Distribuída pela Lucent Technologies sobre uma licença open source |

## Conceitos do design

Os projetistas do Plan 9 estavam interessados em objetivos similares aos do micronúcleo, mas fizeram escolhas bem diferentes em termos de arquitetura e desenvolvimento para atingir estes objetivos. Entre esses objetivos estão:
* Recursos com arquivos: todos os recursos são representados como arquivos em um sistema de arquivos hierárquico;
* Namespaces: a visualização da rede pela aplicação é um simples, coerente namespace que aparece como um sistema de arquivos hierárquico, mas representa recursos separados fisicamente (local ou remotamente);
* Protocolo de comunicação padrão: um protocolo padrão, chamado 9P, é usado para aceder a todos os recursos, tanto locais quanto remotos.

### Sistemas de arquivos, arquivos, e nomes

O Plan 9 estende o sistema mediante arquivos por "nomes", isto é, um único caminho para qualquer objeto, não importando se ele é um arquivo, uma tela, usuários, ou computadores. Tudo é feito usando os padrões Unix existentes, mas adicionando o fato que todo objeto pode ser nomeado e endereçado, um conceito similar ao amplamente conhecido sistema URI da internet. Em versões anteriores do Unix, dispositivos como impressoras eram representadas por nomes através do uso de programas conversores em /dev, mas estes endereçam apenas dispositivos conectados directamente por hardware, e não mapeia dispositivos em rede. No Plan 9 as impressoras são virtualizadas e tratadas como arquivos e ambos podem ser acedidos através da rede por qualquer estação de trabalho.
Outra inovação no Plan 9 é a capacidade para os usuários de ter diferentes nomes para os mesmos objectos do "mundo real". De fato qualquer usuário pode criar um ambiente personalizado coleccionando vários objectos em seu "namespace". O Unix tem um conceito similar em que o usuário ganha privilégios ao ser copiado de outro usuário, mas no Plan 9 isto é estendido para qualquer objecto. Os usuários pode facilmente criar "clones" de si mesmo, modificar esta cópia, e depois apagá-la sem afectar nada dos recursos originais.

### União de directórios

O Plan 9 também introduziu a ideia de união de directórios. São directórios que combinam recursos entre mídias diferentes ou através de uma rede juntando-se a outros directórios transparente mente. Por exemplo, o directório /bin de outro computador pode ser ligado com o seu próprio /bin, e então este diretório irá compartilhar ambos os binários locais e os binários remotos, e podem ser usados por ambos transparente mente. No Unix, mapear directórios desta forma faz o original ficar oculto enquanto existir o mapeamento. Usando o mesmo método, no Plan 9, fontes e dispositivos externos podem ser ligados ao /dev, fazendo de todos os dispositivos, dispositivos de rede, sem adicionar novos códigos. A arquitetura do diretório union do Plan 9 inspirou as implementações do sistema de arquivos union 4.4BSD e do Linux, embora os desenvolvedores da instalação de montagem union BSD encontraram a fusão não-recursiva de diretórios no Plan 9 "muito restritiva para uso geral".

### /proc

Para ilustrar como estas características funcionam simultaneamente para produzir um poderoso conjunto, consideremos o interessante directório /proc, onde todos os processos que estão sendo executados são listados. Processos são considerados objectos no Plan 9, como tudo o mais, então faz sentido listá-los em um directório, assim como o restante.Esta alteração simples tem muitos efeitos colaterais úteis, permitindo ao usuário usar comandos como o ls para pesquisar e organizar a lista de processos (que estão rodando), o que antes só era possível com o uso de ferramentas especializadas. Mas ainda mais interessante, os usuários podem "unir" processos remotos para seu "namespace", interagindo com eles como se os processos fossem executados localmente, tornando quase que trivial o processamento em rede.
O resultado é um ambiente de computação distribuído construído com máquinas separadas - terminais que ficam nas mesas dos usuários, servidores de arquivos que armazenam os dados permanentemente, e outros que fornecem CPUs rápidas, autenticação de usuários, e gateway de rede, todos utilizado o sistema de directórios/nomes hierárquicos familiar à maioria dos usuários de computador. Um usuário pode "construir" um sistema coleccionando directórios em servidores de arquivos, aplicativos rodando em servidores, impressoras em rede e estas conectadas a isto tudo em seu "namespace" rodando em um terminal.

### /net

O Plan 9 não tem chamadas de sistema especializadas ou ioctls para acessar a pilha de rede ou hardware de rede. Em vez disso, o sistema de arquivos /net é usado. As conexões de rede são controladas pela leitura e gravação de mensagens de controle para controlar arquivos. Sub-diretórios como /net/tcp e /net/udp são usados ​​como uma interface para seus respectivos protocolos.

### Unicode

Para reduzir a complexidade do gerenciamento de codificações de caracteres, o Plan 9 usa o Unicode em todo o sistema. A implementação inicial do Unicode foi ISO 10646. Ken Thompson inventou o UTF-8, que se tornou a codificação nativa no Plano 9. O sistema inteiro foi convertido para uso geral em 1992. O UTF-8 preserva a compatibilidade com as cadeias terminadas nulas tradicionais, permitindo um processamento de informações mais confiável e o encadeamento string de dados multilíngue com Unix pipes entre vários processos. Usando uma única codificação UTF-8 com caracteres para todas as culturas e regiões elimina a necessidade de alternar entre conjuntos de códigos.

### Combinando os conceitos de projeto

Embora interessante por conta própria, os conceitos de design do Plan 9 são mais úteis quando combinados. Por exemplo, para implementar um servidor network address translation (NAT), um diretório de união pode ser criado, sobrepondo a árvore de diretórios do roteador /net com seu próprio /net. Da mesma forma, uma rede privada virtual (VPN) pode ser implementada por sobreposição em um diretório union /net hierarquia de um gateway remoto, usando 9P protegido através da internet pública. Um diretório de union com a hierarquia /net e os filtros podem ser usados ​​para sandbox, um aplicativo não confiável ou para implementar um firewall. Da mesma forma, uma rede de computação distribuída pode ser composta com um diretório union de hierarquias /proc de hosts remotos, o que permite interagir com eles como se fossem locais.
Quando usados ​​em conjunto, esses recursos permitem a montagem de um ambiente de computação distribuída complexa reutilizando o sistema de nomes hierárquico existente.

## Recepção
### Impacto

O Plan 9 demonstrou que um conceito integral do Unix - que cada interface do sistema poderia ser representada como um conjunto de arquivos - poderia ser implementado com sucesso em um sistema distribuído moderno. Alguns recursos do Plan 9, como a codificação de caracteres UTF-8 do Unicode, foram implementados em outros sistemas operacionais. Sistemas operacionais Unix, como o Linux, implementaram o 9P, o sistema de arquivos do Plan 9, e adotaram os recursos do rfork, mecanismo de criação de processo do Plan 9. Além disso, no Plan 9 from User Space, várias das ferramentas e aplicativos do Plan 9, incluindo os editores sam e acme, foram portados para sistemas Unix e Linux e alcançaram algum nível de popularidade. Vários projetos procuram substituir os programas do sistema operacional GNU que cercam o kernel do Linux com os programas do sistema operacional Plan 9. O gestor de janelas 9wm foi inspirado no 8½, o mais antigo sistema de janelas do Plan 9; wmii também é fortemente influenciado pelo Plan 9. Em pesquisas na ciência da computação, o Plan 9 tem sido utilizado como uma plataforma de computação em grade e como um veículo para a investigação em computação ubíqua sem middleware.
Vários projetos trabalham para estender o Plan 9, incluindo 9atom e 9front. Esses forks aumentam o Plan 9 com drivers de hardware e software adicionais, incluindo uma versão melhorada do sistema de e-mail Upas, o compilador go, o suporte a sistemas de controle de versões Mercurial e outros programas. O Plan 9 foi portado para o computador single-board Raspberry Pi. O projeto Harvey tenta substituir o compilador personalizado do Plan 9 C pelo GCC, para alavancar ferramentas modernas de desenvolvimento como o GitHub e Coverity e acelerar o desenvolvimento.

### Derivados e forks

O Inferno é um descendente do Plan 9, e compartilha muitos conceitos de design e até mesmo código fonte no kernel, particularmente em torno de dispositivos e o protocolo Styx/9P2000. Inferno compartilha com o Plan 9 a herança Unix dos Laboratórios Bell e a filosofia Unix. Muitas das ferramentas de linha de comando em Inferno foram ferramentas Plan 9 que foram traduzidas para Limbo.
* 9atom acrescenta a distribuição do Plan 9 com a adição de um kernel 386 PAE, um amd64 cpu e kernel terminal, nupas, suporte de hardware extra para pc, IL e fs Ken.
* 9front é um fork do Plan 9. Foi iniciado para remediar uma falta percebida de recursos dedicados no desenvolvimento dentro dos laboratórios de Bell, e acumulou vários reparos e melhorias.
* 9legacy é uma distribuição alternativa. Ele inclui um conjunto de patches com base na distribuição atual do Plan 9.
* Akaros é projetado para arquiteturas de multiplos-núcleos e sistemas em grande escala SMP.
* Harvey OS é um esforço para obter o código do Plan 9 trabalhando com gcc e clang.
* JehanneOS é um sistema operacional experimental derivado do Plan 9. Seu userland e módulos são derivados principalmente do 9front, seu sistema de construção do Harvey OS, e seu kernel é um fork do Plan9-9k 64-bit Plan9 kernel.
* NIX é um fork de Plan 9 que visa sistemas multicore e computação em nuvem. A página do projeto no Google Code contém mais informações.

### Rede e computação distribuída

O Plan 9 é baseado no Unix mas foi desenvolvido para demonstrar o conceito de tornar a comunicação a função central dos sistemas computacionais. Todas os recursos do sistema são nomeados e acedidos como se fossem arquivos e múltiplas visões do sistema distribuído podem ser definidas dinamicamente para cada programa rodando em uma máquina em particular. Esta abordagem melhora, generaliza e modulariza o design das aplicações por encorajar servidores que lidam com qualquer informação a parecer para o usuário e para as aplicações simplesmente como uma coleção de arquivos simples.
A chave para suportar a rede transparente mente no Plan 9 é um protocolo de rede de baixo nível conhecido como 9P. O protocolo 9P e sua implementação conectam objetos de rede nomeados e apresentam em uma interface parecida com um sistema de arquivos. 9P é um rápido sistema de arquivos distribuído orientado a bytes (em vez de ser orientado a blocos) que pode "virtualizar" qualquer objeto, não somente aqueles apresentados por um servidor NFS numa máquina remota. O protocolo é usado para referenciar e se comunicar com processos, aplicações e dados, incluindo tanto a interface de usuário quanto a rede. Com o lançamento da 4ª edição, ele foi modificado e renomeado para 9P2000.

## Licença

A partir do lançamento da Quarta edição em abril de 2002, o código fonte completo do Plan 9 da Bell Labs estava livremente disponível sob Lucent Public License 1.02, que é considerada licença de código aberto pela Open Source Initiative (OSI), software livre pela Free Software Foundation, e passa pela Debian Free Software Guidelines. Em fevereiro de 2014, a Universidade da Califórnia em Berkeley, foi autorizada pelo atual titular do copyright do Plan 9 - Alcatel-Lucent - a liberar todo o software do Plan 9 previamente gerido pela Lucent Public License, versão 1.02, sob a GNU 2.

## Utilitários padrões Plan 9

* rc - the Plan 9 shell
* sam - um editor de texto
* acme - uma interface de usuário para programadores
* plumber - interprocess messaging
* Mk - uma ferramenta para construir software, análoga ao tradicional Unix make
* namespace
* rio - o novo sistema de janelas do Plan 9
* 8½ - o velho sistema de janelas do Plan 9
* Fossil e Venti - the new archival file system and permanent data store

## Implementações

* 9P - o protocolo padrão de arquivos
* rendezvous - um mecanismo básico de sincronização
* Brazil - que será a quarta edição do Plan 9