Добавить в корзинуПозвонить
Найти в Дзене
Борис Державец

Линус Торвальдс выражает свое неприятие к файловым системам, нечувствительным к регистру

Линус Торвальдс сегодня делится некоторыми из своих классических и прямолинейных мудрых мыслей о файловых системах с регистрозависимой / нечувствительной к регистру поддержкой файлов и папок. После того, как Bcachefs обнаружил сломанную поддержку регистрозависимости для своей реализации и теперь отправил ее на исправление на этой неделе для Linux 6.15, Линус написал длинный пост в списке рассылки ядра Linux, чтобы изложить свои взгляды на такую ​​функциональность регистрозависимости. Эта текущая проблема регистрозависимости Bcachefs также не является первым случаем, когда файловые системы Linux столкнулись с проблемами регистрозависимости. В прошлом были такие проблемы, как поведение регистрозависимости с эмодзи и другими специальными символами Unicode. Линус Торвальдс написал на LKML о своих чувствах по поводу изменения регистра файловой системы для файлов/папок, нечувствительных к регистру: Единственный урок, который нужно усвоить, заключается в том, что люди, работающие с такими фай

Линус Торвальдс сегодня делится некоторыми из своих классических и прямолинейных мудрых мыслей о файловых системах с регистрозависимой / нечувствительной к регистру поддержкой файлов и папок.

После того, как Bcachefs обнаружил сломанную поддержку регистрозависимости для своей реализации и теперь отправил ее на исправление на этой неделе для Linux 6.15, Линус написал длинный пост в списке рассылки ядра Linux, чтобы изложить свои взгляды на такую ​​функциональность регистрозависимости.

Эта текущая проблема регистрозависимости Bcachefs также не является первым случаем, когда файловые системы Linux столкнулись с проблемами регистрозависимости. В прошлом были такие проблемы, как поведение регистрозависимости с эмодзи и другими специальными символами Unicode.

Picture 1
Picture 1

Линус Торвальдс написал на LKML о своих чувствах по поводу изменения регистра файловой системы для файлов/папок, нечувствительных к регистру:

Единственный урок, который нужно усвоить, заключается в том, что люди, работающие с такими файловыми системами, никогда не учатся.

Нечувствительные к регистру имена — это неправильно, и вам вообще не следовало бы их делать. Проблема была не в отсутствии тестирования, проблема была в его реализации в первую очередь.

Проблема затем усугубляется «попыткой сделать это правильно», и в процессе это делается еще неправильно, потому что «правильного» не существует, но попытка сделать это придаст случайным байтам магическое значение.

И, кстати, все тесты в любом случае полностью сломаны. В последний раз, когда я видел, они на самом деле не тестировали все действительно интересные случаи — те, которые вызывают проблемы безопасности в пользовательской среде.

Проблемы безопасности, такие как «пользовательское пространство проверило, что имя файла не соответствует какому-то чувствительному к регистру шаблону». И затем эта дерьмовая файловая система в конечном итоге *в любом случае* соответствует этому шаблону, потому что люди, которые делают нечувствительность к регистру *НЕИЗБЕЖНО* будут делать что-то вроде игнорирования непечатаемых символов, так что теперь «нечувствительный к регистру» также означает «нечувствительный к другим вещам».

/* And then the shit-for-brains file-system ends up matching that pattern *anyway*, because the people who do case insensitivity *INVARIABLY* do things like ignore non-printing characters, so now "case insensitive" also means "insensitive to other things too". */

Примеры этого см. в коммитах

5c26d2f1d3f5 («unicode: не выделяйте особые регистры игнорируемых кодовых точек») и 231825b2e1ff («Revert "unicode: не выделяйте особые регистры игнорируемых кодовых точек"»)

Подсказка: ❤ и ❤️ — это два символа unicode, которые отличаются только игнорируемыми кодовыми точками. И знаете что? Безумные некомпетентные люди, которые хотят, чтобы эти два сравнивались одинаково, затем также будут сравнивать другие случайные - и, возможно, уязвимые для безопасности - файлы, просто потому что в них есть игнорируемые кодовые точки.

Так что теперь каждая программа пользовательского режима, которая проверяет, что она не касается специальных путей, по сути, открыта для того, чтобы ее обманули и заставили делать то, что она явно проверила и что она не должна делать. И нет, это не что-то необычное или странное. *Многие* программы делают именно это.

Черт возьми. Нечувствительность к регистру — это ОШИБКА. Тот факт, что люди из файловой системы *все еще* думают, что это функция, я не могу понять. Как будто они так почитают старую файловую систему FAT, что им приходится ее переделывать — ужасно.

See original paper ( это не моя провокация ) . Это то, что читают ИТ инженеры всего мира.

https://www.phoronix.com/news/Linus-Torvalds-Anti-Case-Fold

P.S. Я смягчил везде, где мог тон Торвальдса, но даже в такой редакции пост в LKML звучит не слишком полит-корректно.