Pastas padrão do Linux. Fonte: https://www.howtogeek.com/wp-content/uploads/2012/06/ximage351.png.pagespeed.gp+jp+jw+pj+ws+js+rj+rp+rw+ri+cp+md.ic.ci8pg579c9.png

Precisamos mudar a FHS!

Os usuários de Linux mais avançados devem estar acostumados com a organização de diretórios de seu sistema operacional, que difere em muito daquela adotada pelo sistema da Microsoft, podendo confundir quem está usando o sistema pela primeira vez.

A organização das pastas no Linux é governada pela especificação Filesystem Hierarchy Standard, que é seguida pela maioria das distribuições atualmente existentes, com poucas modificações. O padrão, cuja última revisão se deu em 2004 2015, remonta às origens do Unix original e, para muitos, é algo perfeito e imutável.

No entanto, atualmente, percebo que o padrão adotado pela FHS é demasiada e desnecessariamente complexo e ineficiente. Além de confundir usuários novatos, a FHS dificulta o trabalho de desenvolvedores e de mantenedores de distros, que precisam estar a par do papel de cada diretório no sistema de arquivo. Isso não seria um grande problema se, atualmente, alguns desses diretórios não fossem totalmente redundantes e desorganizados. Senão, vejamos alguns poucos exemplos:

  • Qual a real necessidade prática de termos uma pasta /bin e outra /sbin? Ambas armazenam programas utilizados nos estágios iniciais do boot, com a diferença de que a segunda tem utilitários que requerem privilégios de root. Essa divisão é realmente necessária?
  • É mesmo preciso termos uma pasta /media e outra /mnt, sendo que antigamente tínhamos apenas a /mnt?
  • A pasta de configurações do sistema, /etc, é totalmente desorganizada. Basta perceber que, se você quiser configurar os servidores DNS do seu sistema, deve editar o arquivo /etc/resolv.conf, mas se quiser configurar as placas de rede, o arquivo é /etc/network/interfaces. Ambos os dois arquivos estão relacionados a redes, mas em locais diferentes.
  • Isso sem falar na pasta do usuário. Se você acha que sua pasta pessoal é organizada, mande seu gerenciador de arquivos exibir os arquivos ocultos; você verá que sua pasta está cheia de arquivos de configuração, jogados lá sem critério algum: alguns ficam na própria pasta enquanto outros, dentro de sua própria subpasta.
  • A pasta /dev é outra que armazena os links para dispositivos sem critérios: partições de disco ficam ao lado de placas de som e de terminais virtuais.
  • Os programas estão espalhados por todo o sistema: /usr, /usr/local, /opt, sem falar nos já mencionados /bin e /sbin.

Embora provavelmente alguém vá aparecer aqui para justificar essa desorganização com razões históricas e teóricas, o fato é que nem todos estão contentes com a FHS:

Como seria a organização ideal?

É claro que mudar a organização das pastas não seria algo simples, pois além de exigir a cooperação da maioria dos grandes players do mercado, também necessitaria de mudanças profundas na forma como os programas são compilados. Indo para o campo dos devaneios, porém, para mim o sistema poderia ser organizado em apenas seis pastas, separadas por áreas, inspiradas na organização do GoboLinux:

  •  A pasta /Applications reuniria todos os programas disponíveis para o usuário final. Sua organização também seria simples: dentro dessa pasta, haveria uma pasta para cada programa, separado por sua versão. Por exemplo: /Applications/firefox-53.0 armazenaria os arquivos do navegador Firefox, versão 53. Uma versão mais nova (ou mais antiga) poderia ser instalada lado a lado ou em seu lugar, se a pasta fosse apagada primeiro. Links simbólicos poderiam ser criados para indicar versões padrão.
    • Além disso, a pasta de cada aplicativo teria sua própria estrutura de pastas e de arquivos necessária para rodá-lo. Logo, na pasta, também ficariam todas as bibliotecas e arquivos de configuração daquele programa, eliminando em grande parte os problemas com dependências.
    • Opcionalmente, poderiam-se criar subpastas para reunir suítes de aplicativos, por exemplo: /Applications/KDE poderia conter as pastas de todos os aplicativos do KDE, evitando que estas ficassem soltas na pasta principal.
    • Haveria uma pasta /Applications/Services, que teria as pastas de todos os daemons do sistema, como por exemplo /Applications/Services/MySQL.
  • A pasta /Data armazenaria dados e informações dos aplicativos e do sistema, correspondendo às pastas /var, /tmp e/srv;
  • A pasta /Storage armazenaria todos os pontos de montagem de discos, de partições e de dispositivos removíveis.
  • A pasta /System conteria tudo aquilo que é necessário para inicializar e executar o sistema. Desta forma, teríamos:
    • /System/Binaries teria todos os arquivos binários utilizados pelo sistema, independente de suas permissões, correspondendo a /bin e a /sbin.
    • /System/Boot conteria os arquivos necessários para inicializar o sistema;
    • /System/Devices armazenaria links para dispositivos, sendo correspondente à pasta /dev, porém os dispositivos seriam organizados em subpastas. Exemplo: /System/Devices/Storage/sda01.
    • /System/Libraries teria todas as bibliotecas de uso comum pelos programas;
    • /System/Modules armazenaria os módulos do kernel, contendo subpastas para cada versão de kernel instalada;
    • /System/Settings corresponderia ao /etc, com a diferença de que, aqui, estariam apenas arquivos relacionados à configuração do sistema, organizados em pastas de acordo com sua área: /System/Settings/Network teria todos os arquivos de configuração de redes.
  • Os usuários teriam suas pastas pessoais em /Users, com a única diferença de que, dentro dessas pastas, haveria uma pasta oculta /Users/usuario/.Settings, que armazenaria os arquivos de configuração pessoais dos aplicativos instalados, cada um dentro de uma pasta, mesmo que houvesse apenas um arquivo. Desta forma, se um aplicativo fosse desinstalado, bastaria apagar sua pasta correspondente na pasta de cada usuário para uma limpeza completa.
  • Adicionalmente a estas cinco pastas, poderia haver uma pasta /root para servir de pasta pessoal do usuário root.

E você, gostou da ideia? Que tal começarmos a tirarmos-na do papel?

  • André Machado

    Professor de Matemática formado pela UFRGS e entusiasta de tecnologia.

5 thoughts on “Precisamos mudar a FHS!

  1. A ideia é muito boa, poderia realmente ser uma proposta de alteração no FHS, apesar de que a adoção seria lenta, mas creio que, sustentável.
    OFF: o layout do site ficou muito bom, bela mudança.

  2. O OSX está mais próximo desse layout, já tem a /Applications e também o /System – embora com uma herança FHS – Applications Users dev net srv
    Library Volumes etc opt tmp
    Network bin home private usr
    System cores sbin var

  3. Se for para o bem comum, não vejo problemas com as alterações, a forma como a FHS é no começo confunde um pouco, mais depois se acostuma, o que teriamos que pensar é que seria uma mudança grande pois programas de legado não funcionariam, e não sendo muito contratrario, é basicamente a mesma estrutura do Windows, ajudaria os novatos, mais não os usuários antigos.

  4. A proposta é interessante, iria facilitar muito a vida dos desenvolvedores e também dos usuários. A grande questão é que envolveria uma mudança brutal e que necessitaria da adesão de toda a comunidade Linux. Será que todos estariam engajados nesta mudança?

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *