Dici Bcachefs, intendi polemica: anche la distinzione tra maiuscole e minuscole diventa un caso nel Kernel Linux

Bcachefs è appena rientrato nei cicli di sviluppo del Kernel Linux dopo la sospensione imposta dal Code Of Conduct al suo sviluppatore Kern Overstreet, che è già tempo per una nuova e accesissima disputa su una questione apparentemente di poca rilevanza: i filesystem che non considerano differenze di case, ossia maiuscole e minuscole, nei nomi file e cartelle.

La discussione coinvolge il manutentore di Bcachefs, Overstreet, e niente meno che Linus Torvalds in persona, ed un utente di Slashdot ha pensato bene di riassumere il dialogo che è tristemente divertente da leggere e di cui riportiamo le fasi salienti:


Torvalds: I nomi di file case-insensitive sono un errore gravissimo, non avresti mai dovuto implementarli. Il problema non è stata la mancanza di test, ma l’introduzione degli stessi in primo luogo. E cercare poi di “farlo bene” ha solo peggiorato tutto, perché non esiste un “modo giusto” di farlo: tentare di sistemarlo finisce per attribuire significati magici a sequenze di byte casuali […] il filesystem, fatto coi piedi, finisce comunque per farlo corrispondere. Perché chi implementa la case insensitivity INVARIABILMENTE fa cavolate tipo ignorare i caratteri non stampabili, e così “case insensitive” diventa anche “insensibile ad altre cose […] Dannazione. La sensibilità al case è un BUG. Non riesco a capire come ci sia ancora gente che lavora sui filesystem e pensa che sia una feature. È come se venerassero ancora il vecchio filesystem FAT al punto da volerlo ricreare — ma male.


Qui c’è la prima provocazione di Torvalds, il quale nella sostanza spiega come molti utenti non si aspettano che document.txt e Document.txt siano due file diversi! E quindi dal punto di vista dell’esperienza utente, la sensibilità al case può sembrare un bug, perché porta a errori difficili da capire e risolvere. Ovviamente da qui la discussione si accende:


Overstreet: Esiste una “necessità riconosciuta” per avere directory case-insensitive. (Quindi non voglio sentire lamentele su quanto “fanno schifo”. Io voglio che funzionino, che il codice sia pulito, mantenibile e che non mi faccia sanguinare gli occhi ogni volta che devo fare debug.)

Torvalds: Il motivo per cui abbiamo separato quel codice è semplice: se un giorno chi lavora sui filesystem si illuminerà e implementerà una vera e ben progettata case insensitivity, allora potremmo ripensarci. Ma non ho mai visto nemmeno una vaga traccia di questo. Ho visto solo codice scadente che non capisce né come funziona UTF-8, né tantomeno come funziona Unicode (o meglio: come non funziona — gente che usa funzioni di confronto Unicode senza la minima idea delle implicazioni).

Overstreet: Visto che non spieghi come secondo te i filesystem sbagliano, quello che stai facendo è solo parlare a vanvera. Io non ho visto nulla di rotto nella gestione della case insensitivity. E onestamente non penso che i problemi di sicurezza siano più rilevanti, visto che ci stiamo progressivamente allontanando da directory condivise tra utenti diversi — tipo /tmp — perché hanno già causato abbastanza guai da sole…

Torvalds: Il punto è che non puoi assolutamente rendere la ricerca case-insensitive il percorso veloce…

Overstreet: È esattamente quello che fa il codice della dcache, ed è proprio lì che stanno i problemi…


Il punto di Torvalds, è semplice: in un filesystem (e in particolare nel meccanismo della dcache di Linux, che serve a velocizzare l’accesso ai file), la ricerca dei file deve essere il più veloce possibile. La ricerca “normale”, cioè quella case-sensitive (dove file.txt e File.txt sono due file diversi), è semplice: basta confrontare le stringhe byte per byte senza fare trasformazioni o conversioni strane.

