GoboLinux, uma distribuição Linux experimental que usa o sistema de arquivos como banco de dados de pacotes
(gobolinux.org)- É uma distribuição experimental que altera bastante as convenções de diretórios das distribuições Linux tradicionais, fazendo a configuração do sistema ser entendida em torno de diretórios por programa
- Em vez de um banco de dados de pacotes separado, usa o próprio sistema de arquivos como banco de dados, e os programas são organizados por versão em caminhos como
/Programs/Nano/8.3 - A versão mais recente, 017.01, é uma atualização de correção de bugs lançada cerca de 5 anos após o ISO anterior, abordando alguns problemas importantes desse período
- O fundador Hisham Muhammad deixou a operação após 25 anos à frente, e o projeto passou a ser mantido pelo usuário do GitHub
@fyrak1s - É possível executá-lo diretamente como ambiente Live ou instalá-lo no disco rígido para testar na prática uma estrutura de sistema de arquivos diferente das distribuições comuns
Como os pacotes são organizados pelo sistema de arquivos
- GoboLinux é uma distribuição Linux experimental que redefine toda a hierarquia do sistema de arquivos
- A ideia central é não manter um banco de dados de pacotes separado, mas usar o sistema de arquivos como banco de dados
- Cada programa fica em seu próprio diretório
- Exemplos:
/Programs/Nano/8.3e/Programs/GCC/14.2.0
- Como a estrutura é diferente da de distribuições Linux convencionais, é recomendável que novos usuários leiam primeiro a documentação
Lançamento 017.01 e transição na manutenção
- A versão atual é a 017.01
- É um ambiente Live executável a partir de drives USB e DVDs
- Também pode ser instalado em um disco rígido
- O ISO pode ser baixado em Downloads
- A v017.01 é uma atualização de correção de bugs lançada após um intervalo de cerca de 5 anos
- Trata de alguns problemas importantes surgidos desde o lançamento anterior do ISO
- As mudanças detalhadas podem ser conferidas nas release notes
- A manutenção do projeto também mudou
- O fundador e líder do GoboLinux por 25 anos, Hisham Muhammad, se retirou oficialmente
- O projeto continua sob a gestão de
@fyrak1s - Lucas Correia Villa Real, também conhecido como
paranoidd, manteve o GoboLinux junto com Hisham até junho de 2021
- Os pontos de encontro da comunidade se dividem entre chat, fórum e wiki
- Zulip Chat e o canal IRC
#gobolinuxemirc.libera.chat - GoboLinux forum
- GoboLinux wiki
- Zulip Chat e o canal IRC
1 comentários
Opiniões no Hacker News
Se você é alguém que sente uma rejeição imediata forte ao design do GoboLinux, o documento de 20 anos “I am not clueless”¹ traz bastante contexto e lógica por trás disso
Ainda não é que a rejeição tenha sumido completamente, mas ela já não é tão forte quanto antes ;)
¹ https://gobolinux.org/doc/articles/clueless.html
Dá para resumir mais ou menos como: “Sabemos que somos diferentes. É muito simples. Pode não ser familiar, mas é fácil de entender e lidar. Você não precisa usar. Nós gostamos disso e estamos satisfeitos”
make all programs relocatabledo texto linkado, ele diz que seria preciso reescrever todos os apps usandolibprefix; fico curioso sobre o quelibprefixsignifica aquiPesquisando na web, não aparece nenhum resultado útil
Por exemplo, boa parte da primeira reação vem do uso de maiúsculas:
Programs, com P maiúsculo, lembra oProgram Filesdo Windows e causa uma rejeição emocionalSe eu tivesse que digitar
LibX11em vez delibx11, acho que isso também irritaria um poucoO sistema de arquivos do Linux normalmente diferencia maiúsculas de minúsculas, mas nomes de pacotes provavelmente evitariam duplicatas que diferem só por caixa, e também parece improvável que uma distribuição voltada a uma camada amigável ao usuário colocasse diretórios na raiz que diferissem apenas por maiúsculas/minúsculas
Ainda assim, se os exemplos fossem
/packages/libx11/1.6.9,/packages/gcc/9.2.0, acho que a reação inicial teria sido muito menor, e os benefícios não teriam diminuído em nada com esses nomesÉ realmente uma pena que a ideia do GoboLinux não tenha se firmado na comunidade Linux mainstream
A estrutura do sistema de arquivos do Linux é uma bagunça completa
Fazer isso funcionar corretamente nunca é trivial, e torná-lo eficiente é ainda mais difícil
Só nos últimos anos sinto que esse modelo chegou perto de ser realmente sustentável para a distribuição da maior parte dos softwares
No modelo do GoboLinux, você precisa gerenciar manualmente diretórios de versão como
/Programs/Xorg/7.0, enquanto o Nix elimina esse problema definindo o caminho de instalação de um pacote pelo hash da receita de build/homee/tmpO resto está mais para um amontoado onde se coloca qualquer coisa em qualquer lugar
O GoboLinux foi o primeiro projeto que me mostrou que, no Linux, dá para fazer realmente do jeito que você quiser
/opte/srv, e dependendo do gosto/usr/local/opt, oferecem bastante da vantagem de gerenciar componentes individualmente como no GoboLinuxDo ponto de vista da distribuição, tudo faz algum sentido
Se você digita
dpkg -S this-file, descobre rapidamente por que um arquivo dentro de/usrexiste, e a distribuição tem o papel de desenhar o panorama completoFico curioso para saber qual parte você considera a mais bagunçada
Acho interessante que eles mantenham de forma transparente a compatibilidade com a herança Unix mapeando os caminhos tradicionais para os caminhos correspondentes do GoboLinux
Não há nenhuma mágica especial:
/biné um link para/System/Index/bin, e/usr/bine/usr/sbintambém, da mesma forma, com todos os diretórios de “binários” apontando para o mesmo lugarGraças a isso, os arquivos funcionam seja qual for o caminho padrão usado para acessá-los, então talvez seja até mais compatível do que uma distribuição comum, em que um script quebra ao referenciar
/usr/bin/fooquando o arquivo real está em/usr/local/bin/fooPerguntando sem saber muito: o macOS funciona mais ou menos desse jeito?
Sempre achei ótimo o modo como os aplicativos parecem um único “arquivo” que você gerencia arrastando e soltando
Quando tento descobrir onde algo está e onde é instalado no Ubuntu, sinto que virei um idiota
Entendo por que fazem isso
A estrutura de diretórios de uma instalação Linux comum é um labirinto confuso até para pessoas técnicas, e é ainda pior para os usuários comuns que as grandes distribuições miram
Mas, no fim, é uma forma de tratar o sintoma, não a causa, e acho que mais distribuições Linux deveriam considerar seriamente modernizar a estrutura do sistema de arquivos, como o Gobo
Tenho até vontade de tentar fazer isso eu mesmo
O objetivo seria criar uma estrutura razoavelmente autoexplicativa, que conduza iniciantes para longe de áreas perigosas e em que o gerenciador de arquivos quase não precise esconder nada
~/LibraryFica interessante quando, como no launcher do Minecraft, tudo fica dentro do bundle, incluindo mundos e arquivos salvos
~/Librarye/LibraryMesmo no macOS, não é raro ter que seguir instruções de remoção manual em várias etapas para apagar alguns apps
Isso é especialmente importante quando o app adiciona itens de login
O Adicionar/Remover Programas do Windows ao menos oferece um ponto central para executar a desinstalação, e a maioria dos apps segue esse método corretamente
Não dá para fazer a mesma coisa com
dpkg?Não gosto muito de o primeiro nome de diretório começar com letra maiúscula
Ao navegar por caminhos, isso parece trabalho extra, e ter que apertar Shift junto com uma letra ou número toda vez é bem chato no uso cotidiano da linha de comando
/Programsexige exatamente a mesma quantidade de teclas que/usrBasta barra, p minúsculo e Tab
Ele não força você a sacrificar usabilidade para economizar os preciosos ticks e a memória do PDP-11
Sempre acho engraçado quando fãs de “diferenciação entre maiúsculas e minúsculas é o máximo!” não percebem que isso foi só resultado das limitações do sistema original
Não é um recurso
Além disso, essa parte é tratada explicitamente
Só
set completion-ignore-case Onjá melhora muito a vidaPorque, mesmo que você não use GoboLinux, deixa de apertar Shift uma vez para cada nome de arquivo que começa com maiúscula
Ou você pode continuar vivendo como em 1977
Seu VT100, suas regras
Depois vi alguém dizendo “por que não usar simplesmente o bash para navegação comum em vez de instalar outro shell”, o que mostra que a pessoa nem conhece direito o próprio shell
Além disso, qualquer shell pode oferecer autocompletar sem diferenciar maiúsculas de minúsculas, e o Fish faz isso por padrão
Tem cara de Windows
Este projeto tem potencial para reduzir bastante a nossa carga cognitiva
Espero que dê certo
Correção: agora vi que é um projeto de 20 anos
https://github.com/gobolinux/Recipes/commits/master/
É tão racional que dá vontade de chorar
Se a desduplicação de várias cópias de bibliotecas for realmente necessária, o sistema de arquivos que cuide disso
No fim das contas, é duplicação em nível de arquivo, então deve ser resolvida nesse nível
Aplicativos de código fechado muito ruins esperam demais do sistema do usuário
O cliente Steam é um exemplo: ele fornece scripts em
bash, não emsh; pressupõe fortemente uma disposição de arquivos ao estilo Debian/Ubuntu por causa dos requisitos de contêiner em espaço de usuário para montagem no Linux; e ainda exige opções peculiares, exclusivas do GNU, em vários comandosTambém há muitas bibliotecas de 32 bits
Ainda assim, parece que a ABI continua sob controle, e provavelmente usam a diretiva
.symverdo gas do binutilsPelo menos a bagunça atual está sendo enfiada goela abaixo por meio do Steam, e é difícil escapar dela em qualquer distribuição que não seja uma distro sem jogos
Mesmo dentro do grupo de gamers, é bem possível que uma parcela considerável tenha um PC dedicado só para jogos
Gostaria que alguém muito mais inteligente do que eu explicasse por que isso é melhor, ou se é mesmo melhor, do que snap/Flatpak ou distribuições como NixOS
Sem entender a fundo, por fora este método parece o mais simples
Claro, digo isso partindo da minha falta de conhecimento
Há bons motivos para Flatpak e NixOS serem mais complexos
Por exemplo, eles não armazenam no disco cópias duplicadas da mesma versão exata de uma dependência
Usei aspas porque há questões de segurança
O NixOS quebra a compatibilidade com programas existentes, enquanto o Gobo não
Mas o repositório de pacotes do NixOS é incomparavelmente mais bem mantido que o do Gobo, e o do Gobo é incompleto e fica anos atrasado
Ainda assim, tudo o que foi mencionado aqui fica atrás da forma como o Android armazena apps
No Android, cada aplicativo pode ser distribuído como um único arquivo fácil de distribuir, fica devidamente isolado em sandbox e tem seu próprio diretório
Outro ponto que as outras abordagens deixam passar: cada app tem um subdiretório sob o diretório do app para armazenar seu próprio estado, separado também por usuário
Os desenvolvedores do GoboLinux realmente criaram uma disposição do sistema de arquivos inteligível para humanos de forma “inteligente”
Acho que as antigas convenções UNIX que usamos hoje são bem obscuras numa época em que não existem mais restrições como limite de nomes 8.3, falta de espaço de armazenamento ou problemas com arquivos acima de 1 GB
Rodei o GoboLinux 012 a 015 por alguns anos em um servidor que antes hospedava software de controle de versão e, no geral, foi muito bom
O obstáculo era que, se não houvesse o pacote necessário, era preciso criar uma receita
A própria linguagem de escrita de receitas do GoboLinux era fácil de entender, mas um único pacote muitas vezes dependia de uma dúzia ou de dezenas de bibliotecas, então eu gastava muito tempo rastreando isso, alinhando versões, encontrando URLs de bibliotecas e pacotes e criando receitas de novo
No fim, migrei para Debian, mas até hoje me dá um arrepio ver arquivos de configuração em
/etce binários em/usr/binou/usr/local/binSou do lado que vê o systemd como incômodo e com tentáculos demais
É comum usar
findpara localizar o arquivo.servicerelacionado; não dá para confiar que ele esteja em um único lugar, e a linha de comando também não é intuitivaEm contraste, no Gobo o conjunto de scripts para gerenciar serviços era muito simples e fácil de lidar
Mesmo assim, a conveniência de poder instalar logo o que é necessário com
apt getoudpkg -ivence o design inteligente e muito mais racional do GoboLinuxHoje em dia, o número de distribuições Linux suportadas diminuiu em relação à infinidade de opções de antes, e quase sempre Debian ou Ubuntu vêm incluídos por padrão, então é pouco provável não conseguir instalar um pacote ou programa mesmo fora dos repositórios
O macOS também certamente usa, em alguma medida, uma abordagem parecida com a do GoboLinux, e por isso, antes das versões recentes bastante hostis ao usuário, era bem fácil lidar com o macOS pela linha de comando
Por exemplo, unidades USB ficam em
/Volumes, e arquivos de configuração de programas ficam sob~/Librarysystemctl status foopara que, a partir da segunda linha, ele informe exatamente quais arquivos estão envolvidosPor exemplo, na saída de
systemctl status getty@tty1.serviceaparece algo comoLoaded: loaded (/lib/systemd/system/getty@.service; enabled; preset: enabled), então dá para saber diretamente que é/lib/systemd/system/getty@.service