Лінус Торвальдс розкритикував регістронезалежні файлові системи

Творець Linux Лінус Торвальдс нещодавно висловив різку критику на адресу розробників файлової системи Bcachefs після їхнього повідомлення про виправлення помилки, пов’язаної з режимом без врахування регістру в іменах каталогів. На його думку, проблема не є новою, і розробники, схоже, не зробили висновків із попередніх помилок.

Суть проблеми

Суть питання полягає в особливостях стандарту Unicode, який є дуже гнучким і водночас складним. Його система так званого «case folding» — тобто приведення символів до єдиного регістру — має безліч винятків і крайніх випадків, які майже неможливо врахувати в повному обсязі. У результаті поведінка програми може не збігатися з тим, як аналогічні символи обробляє конкретна файлова система. Наприклад, деякі символи можуть виглядати однаково для користувача, але мати різне технічне подання на рівні байтів, і навпаки.

Торвальдс вважає, що спроби зробити регістронезалежну обробку «правильною» лише ускладнюють ситуацію: розробники змушені надавати особливе значення окремим байтам або послідовностям символів, що, у свою чергу, породжує нові класи помилок і потенційних вразливостей. Це, зокрема, може вплинути на безпеку — коли програми очікують одне ім’я файлу, а система трактує його інакше.

На завершення Торвальдс нагадав, що часи файлової системи FAT, у якій регістронезалежність була нормою, давно позаду. Він наголосив: сучасні файлові системи повинні рухатися вперед, а не відтворювати архаїчні підходи, які в нинішніх умовах можуть більше зашкодити, ніж допомогти.

Нижче можете ознайомитися з листом Торвальдса в розсилці розробників Linux 👇

Єдиний висновок тут — розробники файлових систем нічому не вчаться.

Імена без врахування регістру — це катастрофічна помилка, яку взагалі не слід було допускати. Проблема не в недостатньому тестуванні — проблема в тому, що ви взагалі вирішили це реалізувати.

А далі ситуація ще більше погіршується, коли люди намагаються «зробити правильно» те, що в принципі неможливо зробити правильно. У результаті виходить ще гірше: довільні байти починають використовуватись як «магічні» значення.

І, до речі, тести також повністю зламані. Востаннє, коли я їх переглядав, вони не охоплювали справді цікаві випадки — ті, що можуть призвести до уразливостей у користувацькому просторі.

Наприклад, такі уразливості: додаток у user-space перевіряє, що ім’я файлу не збігається з якимось безпечним шаблоном. А файловій системі з «регістронезалежністю» все одно вдається обійти цю перевірку — бо люди, які реалізують регістронезалежність, ЗАВЖДИ роблять речі на кшталт ігнорування непечатних символів тощо. У підсумку «регістронезалежність» перетворюється на «незалежність від чортзна-чого».

Приклади дивіться в комітах:

5c26d2f1d3f5 («unicode: Don’t special case ignorable code points»)

та

231825b2e1ff («Revert ’unicode: Don’t special case ignorable code points’»)

— і плачте.

Підказка: ❤ і ❤️ — це два різні Unicode-символи, що відрізняються лише за «ігнорованими» кодовими точками. І вгадайте що? Божевільні бездарні розробники, які хочуть, щоб ці два символи вважались однаковими — випадково роблять так, що інші (можливо, критично важливі з погляду безпеки) імена файлів також починають вважатися однаковими — просто через наявність цих ігнорованих символів.

У результаті кожен застосунок, який фільтрує шляхи, щоб не працювати з певними директоріями — може бути обманутий і змушений працювати з файлами, яких мав би уникати. І ні, це не якась рідкісна аномалія, а звичайна практика: багато програм покладаються на такі перевірки.

Чорт забирай. Регістронезалежність — це БАГ. Той факт, що розробники файлових систем досі вважають це фічею, для мене незрозумілий. Таке враження, що вони настільки обожнюють древню файлову систему FAT, що не можуть не спробувати її відтворити — тільки ще гірше.