Per un filesystem case-insensitive (dove file.txt e File.txt sarebbero visti come lo stesso file), il confronto dei nomi diventa molto più complicato:

  • Devi normalizzare i caratteri (gestire maiuscole/minuscole correttamente).
  • Devi tener conto delle regole Unicode (che sono estremamente complesse).
  • E, come se non bastasse, tutto questo costa tanti cicli CPU in più.

Da qui le cose, per così dire, “vanno a sud”:


Torvalds: Credo che tu sia confuso e non sappia di cosa stai parlando. Faresti meglio ad andare a studiare come funziona davvero la dcache.

Overstreet: No, quello che ho scritto descrive esattamente come funzionano le ricerche case-insensitive nella dcache. Vai a vedere.

Torvalds: Kent, guarda che io ho scritto la maggior parte di quel codice, e ora tu sostieni che la gestione case-insensitive sia stata pensata come percorso veloce…

Overstreet: Si sta parlando di ricerche case-insensitive, e giuro che mi mangerò una scarpa se sei stato tu a scriverlo… Stai facendo finta di non capire? Sto dicendo che la gestione case-insensitive è una combinazione di overengineering e cattiva progettazione. Non sto dicendo che sia più veloce delle ricerche case-sensitive, sarebbe una follia.

Torvalds: Prepara la scarpa. Quel codice schifoso con d_compare e d_hash risale ai tempi andati. A occhio direi al 1997, ed è stato integrato nella versione 2.1.50… Se ti ritrovi con alias nei dentry, probabilmente stai facendo qualcosa di sbagliato.

Overstreet: Sì, Al mi ha appena fatto notare generic_set_sb_d_ops()… E tu non hai notato che le critiche che facevo alla dcache non avevano senso, perché in realtà il funzionamento che descrivevo era proprio quello reale? Ahah.

Torvalds: Questo è un modo molto buffo per dire: “Oh, Linus, avevi ragione fin dall’inizio quando hai smascherato le sciocchezze che stavo dicendo”…


E la questione, per così dire, finisce qui, anche se in realtà sta ancora proseguendo nel thread originale e chissà come andrà a finire per davvero.

La speranza di tutti è che non si finisca (ancora) a colpi di Code Of Conduct.

Da sempre appassionato del mondo open-source e di Linux nel 2009 ho fondato il portale Mia Mamma Usa Linux! per condividere articoli, notizie ed in generale tutto quello che riguarda il mondo del pinguino, con particolare attenzione alle tematiche di interoperabilità, HA e cloud.
E, sì, mia mamma usa Linux dal 2009.

