Em 30 de novembro de 2010, David Collier escreveu:
Notei que no busybox os links estão distribuídos por essas quatro diretórios.
Há alguma regra simples para determinar em qual diretório cada um dos links deve estar…
Por exemplo, kill está em /bin, enquanto killall está em /usr/bin… Não vejo lógica nessa divisão.
Você provavelmente sabe que Ken Thompson e Dennis Ritchie criaram o Unix no PDP-7 em 1969. Em torno de 1971, eles fizeram upgrade para o PDP-11 com um par de discos RK05 (com 1,5 megabytes cada).
Quando o sistema operacional cresceu e deixou de caber no primeiro disco (onde estava localizado o sistema de arquivos raiz), eles moveram parte para o segundo, onde estavam os diretórios home (daí o ponto de montagem ser chamado de /usr — de usuário). Eles duplicaram todos os diretórios necessários do SO (/bin, /sbin, /lib, /tmp…) e armazenaram arquivos no novo disco, pois o antigo ficou sem espaço. Depois, tiveram um terceiro disco, montaram-no no diretório /home e moveram os diretórios home dos usuários para lá, permitindo que o SO ocupasse todo o espaço restante nos dois discos, que eram três megabytes inteiros (uau!).
Claro, eles tiveram que estabelecer uma regra de que 'quando o sistema operacional é carregado, ele deve ser capaz de montar o segundo disco no diretório /usr, então não se deve colocar programas como mount no segundo disco em /usr, caso contrário, teremos o problema do ovo e da galinha'. E foi simples assim. Isso se aplicava ao Unix V6 há 35 anos.
A separação entre /bin e /usr/bin (e todos os diretórios semelhantes) é uma consequência desses eventos, um detalhe de implementação dos anos 70, que há décadas é copiada por burocratas. Eles nunca se perguntaram por que, apenas faziam assim. Essa divisão deixou de fazer sentido ainda antes da criação do Linux, por várias razões:
- Na inicialização, utiliza-se initrd ou initramfs, que lida com problemas como 'este arquivo precisa estar disponível antes daquele'. Assim, temos já existe um sistema de arquivos temporário que é utilizado para carregar todo o resto.
- Bibliotecas compartilhadas (que foram adicionadas ao Unix pelos caras de Berkeley) não permitem que você altere o conteúdo de /lib e /usr/lib de forma independente. Essas duas partes devem corresponder uma à outra, caso contrário, elas não funcionarão. Isso não acontecia em 1974, pois naquela época havia uma certa independência devido à vinculação estática.
- Discos rígidos baratos ultrapassaram a barreira de 100 megabytes por volta de 1990 e, aproximadamente ao mesmo tempo, surgiram programas para redimensionar partições (o Partition Magic 3.0 foi lançado em 1997).
Naturalmente, como há uma divisão, algumas pessoas inventaram regras que justificam isso. Tipo, a partição raiz é necessária para várias coisinhas gerais do sistema operacional, enquanto em /usr devem ser colocados seus arquivos locais. Ou em / é colocado o que a AT&T distribui, enquanto em /usr está o que seu sistema, IBM AIX, Dec Ultrix ou SGI Irix adicionaram, e em /usr/local ficam os arquivos específicos do seu sistema. E depois alguém decidiu que /usr/local não era um lugar adequado para instalar novos softwares, então vamos adicionar /opt! Não ficaria surpreso se aparecesse /opt/local...
É claro que, ao longo de 30 anos, devido a essa divisão, várias regras interessantes específicas para determinados distribuições surgiram e desapareceram. Por exemplo, '/tmp é limpo na reinicialização, mas /usr/tmp não é'. (E no Ubuntu /usr/tmp nem existe, enquanto no Gentoo /usr/tmp é um link simbólico para /var/tmp, que agora segue essa regra e não é limpo na reinicialização. Sim, tudo isso aconteceu antes do tmpfs. Além disso, às vezes o sistema de arquivos raiz é somente leitura, e então não se deve escrever nada em /usr, mas sim em /var. Ou em / principalmente não se pode escrever, exceto no /etc, que às vezes tentaram mover para /var...)
Burocratas como a Linux Foundation (que absorveu o Free Standards Group durante a expansão anos atrás) documentam e complicam essas regras com prazer, sem nem tentar entender por que surgiram. Eles não percebem que Ken e Dennis apenas moveram parte do sistema operacional para o diretório pessoal deles porque o disco RK05 no PDP-11 era muito pequeno.
Estou praticamente certo de que o busybox apenas coloca arquivos assim, como historicamente se estabeleceu. Não há razão real para continuar fazendo isso. Pessoalmente, apenas crio links de /bin, /sbin e /lib para diretórios semelhantes em /usr. Afinal, as pessoas que trabalham com software embarcado geralmente tentam entender e simplificar…
Fonte: habr.com