Що думаєте з цього приводу? Регістронезалежні ФС і справді не мають права на життя чи все таки шанс в них є?

👍ПодобаєтьсяСподобалось6
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Лінус Торвальдс розкритикував регістронезалежні файлові системи

Ну він просто старий дід-пердун, а в старих бздунів(хоча тут лінуксятніків) робота така, критикувати. Все що він говорить треба пропускати мимо вух, бо конкретики там приблизно нуль.

Лінус ...
Все що він говорить треба пропускати мимо вух

якщо буквально все повз вуха, то це можна пpочитати як «поверніть нам fat dos», і тоді природньо стає питання — хто саме «старий дід»)

Це у вас конкретики нуль. А Лінус багато коли має рацію.

Назви хоча б один випадок коли торвальдс був правий? Єдине, що мені подобається в Торвальдсі, це те, що він не схожий на типового представника GNU/Linux каммуніті, тобто він не комуняка, іноді навіть здається, що старий шкодує, що повівся в свій час на розказні столлмана і зробив лінукс гнутим, замість того, щоб на ньому зробити статки. Але історію вже не переписати, і участь лінуса, це робити те що скажуть корпи, особливо нічого за це не отримуючи.

Назви хоча б один випадок коли торвальдс був правий?

Читайте LKML. Я не згадуватиму окремі випадки, бо їх тисячі. Просто вони не створюють, 99.9+%, публічного скандалу.

Я теж не згодний з багатьма його рішеннями. Подивіться хоча б на історію с kqueue vs. epoll — спочатку він лає брудними словами метод, що зробили в BSD, а через пару років тихо приймає таке ж по сути рішення, тільки в гіршому виконанні, від штатного підлизи — і маємо сучасний epoll. І всі зробили вигляд, що так і треба. Давно вже було, нове покоління іншого і не бачило;\ Але, повторюсь, більшість рішень помірковані і корисні.

Єдине, що мені подобається в Торвальдсі, це те, що він не схожий на типового представника GNU/Linux каммуніті, тобто він не комуняка

Ну так практика хоч якоїсь власної справи тут швидко пояснює, чому матеріальні питання мають бути задовільнені. Я не знаю, кого ви назвали «типовим представником», молодіж що сидить на батьківській шиї? Таких вже мало, вони всі мігрували у інші кола. Це у вас, мабуть, згадки 20річної давнини.

що повівся в свій час на розказні столлмана і зробив лінукс гнутим, замість того, щоб на ньому зробити статки.

У нього точно нічого б не вийшло при наявности конкурентів з BSD табору, і він це відмінно розуміє, так що ви тут собі щось навидумували. Тільки GPL модель дозволила зробити щось таке, що могло конкурувати з BSD — і далі він скористався своїм імʼям.

Але історію вже не переписати, і участь лінуса, це робити те що скажуть корпи, особливо нічого за це не отримуючи.

Я думаю, в нього платня більша в рази, ніж ви можете уявити.

токо на его детище работает практически весь интернет, миллиарды смартфонов и iot девайсов, да возраст берет свое и старые замашки, только вот чего добился ты по сравнению с ним?

Не став жирний, не облисів, не спився, не помер на війні, втратив всього два зуби і один орган.

Головний генератор трафіку в світі, а саме порнхаб, працює на freebsd

только половина трафа идет с ведроида gs.statcounter.com/os-market-share у потребителей порно

, пов’язаної з режимом без врахування регістру в іменах каталогів.

Важливий момент — слово «режим». Тобто це можливість, а не необхідність. Яку ти можеш або включити, або виключити.

Так, в UNIX case sensitive це стандарт. І звісно, що спроби його порушити можуть привести зі проблем зі софтом, який очікує цей стандарт. Але, я можу допустити, що цією опцією можуть скористатися ті, хто буде монтувати розділ під Windows також.

Він правий на 1000%.

Я викладав теж полемічну статтю з того ж приводу на Хабр, у мені були інші доводи, але зі схожими висновками. Я наполягав на проблеми підтримки у протоколах, і на загальну беззмістовність введення саме CI, коли інші відхилення, які навіть непомітні оком, дають різні імена:

> Почему файловые системы Windows различают «foo.docx», «foo. docx», «foо.docx», «foο.docx» и «fo​o.docx» (кто увидит разницу?), но не различают «foo.docx» и «Foo.docx»?

Підйом цієї теми на різних форумах показав, що є дуже багато людей, головним чином зі світу Windows, які агресивно підтримують цю «фічу» і релігійно не приймають її критику.

Щодо приклада Лінуса, тут все складніше. Нормально було б зробити, що принципи коллації і взагалі обмежень на імена файлів встановлюються для кожного каталога окремо (чи ієрархіями) — десь, наприклад, тільки ASCII і CI, десь ASCII + кирилиця і CS, десь без обмежень. Але щоб це так працювало в Linux — буде потрібно або включати стрьомні модулі в ядро, або писати фільтри на eBPF:) І ще треба буде окремий API для доступу у випадках, коли, наприклад, були створені файли AA і aa коли був CS, а тепер CI і не можна знайти звичайним API обидва окремо. Знову головний біль.

Він правий на 1000%

якби бути послідовним, то підтримки того функціоналу не булоб у першу чергу з ext4

% cat /sys/fs/ext4/features/casefold
supported
тригером пройтись (хоча і цілком справедливо) по case-insensitive в fs namespace — була мабуть всеж таки bcachefs (також цілком очікувано) зі своїм поламати щось що до неї не відноситься — але без драми в цьому випадку

Викладати статтю на руснявий хабр в 2024 році вважається нормальним?

потому что это в винду мигрировало с эпохи DOS FAT16 , где была только латиница, и это жуткое легаси стало нормой, как в юниксах в файловой системе запрещено использовать только null и /
Насколько помню в винде еще сохранились архаизмы, когда експлорером нельзя создавать или удалять файлы с названием NUL, PRN, AUX, COM*, LPT*

потому что это в винду мигрировало с DOS FAT16
...
в винде еще сохранились

про віндовс напряму Лінус не згадував, хоча по fat і пройшовся



легаси стало нормой, как в юниксах в файловой системе запрещено использовать только null и /

це релевантно до вибору utf8 (однієї з encodings серед unicode character set), але не до casefolding

потому что это в винду мигрировало с эпохи DOS FAT16

Проблема сильно древнее DOS. Тотальный CI был практически во всех разработках периода до Unix, и в заметной мере и вокруг Unix мира тоже (см. протоколы и форматы IETF, включая HTTP, HTML). Только примерно с 2000 люди начали понимать, какую цену платят за это.

Насколько помню в винде еще сохранились архаизмы, когда експлорером нельзя создавать или удалять файлы с названием NUL, PRN, AUX, COM*, LPT*

Так и сейчас любая программа, использующая не-UNC пути, от этого будет страдать, более того (свежайший MSDN):

> Do not use the following reserved names for the name of a file:

> CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, COM¹, COM², COM³, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, LPT¹, LPT², and LPT³.

Как вам, коллега, запрет на имя файла COM³? (Причём, COM⁴ уже под запрет не попал;))

А чтобы не страдать с этим, программа сама должна перевести в UNC, с полным путём и соответствующим удорожанием разбора. Ибо нормального лукапа от указанного каталога (как openat()) в винде не было и не будет.

по сути «именная» файловая система устарела сама по себе глядь на таблицу базы данных какой у строки таблицы «имя»?

т.е. грубо говоря но достаточно точно описание у файла должен быть «идентификатор» который позволяет запросить его физическое положение и содержание и дальше у файла можеть быть какой-то набор «мета данных» возможно какой угодно среди которых будет что-нибудь вроде «имя файла» а также рядом с ним «имя файла другое в юникоде без регистра etc»