14 risposte a “Dici Bcachefs, intendi polemica: anche la distinzione tra maiuscole e minuscole diventa un caso nel Kernel Linux”

  1. Avatar Roberto Rossi

    Dal mio punto di vista se Linux fosse un concorrente di Windows(sui normali pc) allora un filesystem che ignora la differenza tra maiuscole e minuscole sarebbe un significativo passo avanti. Ma visto che linux, e in genere il mondo linux, non ha alcuna intenzione di confrontarsi in questo ambito mi sembra che questa funzionalità non apporti alcun miglioramento.
    Una parola la voglio dire anche sull'atteggiamento del Sig.Torvalds. Quando leggo messaggi come quelli riportati provo una profonda tristezza. Quanta intolleranza. Mi auguro che chi verrà dopo di lui avrà un atteggiamento molto diverso.

  2. Avatar Raoul Scarazzini

    @robertorossi73:disqus penso ti sia risposto da solo ad entrambe le questioni: Linux non ha alcuna esigenza di misurarsi con i "normali PC", o meglio, vi si misura senza alcuna convinta sponsorizzazione e quindi i problemi dell'utente desktop medio non sono minimamente considerati.
    Sull'atteggiamento di Torvalds, c'è poco da fare, non cambierà, ed il fatto che possa abdicare è totalmente da escludere. Scriverà, commenterà e gestirà le cose finché avrà fiato in corpo per i prossimi 100 anni.

  3. Avatar Black_Codec

    Posso dire che in realtà sul case ha ragione? In nessun caso A è uguale a B e quindi perché B dovrebbe essere uguale a b? Purtroppo spesso si ignora la rappresentazione di ciò che stiamo vedendo… Anche solo paragonando a livello di ascii code ti rendi conto che fare un match A == a non è banale… Se poi, come spiega, ci metti in mezzo unicode diventi pazzo e finisci per fare le cavolate. La soluzione sarebbe forzare un case fisso ma che vantaggi porterebbe?

  4. Avatar JustATiredMan
    JustATiredMan

    A mio modo di vedere, un fs che si voglia definire "enterprise" non può e non deve essere case Insensitive.
    Un fs di questo tipo non può avere motivi di incoerenza e inesattezza che possono creare le circostanze per una perdita di dati. Il case insensitivity può essere una di quelle. Quando gli fs avevano solo nomi ascii 8 bit, forse si poteva anche fare, ma adesso con gli Unicode e gli UTF-8 pure multibyte, diventa troppo complicato.
    L'unica reale ragione di avere il case insensitive è solo per compatibilità versi pc e mac, ma allora si può delegare la gestione al protocollo di condivisione (samba/afp).

  5. Avatar Raoul Scarazzini

    @BlackCodec:disqus lui ha ragione praticamente sempre nei casi in cui prende una posizione di carattere tecnologico, come sempre il problema sono i modi, ma con Overstreet è un bel match 🙂

  6. Avatar Giok
    Giok

    Alla fine si farà come dice Torvalds, lo sanno tutti che al dittatore benevolo non gli devi "rompere il case" 🙂

  7. Avatar Raoul Scarazzini

    Concordo. Il fatto di dover coesistere con il peccato originale dei vari FAT/NTFS non giustifica nuovi obrobri simili…

  8. Avatar Roberto Rossi

    Dipende da cosa stai realizzando e per chi lo stai facendo. Da un punto di vista prettamente tecnico, in questo caso, l'efficienza prevale quindi non ha senso implementare un file system dove "a" è uguale ad "A". Se però il sistema fosse rivolto a un tipo di utenza diverso, la maggior parte degli utilizzatori di PC di questo pianeta, allora distinguere le maiuscole dalle minuscole è un problema.

  9. Avatar Roberto Rossi

    Certo che si può e, magari non in questo caso, ma alle volte si deve andare contro il "caro leader" di turno. In ogni caso nessuno è indispensabile anche perchè l'essere umano, per sua natura, ha un contratto a tempo determinato con la vita…

  10. Avatar JustATiredMan
    JustATiredMan

    potrei anche darti ragione, ma il prolema di fondo è che in tutti questi anni, e per quanto riguarda l'aspetto puramente tecnico, il Caro Torvalds ha sempre avuto ragione. E' chiaro che il buono fatto in precedenza non è garanzia di qualità per il futuro… però permettimi di essere fiducioso.
    Poi possiamo discutere dei toni non molto diplomatici, ma d'altronde chiunque di noi abbia lavorato, ha avuto o ha a che fare con qualche boss poco diplomatico in certi momenti… nella vita capita anche questo, e tutto sommato, non è la peggiore delle cose.

  11. Avatar JustATiredMan
    JustATiredMan

    No, è solo un casino. Alla lunga sono più i problemi che crea che quelli che risolve.
    In ambienti enterprise, questo è una fonte di incertezza.
    Se si ha necessità di gestire i files in maniera case insensitive, meglio farlo lato protocollo o applicativo, non a livello di filesystem.

  12. Avatar Black_Codec

    Si chiaro, però tralasciando i modi lui gli ha detto di leggersi bene le specifiche utf8… cosa che ho dovuto fare perfino io per scrivere codice per leggere e salvare file quindi immagino che chi scrive un file system lo abbia fatto ma in realtà direi di no…

  13. Avatar Black_Codec

    Non è un discorso di "senso" è un discorso tecnico, te la ragioni in ascii ma basta passare a utf-8 per capire che A e a sono profondamente differenti.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *