November 4th, 2021

Hello computer!

Not a File System

Сегодня я случайно узнал, что протокол удалённого доступа к файлам под названием NFS, до сих пор цветёт и пахнет. Последнее обновление спецификации протокола, RFC 7862, датировано ноябрём 2016 года, что для протокола, созданного в середине 80-х годов, означает "буквально вчера", то есть он ещё вовсю применяется.

Удивляет конечно не то, что протокол столь живуч. TCP/IP был создан вообще в 70-х, а используется сейчас буквально везде, и уходить не собирается (и даже сопротивляется попыткам обновления: на смену античному IPv4 уже давно должен быть прийти IPv6, но как-то вот пока не особо пришёл). Просто TCP/IP был очень удачен изначально (разрабатывали вояки, и разрабатывали всерьёз), вот и жив до сих пор.
Удивляет то, что вообще-то NFS изначально был мертворождённым протоколом, причём мёртворождённость была принципиально заложена в сам протокол, и даже одно время "поднималась на флаг" как design feature: принципиально stateless сервер, прямой блочный доступ к FS, плюс отсутствие файловых блокировок гарантируют повреждение данных и даже самой FS при одновременной работе пользователей более чем с одного компьютера (в том числе при работе одного локального и одного сетевого пользователя), т.е. протокол был изначально, by design, неработоспособен даже для одного сетевого подключения. Когда протокол начали реально применять более чем на одном компе (и реально рушить им системы), эта приятная неожиданность была обнаружена, а поскольку альтернатив на тот момент особо не было, протокол был зомбифицирован и кадавризирован внешними "нашлёпками" до состояния "хотя бы не взрывается сразу". Сам протокол модифицировать было уже нельзя, проблема была в центральной идее протокола - не хранить состояние на сервере и прямой блочный доступ к FS - если её убрать, это будет уже совсем другой протокол, поэтому пришлось городить "нашлёпки" и "дополнения". За несколько лет применения эта стройная система даже не костылей и подпорок, а скотча, жвачки и верёвочек, была доведена до удовлетворительного состояния... а дальше я был уверен, что, в связи с появлением других протоколов доступа к файлам (не ахти какая нанотехнология, даже какая-нибудь дипломная работа студента IT специальности бы лучше чем ранние версии NFS), NFS тихо уйдёт в небытие, но - нет. Байтораздирающие подробности истории и внутреннего устройства NFS хорошо разобраны в UNIX Haters Handbook - там вообще много интересного про юникс и вокруг него.

И вот это свойство айти сферы - "любое г..но можно долго и радостно использовать, если завернуть в пакетик и намотать на него достаточно изоленты" - удивляет. Программирование давно стало индустрией (и не только от слова "индус"), код пишется гигабайтами, если не сотнями гигабайт, а новую сетевую FS под юникс написать не могут? Как так-то?