il file system senza distinzione tra maiuscole e minuscole ci consente di risolvere importanti colli di bottiglia per le applicazioni trasferite da altri sistemi operativi
non mi raggiunge il cuore e non riesco a capire come il processo di normalizzazione e casefolding ci permetta di ottimizzare la nostra memoria su disco.
Wine, Samba e Android ce l'hanno per fornire una semantica del file system senza distinzione tra maiuscole e minuscole. Se il filesystem sottostante fa distinzione tra maiuscole e minuscole, ogni volta che una ricerca con distinzione tra maiuscole e minuscole fallisce, Wine et al. deve eseguire la scansione di ogni directory per dimostrare che non ci sono corrispondenze senza distinzione tra maiuscole e minuscole (ad es. se si cerca /foo/bar/readme.txt
fallisce, devi eseguire un elenco completo delle directory e un confronto con maiuscole e minuscole di tutti i file in foo/bar/*
e tutte le directory in foo/*
e /*
).
Ci sono alcuni problemi con questo:
- Può diventare molto lento con percorsi profondamente nidificati (che possono generare centinaia di chiamate FS) o directory con decine di migliaia di file (ad es. memorizzazione di backup incrementali su SMB).
- Questi controlli introducono race condition.
- È fondamentalmente scorretto:se entrambi
readme.txt
eREADME.txt
esistono ma un'applicazione richiedeREADME.TXT
, quale file viene restituito non è definito.
Android è arrivato al punto di emulare la distinzione tra maiuscole e minuscole utilizzando FUSE/wrapfs e quindi SDCardFS nel kernel. Tuttavia, SDCardFS ha appena reso tutto più veloce spostando il processo nello spazio kenel†. Doveva ancora percorrere il filesystem (ed era quindi vincolato all'IO), introdurre condizioni di competizione ed era fondamentalmente malsano. Ecco perché Google ha finanziato† lo sviluppo della distinzione tra maiuscole e minuscole nativa per directory in F2FS e da allora ha deprecato SDCardFS.
Ci sono stati diversi tentativi in passato per abilitare le ricerche senza distinzione tra maiuscole e minuscole tramite VFS. Il tentativo più recente nel 2018 ha consentito di montare una vista senza distinzione tra maiuscole e minuscole del filesystem. Ted Tso ha specificamente citato i problemi con wrapfs per l'aggiunta di questa funzionalità, poiché sarebbe almeno più veloce e (credo) priva di race condition. Tuttavia, non era ancora valido (richiesta README.TXT
potrebbe restituire readme.txt
o README.txt
). Questo è stato respinto in favore dell'aggiunta del supporto per directory per l'insensibilità alle maiuscole e minuscole ed è improbabile che venga mai inserito in VFS††.
Inoltre, gli utenti si aspettano la distinzione tra maiuscole e minuscole, quindi qualsiasi sistema operativo orientato al consumatore deve fornirla. Unix non poteva supportarlo in modo nativo perché Unicode non esisteva e le stringhe erano solo sacchi di byte. Ci sono molte critiche valide su come è stata gestita la piegatura delle maiuscole in passato, ma Unicode fornisce una funzione di piegatura delle maiuscole immutabile che funziona per tutte le impostazioni locali tranne una singola (turco, e anche in questo caso sono solo due punti di codice). E il filesystem b-tree è l'unico posto ragionevole per implementare questo comportamento.
†AFAICT
††Ho inviato un'e-mail a Krisman, l'autore sia delle ricerche senza distinzione tra maiuscole e minuscole basate su VFS sia del supporto senza distinzione tra maiuscole e minuscole per directory su EXT4 e F2FS.
Altri sistemi operativi hanno un filesystem senza distinzione tra maiuscole e minuscole.
Ad esempio:MacOS consente la distinzione tra maiuscole e minuscole (come impostazione predefinita) o la distinzione tra maiuscole e minuscole. Adobe Photoshop e Adobe Lightroom non funzionano bene con il file system con distinzione tra maiuscole e minuscole. Ciò significa che all'interno dei programmi Adobe ci sono probabilmente percorsi codificati, scritti in modi diversi (magari "Documents" e "documents" nelle diverse librerie, o solo qualche volta vengono applicati dei filtri (es. percorso dei dati). A nessuno importava, perché funzionava e basta.
Quindi, se adesso vuoi portare un programma realizzato per qualche comune sistema operativo proprietario della nostra epoca, o dovresti sistemare tutti i percorsi, in modo da avere sempre un uso consistente dei casi di nome file, oppure preferisci avere un filesystem che gestisca questi per te.
Adobe non potrebbe farlo per MacOS, quindi aspettati che le cose siano molto più difficili (e costose) per altri fornitori. Consulta https://helpx.adobe.com/creative-suite/kb/error-case-sensitive-drives-supported.html