Если и фантазировать про ОС будущего, то файловая система им будет не нужна, нужна будет база данных.
Во-первых, гарантии. Идея, что на файлах нельзя практически ничего надежно и атомарно сделать, это какой-то абсурд, фундамент из песка. Почему, пока я пишу, другой процесс может прочитать частично записанный файл? Зачем это? Какой у этого юз-кейс? А создавать файл во временной директории, чтобы потом атомарно его перенести? Я до сих пор в шоке, что компьютеры вообще хоть как-то работают.
Как должно быть: открыл транзакцию, создал файл тут, записал что-то там, тут папку перенес, закоммитил все разом. Или откатил. Я многого прошу?
Во-вторых, само АПИ к файловой системе. Оно сейчас на уровне NoSQL: можно получить информацию по одному файлу или список детей. Рекурсию пиши сам. Запросы пиши сам. Обходы пиши сам. Нотификации об изменениях получай поллингом, епта. А, пока будешь обходить дерево, другой процесс в нем что-нибудь поменяет, и ты никогда не узнаешь, лол. NoSQL, если что, это не самый удобный способ доступа к данным. Самый тупой — да, но не удобный. Понятно, что раньше надо было экономить на всем, но сейчас-то уже не нужно.
Как должно быть: утилиты find вообще существовать не должно, а должен существовать язык запросов, SQL или типа SQL, который может атомарно выдать всю нужную информацию. Естественно, запросы не только по пути, но и по ACL, и по мета-информации. Плюс реактивные нотификации, что-то типа changes feed, с возможностью фильтрации. И это все не из bash-а, а на уровне системных вызовов прям.
В-третьих, сами файлы. Сейчас это тупо byte[], что как бы универсально, но и универсально неудобно: людям приходится придумывать, как засунуть в byte[] их собственные структуры, а это разброд, шатания, каждый изобретает свои форматы, они все друг с другом не дружат, куча сил тратится на сериализацию-десериализацию, а файлы для большинтсва утилит остаются непрозрачными.
Идет это от того, что файл вещь дорогая и неудобная, поэтому файлов программы стараются создавать поменьше, а запихнуть в них — побольше. Ну и от того еще, что ничего кроме fread и fwrite система не предоставляет.
А вот если бы файлы были дешевле, удобнее и имели бы типы, то в принципе конфиги можно было бы хранить как одно значение == один файл. Тут на самом деле сам термин «файл» размывается, это уже и не файл будет, а табличка в неймспейсе вашей программы.
Если грубо, не ФС → byte[] → ваши данные, а ФС → ваши данные → иногда (в порядке исключения) byte[], например, для совместимости с чем-нибудь старым.
Проделайте как-нибудь мысленный эксперимент: если бы у вас не было файлов вообще, но была общая на всю систему база данных и системное API для доступа к ней, какие задачи стали бы невозможными? А какие из них стали бы существенно легче?
Post #203
7.39K