JEDIComp desenvolvendo à Força

Seis meses com um sistema imutável

Pelos últimos seis meses eu usei no meu notebook pessoal, o Bazzite. Um sistema operacional imutável, com foco em videojogos. Nesse texto eu quero contar um pouco sobre a minha experiência.

Antes de começar, quero falar sobre o que é o Bazzite.

Bazzite é um sistema operacional com foco em na execução de jogos. Você pode ver ele como uma versão comunitária do SteamOS.

Diferente do SteamOS, cuja base é Arch Linux, esse sistema[1] é baseado no projeto Fedora Silverblue. Entretanto, ambos o SteamOS e o Silverblue têm algo em comum: são sistemas ditos como "imutáveis". Sistemas imutáveis, em um resumo muito resumido, limita a alteração de arquivos do sistema, incluindo a instalação de programas.

Ah, Jedi! Mas por que eu iria querer um sistema que eu não posso instalar programas?

Eu não disse que não dá para instalar, eu disse que ele limita. E, de fato, esse foi o primeiro choque que tive após instalar o Bazzite.

Um modo diferente de pensar

Eu uso Linux já faz algumas décadas. Assim como muitos usuários Linux, tive minhas fases de distrohopping, de ricing, etc. Atualmente cheguei numa conclusão de que sei o que eu quero num sistema e, caso ele não tenha o que eu quero, o quanto eu estou disposto a mudá-lo. Digo isso para deixar claro que não é a minha primeira vez usando Fedora, mas minha experiência é maior em sistemas baseados em Ubuntu.

E pouquíssimo da minha experiência anterior me preparou para o que eu veria no Bazzite.

Deixa eu voltar um pouco.

Assim que instalei o Bazzite, eu comecei a testar os jogos na minha biblioteca Steam. Por ser um sistema com foco nisso, não seria diferente. E fui felizmente surpreendido pelo que vi. Steam e Lutris já vêm instalados por padrão, e configurados com drivers e Wine. Todos[2] os jogos rodaram sem problema.

Mas nem só de jogo vive o nerd. Eu preciso que meu notebook seja útil para outras coisas. Parti a aprender a instalar programas.

Pacotes amassados

Como diabos eu instalo um programa num sistema que não posso mexer no sistema? Bom, foi aí que tive que aprender a usar flatpak para tudo.

Nas minhas idas e vindas no Linux eu já usei flatpak, não vivo numa caverna, mas sempre preferi instalar os pacotes .deb quando possível. Esse era um dos motivos que me manteve em sistemas Ubuntu. O suporte a .deb é o melhor por parte de vários projetos e empresas.

Mas a grande vantagem do Flatpak é que ele é agnóstico de distro. Se for Linux, dá pra usar. Além disso, ajuda que a maioria dos programas já instalados no Bazzite são pacotes Flatpak. A grande maioria dos programas que eu preciso para o meu dia a dia eu consegui instalar via loja de aplicativos, que busca no catálogo do Flathub.

Único que eu não achei foi o [onedriver][one01], uma ferramenta que faz o serviço Onedrive funcionar no Linux. Como ele precisa montar e monitorar coisas do sistema de arquivos, eu vejo como pode ser difícil empacotar em um pacote baseado em container como um flatpak.

Sabe outra coisa que descobri que é bem difícil usar via flatpak? Ambientes de desenvolvimento.

Desenvolvendo no Bazzite

Primeiro problema que tive foi instalar editor de código mais comum de todos: Visual Studio Code. Tudo que eu tentava usar no vscode ele reclamava de algo. Imagina uma IDE mais complexa?

Meu primeiro pensamento foi migrar de distro. A equipe que fez o Bazzite tem um outro sistema chamado Bluefin, cuja versão "DX" tem como foco desenvolvimento.

Aí me apareceu a próxima boa surpresa, rodei um comando e o meu Bazzite se transformou num Bluefin. Com vários programas de desenvolvimento já instalado: vscode, podman desktop, etc. Com docker e IDEs da Jetbrains a uma linha de comando de distância.

O comando foi o seguinte:

user@localhost $ 
rpm-ostree rebase ostree-unverified-registry:ghcr.io/ublue-os/bluefin:gts

O problema que eu tive foi que, apesar do que o Bluefin seja ótimo para desenvolvimento, na época que eu fiz isso ele não tinha um suporte tão bom para jogos. Atualmente ele até tem um script para instalar os pacotes de jogos, mas isso não estava lá ano passado.

Além disso, o próprio Bluefin recomenda o desenvolvimento usando devcontainers, incluindo o devpod instalado por padrão.

Por isso, ao invés de tentar tornar o Bluefin mais próximo do Bazzite, decidi fazer o caminho inverso.

Ah! E pra voltar ao Bazzite bastei usar o comando:

user@localhost $ 
rpm-ostree rebase ostree-unverified-registry:ghcr.io/ublue-os/bazzite-gnome-nvidia:stable

UPDATE 15/06/2025

Bazzite criou uma versão DX (Developer eXperience) com Docker e VsCode instalados por padrão. O que torna o sistema um pouco mais próximo do Bluefin com o script que eu comentei.

Saiba mais em: https://dev.bazzite.gg/

Meu sistema

Então, aqui eu quero listar o que instalei para tornar o sistema que estou usando há meses agora.

Jetbrains

Eu utilizo duas IDEs da Jetbrains no dia a dia. Webstorm principalmente, mas às vezes brinco com C# no Rider. Além disso, gosto de usar o Gateway para devcontainers.

Para o Webstorm e Gateway, não tive problemas. Instalei o Jetbrains Toolbox e esqueci.

Para o Rider foi um pouco diferente. Visto que eu não queria instalar o dotnet ou mono nativamente. Nesse caso, eu instalei os seguintes pacotes flatpak:

Vale lembrar que esse Rider não é empacotado nem suportado pela Jetbrains. Mas quebra o galho. Além disso, se você precisar de outras versões do dotnet, basta procurar no flatpak por org.freedesktop.Sdk.Extension.dotnet* para saber os pacotes disponíveis

user@localhost $ 
flatpak install --user flathub com.jetbrains.Rider org.freedesktop.Sdk.Extension.dotnet9 org.freedesktop.Sdk.Extension.mono

VS Code

Não uso tanto o VSCode assim, mas ainda é um ótimo editor de código para escrever scripts quando não quero abrir uma IDE completa. Pra isso, resolvi usar o distrobox, que já vem instalado por padrão no Bazzite.

O distrobox é basicamente um 'Linux Subsystem for Linux'. Ele sobe um container no podman e configura tudo para parecer que você tá usando um outro Linux dentro do seu terminal. Assim, instalei o Ubuntu e instalei o vscode nele.

Não vou me extender muito, mas basicamente eu fiz um arquivo ~/distrobox.ini com o seguinte:

[desenvolvimento]
image=ubuntu:rolling
pull=true
additional_packages="git libglib2.0-bin"
exported_apps="code"
exported_bins="/usr/bin/code"
# nvidia=true
# VS Code #
init_hooks=wget -O code.deb "https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64";
init_hooks=apt install ./code.deb -y;
init_hooks=rm ./code.deb;
# End VS Code#

E subo o container usando o comando

user@localhost $ 
distrobox assemble create

JavaScript e TypeScript

Não tive problema com runtimes javascript porque eles conseguem rodar a nível de usuário. Uso principalmente deno, que funciona como um arquivo autocontido, e no caso do Nodejs basta usar nvm.

OneDriver

Onedriver foi o único programa que resolvi instalar nativamente, até porque ele não tem outra opção. Para isso, eu usei a válvula de escape do Bazzite.

user@localhost $ 
user@localhost $
user@localhost $
sudo dnf5 copr enable jstaf/onedriver # habilita o repositório do onedriver rpm-ostre install onedriver # instala o onedriver systemclt reboot # reinicia para aplicar as mudanças

Conclusão

Você deve ter percebido que durante o texto eu tentei não usar a palavra "distro" ou "distribuição". A equipe do Bazzite tenta se distanciar dessa palavra porque, segundo eles, há um monte de preconcepções que vem com essa palavra. E eu concordo em partes com eles. O fato que instalei 90% dos meus programas usando flatpak, e que consegui mudar de Bazzite para Bluefin e de volta para Bazzite sem precisar formatar ou perder meus arquivos mostra que é, de fato, uma experiência diferente das outras distros que eu já usei.

E nessas aventuras nos dois sistemas, eu conheci vários programas interessantes que devo escrever a respeito no futuro, como é o caso do Pika Backup.

Uma última dica que eu dou se você vai usar uma distro imutável como SteamOS, Silverblue, Bazzite etc, é instalar os pacotes como usuário (isto é, flatpak install --user ou selecionar Flatpak (User) na loja de aplicativos). Isso ajuda a você entender o que foi você instalou e o que veio com a instalação.

Obrigado pela atenção, e que a Força imutável esteja com vocês.


  1. Pelo menos a minha versão, com Gnome. A versão com KDE Plasma se baseia no Kinoite ↩︎

  2. Dentro da limitação do notebook, lógico ↩︎


Comentários

Você pode adicionar o seu comentário respondendo a esse toot no Mastodon da sua conta no Mastodon, CalcKey, Akkoma, PixelFed, ou qualquer outra rede social com suporte a ActivityPub.