summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--blogs.csv2
-rw-r--r--posts/plan9-diferencas-tecnicas.md97
2 files changed, 99 insertions, 0 deletions
diff --git a/blogs.csv b/blogs.csv
index 5eea999..79c2524 100644
--- a/blogs.csv
+++ b/blogs.csv
@@ -1,3 +1,4 @@
+Diferenças técnicas entre o Plan 9 e UNIX|/posts/plan9-diferencas-tecnicas.html|Sun, 05 Jul 2026 18:05:00 -0300
"Tudo dentro do Rust, nada fora do Rust"|/posts/problemas-rust.html|Tue, 12 May 2026 11:24:27 -0300
Espaços liminares e backrooms|/posts/espacos-liminares.html|Sun, 05 Apr 2026 15:10:23 -0300
Você não precisa criar contas pra acompanhar seus criadores...|/posts/rss.html|Sun, 22 Mar 2026 13:39:53 -0300
@@ -7,3 +8,4 @@ Yep, eu deletei a conta do xitter|/posts/conta-deletada.html|Tue, 17 Mar 2026 20
Lei Felca é só consequência da centralização da internet|/posts/centralizacao-lei-felca.html|sáb 14 mar 2026 22:48:07 -03
Anonimato é só estatistica|/posts/anonimato-estatistica.html|sex 13 mar 2026 10:58:31 -03
First!|/posts/first.html|sex 13 mar 2026 00:36:42 -03
+
diff --git a/posts/plan9-diferencas-tecnicas.md b/posts/plan9-diferencas-tecnicas.md
new file mode 100644
index 0000000..3577310
--- /dev/null
+++ b/posts/plan9-diferencas-tecnicas.md
@@ -0,0 +1,97 @@
+# Diferenças técnicas entre o Plan 9 e UNIX
+
+Eu venho estudado o kernel do Plan 9 e comparando com as implementações de UNIX
+que temos hoje, e muitas das coisas que eu comento pela internet sobre o Plan 9
+são mal interpretadas ou rotuladas como "lentas" ou contraditórias e que
+precisam funcionar por outro caminho. Eu fui a fundo entender essa diferença de
+comunicação que estamos tendo e pretendo remover esses mal-entendidos com esse
+post.
+
+## "Plan 9 tem comunicação baseada em arquivo e, portanto, é lento"
+
+Apesar dos syscalls de arquivo serem semelhantes, o comportamento desses
+syscalls divergem bastante conforme a complexidade aumenta.
+
+Se você estiver operando um arquivo, tanto o Plan 9 quanto o UNIX vão triggar
+uma mudança de privilégio, que então o número do file descriptor é usado pra
+selecionar uma entry de um lista de virtual table que contém as operações
+corretas para o driver que lida com o arquivo aberto. Até aqui, não há trocas
+de contexto e os dois operam mais ou menos na mesma forma.
+
+A diferença é que o UNIX abandonou completamente a ideia de tudo ser um arquivo
+e, como o Rob Pike disse uma vez: "é tudo um arquivo, mas alguns arquivos são
+mais iguais que outros". Se você quiser desenhar algo na tela de um UNIX, você
+não faz um `write(2)` para o kernel, você é obrigado a se comunicar via IPC ou
+tornar o processo mais acoplado com o *driver* do sistema operacional através
+de shared memory.
+
+O Plan 9, por outro lado, leva isso até as ultimas consequências e de forma
+mais enxuta. Os drivers dos file descriptors ficam mapeados no processo, o que
+reduz a quantidade de trocas de contexto, e o driver lida diretamente com o
+buffer passado pelo programa. Um exemplo mais voltado para o gráfico como
+citado anteriormente, o driver `draw(3)` fica mapeado junto com o kernel, que
+então lida diretamente com os comandos enviados pelo programa, que realiza as
+operações e devolve o programa para o modo de usuário, sem realizar uma troca
+de contexto.
+
+Vale ressaltar que sim, operações de I/O no Plan 9 podem causar uma troca de
+contexto a depender do driver, então operações em rede ou sistemas de arquivo
+montados em 9p ou usando o `pipe(3)` geralmente triggam uma troca de contexto.
+A diferença é que o Plan 9 simplificou a operação e tornou I/O mais leve.
+
+[Esse documento](https://ondoc.logand.com/d/5736/pdf) descreve melhor as
+decisões de arquitetura do Plan 9, com as vantagens e desvantagens.
+
+## "Plan 9 é confuso"
+
+O Plan 9 é confuso porque ainda temos a mentalidade de como um computador
+funciona pelo UNIX.
+
+O Plan 9 separa o sistema operacional em 3 grandes "servers": CPU server, File
+server e Auth server; e esses 3 têm suas configurações feitas de forma isolada,
+então toda instalação de um Plan 9 "standalone" é uma composição de 3 ambientes
+diferentes, que significa que são 3 configurações diferentes no mesmo sistema.
+Ou então você pode fazer 3 configurações em 3 sistemas diferentes (inclusive
+sendo sistemas operacionais diferentes), que foi para o quê o Plan 9 foi feito.
+
+E também muitas das coisas que temos por garantido dos UNIXes modernos são
+feitas de forma diferente, e como eu costumo dizer no IRC da bolha dev, o Plan 9
+tem uma tendência a transformar código em infraestrutura. Um exemplo que eu
+posso dar é sobre o `audio/mixfs` do 9front, que é o equivalente ao `pulseaudio`
+ou `pipewire` do linux.
+
+O audio do Plan 9 funciona ao escrever e ler no `/dev/audio` do sistema, como
+nos antigos UNIXes, e esse `/dev/audio` é oferecido pelo dispositivo de sistema
+chamado `#A`, e como nos antigos UNIXes ele tem o problema de só um poder usar
+ele, etc. O `audio/mixfs` oferece um file system por 9p que tem a mesma
+estrutura do `#A`, que então é bindado no `/dev` do namespace e então todo
+software desse namespace vai rodar através do contexto do mixer e não no
+contexto do kernel, permitindo mixagem de audio.
+
+Com esse exemplo, fica claro como que as coisas acabam funcionando no Plan 9:
+é tudo sobre uma composição de namespaces, você monta o ambiente adequado que você
+quer que o processo rode e então roda o processo.
+
+## "Plan 9 é inseguro"
+
+De fato o Plan 9 tem algumas coisas que estão atrasadas pois se trata de um
+sistema operacional de pesquisa de 3 décadas atrás, então você não vai
+encontrar criptografias mais recentes, como o ed25519, e também VPNs do mercado
+como o wireguard ou openvpn. Porém o modelo de segurança do Plan 9 não é
+baseado em modelo de segurança ativa, como um firewall, mas de forma mais
+passiva, "se um software não precisa ou não pode ver tais coisas, ele
+simplesmente não vê isso". Isso dá através de namespaces e, no caso do 9front,
+também por mecanismos parecidos com o `pledge(2)` do OpenBSD em nível de
+namespace, o `chdev(1)` e comunicações com o `#c/drivers`.
+
+## Conclusão
+
+Com isso, eu acredito que algumas coisas fiquem mais claras. O Plan 9 tem um
+modelo de arquivo, mas a implementação desse modelo é mais enxuta e simples,
+permitindo uma maior performance, segurança e flexibilidade. No máximo, o Plan
+9 é um sistema operacional de uso geral mas incompleto e com umas falhas devido
+ao tempo que foi deixado de lado, o que é triste mas interessante para explorar
+devido a sua codebase ser menor e mais simples, pode-se considerar como um
+grande uncharted territory assim como vários outros modelos que foram deixado
+de lados com o passar do tempo.
+