собственно такие «мета данные» уже же ж есть это даты разные как на пример создания файла и последнего доступа к файлу а ещё права доступа и т.п.

в частности положение файла «в папках» почему это не должно быть собственно «мета данными»? а ну да оно уже по сути есть привет тот костыль в рамках устаревших понятий «файловая система прошлого века» как то «симлинки»

ЗЫ: как пример реализации та же ж программерская джира у каждой issue есть просто айди обычно это какая-то числовая комбинация инкрементально и есть также title и ещё такие issues могут иметь линки ещё и между собой а почему бы не иметь такого в «файловой системе» я имею в виду «линки как раздел мета информации» удобно ведь?

глядь на таблицу базы данных какой у строки таблицы «имя»?

ЗЫ: собственно внутренняя реализация списка в файлов в «директории» именно так же ж и выглядит просто таблица подряд у неё и «имён» то нет это просто «массив» просто по номеру а «имя» уже как отдельная поле этой «таблицы» в каждой «строке»

описание у файла должен быть «идентификатор»

ls -i

по сути «именная» файловая система устарела сама по себе глядь на таблицу базы данных какой у строки таблицы «имя»?

Имя файла это скорее имя таблицы. Или базы. А они как раз есть.

Про полезность произвольных метаданных — полностью согласен. Но метаданные метаданными, а без общей иерархии хранения тупо загнёмся. Уже были попытки сделать без неё, вон Джеф Раскин пытался — результат тяжело отрицательный.

а без общей иерархии хранения тупо загнёмся

это не иерархия хранения это иерархия поиска

а само хранение оно как раз плоское как мапа на сектора диска в связанном списке цепочки секторов

а вот всё остальное уже и есть фактическая именно надстройка над ним

т.е. беря уже иерархию поиска в том фишка что искать объект по имени как

/local/dou/53608/Otvet/Privet/commentI

это лишь поиск по имени как то ты в файле текста можешь прямо сказать искать тебе с учётом регистра или без учёта регистра искать слово или искать включение в текст etc.

как то скажем мы берём это символьное позиционирование иерархии поиска и задаём его как

/forums/topic/53608/#2963994

но при этом это на самом деле хвостик http url после имени сервера (а может чистого айпи) и по факту сервер получит его именно в таком «чистом» виде как

GET /forums/topic/53608/#2963994 HTTP/42

и разбиение «это» на кусочки лишь формальность ни чем по факту не формализованная (ок до момента где можно разделить на параметры и на ссылку отдельно в самом http rfc) и в своей реализации я могу просто гонять его через базу целиком просто как строку целиком

и ничего мне за это не будет ))

ЗЫ: вот смотри я поменял формальную иерархию со вложенностями на плоскую т.е. линейную

local.dou.53608.Otvet_Privet.commentI

и оппа у меня естественным путём всё та же ж база данных как

и в своей реализации я могу просто гонять его через базу целиком просто как строку целиком

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

ЗЫ: как пример как вариант реализации я беру nosql базу для прогона строк как key value из которых value будут просто мапиться на прямую на мой диск или какое там устройство конечного хранения и всё готово

ЗЫ: собственно более того с переходом от физических секторов к логическим этим мапингом уже отдельно занимается уже сам диск как ssd 146% и к.м.к. современные hdd уже тоже (последних 20 лет?) но это же ж по сути уже и есть та же ж самая база key value просто key там просто number

... осталось приделать к нему к number то самое

полезность произвольных метаданных

и всё готовое хранение ))

это не иерархия хранения это иерархия поиска

Ты этого не знаешь в общем случае. Самое простое — какой-то каталог может быть выделен в отдельную FS, которая может находиться где угодно, хоть на другом континенте, и иначе организована — например, с избыточным хранением в нескольких копиях.

Физический аналог — древние книги хранятся в отдельном помещении с особым климатом и спецдоступом.

