MacOS X não é case-sensitive?

OSX_case-insensitive

Acidentalmente acabei esbarrando neste curioso comportamento no MacOS X¹. Você também acreditava que fazer distinção entre maiúsculas e minúsculas, a tal da case sensitivity, fosse da natureza dos UNIX e seus derivados? Por este motivo resolvi pesquisar a respeito. 🙂

(¹) Ao menos na versão 10.6, o Snow Leopard, mas não deve ser diferente em outras versões.

É ou não é UNIX?

Aliás a primeira coisa que me veio em mente foi uma propaganda de 2002 da Apple argumentando que seu “novo” sistema operacional era um “bom” UNIX.

apple_unix_ad-s

E também me lembrei de pessoas comentando os motivos dele não ser assim tão “bom” e, claro, nem ser UNIX.

Que acontece?

Versão curta : Tem relação com o sistema de arquivos, o HFS Plus, que não distingue entre maiúsculas e minúsculas no nomes dos arquivos e diretórios, não há nada de errado com o interpretador de comandos (Bash, C Shell, etc) e você pode parar a leitura agora. 🙂

Versão longa : Acontece que o HFS Plus conserva por padrão um velho hábito do HFS (e antes ainda do ProDOS) de preservar a caixa no nome de arquivos e diretórios mas não fazer distinção nas operações. Algo lá da época do Apple II/Apple IIGS e dos Macintosh “Branca de Neve”:

OSX_hfs_insensitive

Este comportamento é parecido² com o do Windows nos sistemas de arquivos VFAT (alguém ainda usa?) como também NTFS.

(²) O resultado é o mesmo mas o funcionamento é um pouco diferente.

Comandos e parâmetros

Claro que a “insensibilidade” só se aplica aos nomes dos arquivos e aos diretórios, os parâmetros passados nos comandos continuam case-sensitive:

aphrodite:~ giovanni$ UNAME -A
UNAME: illegal option -- A
usage: uname [-amnprsv]
aphrodite:~ giovanni$ UNAME -a
Darwin aphrodite.local 10.8.0 Darwin Kernel Version 10.8.0:
Tue Jun  7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386

Até aí nada estranho, diversos comandos tem parâmetros diferentes para a letra em minúscula e em maiúscula.

Claro que não são todos os comandos que funcionarão corretamente independente do modo como estiverem grafados, alguns casos pode apresentar um comportamento errático:

aphrodite:~ giovanni$ whoami
giovanni
aphrodite:~ giovanni$ WHOAMI
uid=501(giovanni) gid=20(staff) groups=20(staff),
402(com.apple.sharepoint.group.1),401(com.apple.access_screensharing),
204(_developer),100(_lpoperator),98(_lpadmin),81(_appserveradm),
80(admin),79(_appserverusr),61(localaccounts),12(everyone)

Ué? Acontece que no MacOS X, diferentemente do Linux, os comandos id, groups e whoami correspondem ao mesmo binário só que “unidos” por um link dinâmico.

No caso específico do whoami ele é equivalente a usar “id -un” e o programa sabe que se for executado com este nome ele deverá se comportar desta forma ajustando corretamente os seus parâmetros — mas acontece que ele só verifica se argv[0] é igual a “whoami” mas não “WHOAMI”.

Porém, se você fizer esta maluquice:

aphrodite:~ giovanni$ WHOAMI -un
giovanni

Ele funcionará “corretamente”.

Curingas

Dentro da shell, quando você procurar por um arquivo individualmente a caixa dos caracteres será ignorada. Mas quando se usa curingas o retorno será  case-sensitive.– no exemplo vou me restringir ao ∗, pois é mais que suficiente.

OSX_curingas

E não é forçação de barra! Minha câmera fotográfica salva as imagens em formato JPEG grafando a extensão do arquivos somente em maiúsculas enquanto que meu celular o faz usando apenas letras minúsculas.

Há salvação?

É possível configurar uma partição HFS Plus para ser case-sensitive, ou não, no momento da sua criação. Tanto no MacOS X, usando o Disk Utility (que trabalha tanto com partições como com imagens de disco):

OSX_new_diskimage

Como em Linux, através das ferramentas do pacote hfsplus:

$ mkfs.hfsplus -h
usage: mkfs.hfsplus [-h | -w] [-N] [hfsplus-options] special-device
  options:
    -h create an HFS format filesystem (HFS Plus is the default)
    -N do not create file system, just print out parameters
    -s use case-sensitive filenames (default is case-insensitive)
    -w add a HFS wrapper (i.e. Native Mac OS 9 bootable)
    ...

Porém, pelo que entendi não parece ser uma boa ideia usar partições HFS Plus com o case-sensitive ligado. Pois as “coisas” (Sistema Operacional, Aplicativos etc) poderão não funcionar corretamente.

É ou não é?

Resolvi então testar usando imagem de disco formatada com o case-sensitive ligado.

OSX_hfsp_case_sensitive

Só para confirmar que o MacOS X pode não estar mas que ele é case-sensitive sim.

OSX_copy_fail

Claro, apesar de algumas reações adversas! 😀

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s