[skip неверные выводы из ложного аргумента]

Но твой комментарий подсказывает про действительно типовой вариант — когда объекты хранятся по контрольным суммам, а иерархические пути поиска добавляются поверх них. Если так сделано (а достаточно часто это имеет смысл) — то это близко к твоему описанию.

Самое простое — какой-то каталог может быть выделен в отдельную FS, которая может находиться где угодно, хоть на другом континенте, и иначе организована — например, с избыточным хранением в нескольких копиях.

смотри какая проблема мы снова же ж возвращаемся к тому что твоя «файловая система» это именно лишь очень конкретно именно структуру поиска в которой прямо как ты пишешь какие-то отдельные «строки поиска» могут уходить вообще куда-то вовне в совсем другое

ты именно так буквально же ж и пишешь именно то что я тебе и говорю только теперь осталось разделять и определять более точнее что же ж такое «файловая система»

... и вот мы упорно подходим именно к тому что это именно что не система именно хранения ))

а иерархические пути поиска добавляются поверх них.

и именно это ты и описал в своём уже примере разве нет?

extended attributes десятки років як є в *nix ФС. можна додавати купу key-value до кожного файлу.

не люблю Линуса, но тут он прав

любой, кто хоть раз копал в детали реализации обработки регистра символов в unicode и сталкивался с ICU, будет тут согласен

Крім цього розробникам ФС не треба забувати, що їх система — не єдина в світі. Я пишу для себе синхронізацію файлів між кількома машинами та стораджем у хмарі — це таке задоволення обробляти несумісність у шляху до файла в одній системі, в хмарі та в іншій системі (наприклад, я сінхронізую між ноутом з MacOS, десктопом з Linux — і це ще в мене немає Windows, а хост з Linux — тільки один і типи ФС там всюди однакові, а в загальному випадку...)

А крім синхронізації ще ж є бекапи на інший диск з, можливо, іншою ФС — і так чудово зрозуміти , що скопіювавши туди та назад можна щось втратити... І це треба враховувати — суто заради велосипедів з марень розробників ФС.

Тому будь-які велосипеди тут — абсолютне зло.

Абсолютно згоден з Лінусом. Імʼя файлу — це строка. Є єдиний формат символів — Unicode. Для чого кожного разу розробляти велосипед з різними для різних ФС налаштуваннями символів — просто не уявляю. І не треба казати про сумісність. Якщо ФС була розроблена після появи Unicode — про яку сумісність йде мова? З чим? З уявленнями розробників? Якщо це стара система — зробіть один раз міграцію і все. Софту в більшості випадків, все одно, що там підтримує ФС. І все одно колись прийдеться мігрувати, бо крім ФС є купа інших компонентів, що перестають підтримуватись.

Я б взагалі зробив підтримку 2 типів символів — ASCII та Unicode: ASCII для всіх системних каталогів (просто з точки зору безпеки, щоб неможна було використовувати різні символи, які людині будуть здаватися однаковими), Unicode — для даних користувача. Задається при форматуванні системи.

прямо-таки весь юнікод)?
ті чудеса із юнікодом, які я бачив на власні очі: наприклад мікрософт сміливо всередині себе використовує U+0013 і U+0015 для власних, так би мовити, технічних потреб. прямо в кишках документів docx, без сумнівів і задніх думок. а ще добряча частина світу пише дивними мовами, знизу вгору там, чи справа наліво, і в юнікоді повно для цього керуючих символів, U+2067, U+202B і інше щастя. а ще раджу в якості вправи порахувати скільки в юнікоді варіантів відкритих-закритих лапок. так що ні, тільки будь ласка не весь юнікод.

ну керуючі символи можна і прибрати — як не печатні. Принаймні — Unicode це єдиний стандарт. Краще вже на базі нього створити стандарт для найменування обʼєктів (в загальному випадку, не тільки ФС, але й в хмарних стораджах), ніж робити всюди велосипед з нуля.

ФС
U+0013 і U+0015 ... прямо в кишках документів docx
керуючих символів, U+2067, U+202B ... скільки в юнікоді варіантів відкритих-закритих лапок

а як спец.символи чи лапки пов’язані з регістром окремих символів в namespace файлових систем? (незалежно де вони в ascii чи utf8)

Здається, мова вже не про регістр, а про випадки типа такого.

ага, не про регістр, тобто специфіка з unicode візуалізацією, а старі приємні візуальні плутання `O` і `0` в ascii вже нікого не вражають)

0/O, I/l, і т.п. можна в межах одного фонту налаштувати щоб відрізнялись.

А ось для всіх випадків для A, А, Α; E, Е, Ε; і так далі — вже не вірю. Ну а коли починаються діакритики і спец.пунктуація — тим більше, ніхто вже не розбереться без дампу по пунктах.

А ось для всіх випадків для A, А, Α; E, Е, Ε;

Спочатку згадувались тільки control characters та "’.

Відносно опцій з візуалізацією (типу A, А, Α) — чи достатньо того щоб відмовитись від Unicode взагалі в namespace файлових систем? (а може і в web взагалі якщо більш кардинально підійти)

діакритики і спец.пунктуація

я навіть скоріш всього навіть не помічу що тут щось не так з Sí і Sì іспанською чи італійською)

Відносно опцій з візуалізацією (типу A, А, Α) — чи достатньо того щоб відмовитись від Unicode взагалі в namespace файлових систем? (а може і в web взагалі якщо більш кардинально підійти)

Коли ваш бухгалтер не зможе створити «Річний звіт.docx», зрозумієте, що недостатньо.

Ні, відкотуватись на 50 років назад не варіант. Треба зробити так, щоб довільні імена працювали, але показувались так, щоб не заплутувати.

я навіть скоріш всього візуально навіть не помічу що тут щось не так з Sí і Sì іспанською чи італійською)

Ну ось і треба щоб були підказки.
Але не знаю, як саме їх робити...

відмовитись від Unicode взагалі ?
не зможе створити Річний

це не моя пропозиція, це спроба витягнути що пропонується з проблемами візуалізації робити

Треба зробити так, щоб довільні імена працювали, але показувались так, щоб не заплутувати.
Але не знаю, як саме їх робити...

якщо підняли плутанину з Unicode візуалізацією (але не згадуючи старі кодування нп з сумішшю латиниці і кирилиці) — думав що якісь варіанти запропонуєте які саме з Unicode (не) спрацюють

Якщо ФС була розроблена після появи Unicode — про яку сумісність йде мова

Наскільки я зрозумів це опція/сумісність для випадків типу fs casefolding з wsl у віндоус, або навпаки в іншу сторону (лінукс) нп з wine/proton.

Але там де bcachefs там часто драма зі своїм баченням і реалізацією (як в ядрі, так і з дистрибуцією), що і надало Лінуксу (цілком справедливо) зручну нагоду ще раз пройтися по самому casefold концепту в fs namespace, і нагадати про bad practice.

Є єдиний формат символів — Unicode.

Насправді мені саме на dou якось доводили, що є, наприклад, TRON, який десь ще активно використовується і він інший, ніж Unicode. Хоча я не зміг найти навіть конвертера з нього.

Але проблема з приходом Unicode не вирішиться. Ось наприклад є файл Á і є файл Á. Ви бачите різницю? Вам браузер може не показати. Але вона є, як той ховрашек. Або, чому ми маємо вважати одним іменем AB і ab, але розрізняти AB і A​B? І як пояснити юзеру, якщо він бачить останнє, що це таке і чому він його не може так просто набрати з клавіатури?

Повторюсь в котрий раз — повне рішення повинно дозволяти
1) Модулі обмежень на найменування;
2) Модулі правил коллації (як зараз в БД);
3) Метод доступа до імені що не пройшло підготовку до коллації — для точного запису — навіть якщо створити таке зараз не можна, має бути метод хоча б побачити і відрізнити;
4) Засоби для юзера мають показувати, в чому специфіка кожного імені.

Лінус не хоче болю з (1)..(3), я його розумію. Простіше це все звалити на юзерленд, тим більше що раніше 5й версії його не спроєктують як слід;)

В загальному випадку, якщо користувач хоче мати символи, що однаково виглядають — чому ні? Хоче розрізняти — це його проблема, не ФС. Не треба вирішувати проблеми рівня користувача на рівні ФС/ОС.

Так, це може викликати проблеми з безпекою. Але я відразу написав, що для вирішення цієї проблеми система, бібліотеки та софт виноситься на розділ з ФС де дозволені виключно ASCII.

Сама по собі ідея Windows тримати все на одному диску — всрата з народження. Це як жрати з помийки та жалітися на постійний пронос. Рішення цього зʼявилося, мабуть, раніше появи M$ як такої, але-ж особливий шлях, граблі, лісапеди, героїчне подолання...

На рівні користувача можна просто обмежувати створення імен за межами, наприклад, встановлених локалей. Тобто якщо в мене немає японської мови — то і відповідні імена я створити не можу. Це частково вирішить проблему. Якщо файл переноситься з ззовні — попереджати про неможливість створення з символами не з алфавіту поточних локалей — нехай користувач явно вирішує. Або викидати таки символи, або заміняти на послідовність цифр у відповідності до коду, тобто — нехай користувач розбирається. Якщо це виключно його дані, загрози для системи немає. Бо так можна дійти до заборони створення імен файлів, які можуть нагадувати... що завгодно. І битися з повітряними млинами. Тільки навіщо?

Якщо файл переноситься з ззовні — попереджати про неможливість створення з символами не з алфавіту поточних локалей — нехай користувач явно вирішує.

Не уявляю собі таке попередження на рівні системного API, як open(), write()...

Бо так можна дійти до заборони створення імен файлів, які можуть нагадувати... що завгодно. І битися з повітряними млинами. Тільки навіщо?

Ну на рівні одного каталогу, в якому явно встановлено політику, я не бачу принципової проблеми. Це ж не весь компʼютер.

Сама по собі ідея Windows тримати все на одному диску — всрата з народження.

Ти про один розділ, замість наприклад / і /home?
Якщо так, я згодний. Але вони так звикли. Інакше це ж думати треба...

Не уявляю собі таке попередження на рівні системного API, як open(), write()...

Коли я пишу «на рівні користувача» — то це ж «на рівні користувацького софту». користувач не викликає write() напряму, це робить якийсь софт. Драйвер ФС може отримати від користувача імʼя файла та локаль — далі перевірка чи всі символи у шляху до файлу відповідають локалі чи опціям ФС — це доволі проста та швидка операція. Точно не складніше всіляких приведень однакових символів чи чогось подібного. І або відкриває файл, або повертає помилку. Нехай користувач розбирається.

Ти про один розділ, замість наприклад / і /home?

Ага. Та навіть там знайомі притомні адміни зазвичай профілі користувача виносять на інший диск, але це не дуже рятує, бо софт намагається купу налаштувань та ліб кидати у профіль до користувача, і користувацькі файли — у системні каталоги. Але то генетична болячка вінди, нічого не поробиш...

бо софт намагається купу налаштувань та ліб кидати у профіль до користувача

до речі, reasoning який нп для xdg дефолтних юзер директорій був доволі зрозумілий для софта в ніксах, але.. в $HOME з ними іноді така суміш виходить — що іноді вже невпевнений що і як краще

3) Метод доступа до імені що не пройшло підготовку до коллації

MY-DOCY~1
все давно придумано до нас.

Ну можна взагалі по інодах. Але я про чесний доступ до імені в такому вигляді, як воно зберігається на FS.

Підписатись на коментарі