IPFS не совсем ещё стала хорошо известной технологией, даже в Кремниевой долине многим она ещё не известна, однако вести о ней быстро расходятся из уст в уста в сообществе открытого исходного кода. И многие рады потенциальным возможностям IPFS в области улучшения передачи файлов и ускорения потокового вещания их по Интернету.

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

Как и почему это? Для ответа на этот вопрос придётся вдаваться в подробности.

Почему наша Всемирная Паутина медленна, непрочна и забывчива

IPFS является новым p2p-гипермедийным протоколом, цель которого — дополнять собою (или даже, может быть, заменить) протокол передачи гипертекста (HTTP), сейчас господствующий в WWW. Вот в чём проблема HTTP: сегодня, когда вы посещаете сайт, ваш браузер должен напрямую связываться с серверами, на которых этот сайт работает, даже когда серверы эти далеко, а процесс передачи требует немалой пропускной способности.

Провайдеры несут расходы, потому что между сетями заключены пиринговые соглашения, так что пересылка данных из сети в сеть стоит денег провайдеру и расходует пропускную способность канала. Хуже того, файл по HTTP скачивается всего лишь с одного компьютера вместо того, чтобы одновременно получать части файла с разных компьютеров.

Вот почему и вот в каком положении дел мы застряли: медленный и дорогостоящий Интернет, цена которого ещё возрастает в силу хищничества провайдеров «последней мили» (по меньшей мере, в США), и с ускоряющимся ростом запросов на соединение с мобильных устройств. Он не просто медленный и дорогостоящий, но и ненадёжный. Если хотя бы одно звено

HTTP-передачи оборвётся по любой причине, то оборвётся и передача. (А когда веб-страница или медиафайл грузятся долго, то, скорее всего, виною тому одно из межкомпьютерных соединений.)
 

Переделываем Интернет посредством IPFS

IPFS (InterPlanetary File System, то есть межпланетную файловую систему: это название — дань памяти идеям Дж. К. Р. Ликлайдера о «межгалактическом» Интернете) придумал Juan Benet, который подростком приехал в США из Мексики, в Стэнфорде получил степень по информатике, основал компанию, приобретённую «Yahoo!» в 2013 году, а в прошлом году при посредстве Y Combinator основал Лаборатории Протокола (Protocol Labs), которые сейчас занимаются проектом IPFS и скромно намерены переменить те протоколы, которые последние 20 лет были для нас повседневным явлением жизни.

IPFS — это P2P-распределённая файловая система, стремящаяся соединить все вычислительные устройства одной общей системою файлов; как таковая, она способна превзойти возможности HTTP в нескольких отношениях. Из них два (как сообщил мне Хуан в недавнем разговоре) являются ключевыми:

«Мы используем контентную адресацию, поэтому контент приобретает независимость от серверов первоисточника и может храниться отдельно и долговременно. Это значит, что контент может храниться и раздаваться очень недалеко от потребителя — быть может, даже компьютером из той же самой комнаты. Контентная адресация также позволяет и проверять данные, полученные от других (не доверенных) хостов вместо первоисточника. А когда контент попадает на устройство пользователя, его там можно кэшировать сколько угодно».

IPFS также устраняет некоторые проблемы безопасности, досаждающие нашему основанному на HTTP Интернету: основанная на контенте адресация (и последующая верификация) защищает основанные на IPFS сайты, распределённость IPFS делает DDoS-атаки невозможными. Помогая смягчить ущерб от закрытия сайтов их владельцами, IPFS также кэширует в себе важный для общества контент и может невозбранно сохранить его.

Главнейшим же из достоинств IPFS служит децентрализованная раздача контента, так что к контенту из Интернета можно обращаться в обстоятельствах нерегулярного доступа к Интернету и даже брать его из оффлайнового кэша. «Мы создаём сайты и веб-приложения, не имеющие центрального сервера-источника, — пояснил Хуан. — Они могут быть распределёнными подобно тому, как распределённою является сеть Bitcoin». Этого-то HTTP просто не может добиться, так что IPFS послужит во благо сетей, не имеющих первоклассных взаимосвязей (например, в развивающихся странах или в сельской местности).

Появление альфа-версии IPFS в прошлом феврале ужé повлекло за собою множество экспериментов среди ранних восприёмников её (early adopters). Например, 8 сентября хостинг Neocities стал первым крупным сайтом, пользующимся IPFS для хранения контента, то есть последовавшим призыву Internet Archive о необходимости распределённого WWW. В настоящее время все мы претерпеваем непрестанную утрату всё новых и новых сайтов, год за годом покидаемых и закрываемых их создателями, и в этом нарастающем кризисе нашей коллективной интернетовской памяти для нас важен даже малый шаг в сторону перманентной Паутины.

А сайты, принадлежащие крупным корпорациям, последуют ли примеру Neocities, начнут ли внедрение ещё не полностью протестированного протокола — особенно когда даже простое упоминание P2P способно привести их в ужас? А вот тут я подхожу к последнему пункту статьи.
 

Почему IPFS весьма значим для будущего интернет-бизнесов

Как я разъясняю в моей новой книге (публикация которой ещё впереди), мы быстро приближаемся к той точке, за которою стоимость доставки контента опередит полезность — и финансовую выгоду. Крупнейшие компании Интернета ужé изо всех сил стараются не отстать от нашего спроса на контент, целые армии инженеров заняты одной этой задачею и в Akamai, и в Google, и в Amazon.

Скоро их положение ухудшится. Благодаря быстрой продаже дешёвых смартфонов в ближайшее десятилетие в онлайн выйдут целые континенты новых потребителей. Интернет Вещей также обещает усугубить эту проблему, ведь биллионы устройств с их собственными запросами приналягут на быстро истощающиеся возможности наших каналов связи.

Нам ужé до крайности необходимо ограничение того эффекта, который я называю микросингулярностью: быстрое «вирусное» привлечение пристального внимания биллионов пользователей Интернета к одному и том же событию угрожает удушить собою всю систему. (Перебои в работе сети теоретически угрожают и жизни, когда микросингулярностью становится катастрофа, авария или другое явление того же рода.)

Netflix недавно приступил к исследованию технологии крупномасштабного потокового P2P-вещания, и это первейший и обнадёживающий признак того, что компании такого масштаба подыскивают более разумные методы доставки контента. И Netflix, и YouTube, и все драгоценные для нас поставщики крупного траффика могли бы процвести на почве Интернета, изменённого приходом IPFS и впечатляющим уменьшением стоимости и времени доставки контента.

Улучшая связность, IPFS поможет Интернету становиться той системою, которою мы всегда стремились видеть его в наших идеализациях, но которой с нынешними протоколами стать он не мог: истинно способною соединить всех в мире (даже находящихся в оффлайне) перманентным, но постоянно развивающимся выражением того, кто мы такие и к чему мы стремимся.
 

Послесловие от переводчика

Хабрахабр — это даже не Кремниевая долина, так что и здесь, как можно предполагать, к началу октября 2015 года не все ещё читатели составили для себя достаточное представление об IPFS. Следовательно, окончив перевод статьи из TechCrunch, мне придётся также приложить к ней определённое разъясняющее послесловие; и прилагаю, облекая его в форму вопросов и ответов.

— Что такое IPFS?

— Распределённая файловая система с контентной адресацией.

— В каком смысле система IPFS является распределённою?

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

— В каком смысле система IPFS является файловой системою?

— В прямом: если ваша операционная система является юниксоподобною, то при помощи FUSE можно подключиться к IPFS таким способом, чтобы видеть файлы IPFS по адресу «/ipfs/хэш_файла» у себя в файловой системе.

— В каком смысле система IPFS является контентно-адресуемою?

— Хэш файла зависит только от содержимого файла. Если файл имеет другое имя или лежит в другом подкаталоге, то это всё равно тот же файл. (Это выгодно отличается, например, от битторрентовского хэша BTIH, который изменяется в зависимости от названия и взаимного расположения файлов.) Если тот же самый файл раздаётся под другим именем или в составе другого подкаталога, раздачи автоматически объединятся, не потребуется удвоение усилий, траффика, пространства на диске.

— Есть ли в файловой системе IPFS подкаталоги?

— Есть; это списки имён (и хэшей) файлов и подкаталогов. Например, для открытия адреса «/ipfs/хэш_каталога/имя_файла» сперва скачивается каталог (по его известному хэшу), затем по имени файла в каталоге выясняется тот хэш, при помощи которого IPFS будет качать файл. Каждое имя подкаталога добавляет один шаг к этому процессу.

— Как узлы IPFS знают, у каких из них есть желаемый файл?

— Используется DHT (наподобие Kademlia, но с большей устойчивостью к атаке Сивиллы). Нет никакого центрального сервера, который можно было бы захватить, отключить, отнять имя (как захватывают и отключают торрент-трекеры, например).

— Как сайт нынешней Всемирной Паутины может сослаться на файл, лежащий в распределённой файловой системе IPFS?

— Автор сайта ставит себе IPFS и кладёт файл в IPFS. Затем он записывает «https://ipfs.io» перед IPFS-путём файла и получает, например, «https://ipfs.io/ipfs/QmcXx5mKDQAc7tCWLq84Hn7XFxWfBdZpvogJk3tNXQRFiv». Сайт «https://ipfs.io» работает как гейт из IPFS в WWW, так что читатели, у которых поддержка IPFS не установлена, могут с этого сайта получить файл.

— А читатели, у которых поддержка IPFS установлена?

— А у них появляется личный гейт из IPFS. Остаётся только поставить такое дополнение для Firefox или расширение для Chrome, которое будет «127.0.0.1:8080» автоматически подставлять вместо «ipfs.io» в таких URLах.

— Каким образом IPFS спасает в случае нарушений в работе сети?

— Если иллюстрации (и другие файлы) с самого начала публиковать не по сайтовому адресу, а в IPFS, то тогда, даже если сайт упадёт, читатель всё равно может получать файлы по известному адресу, только не из сайтового кэша IPFS, а из кэша у соседа. (И сосед не сможет подменить файл, потому что будет проверяться соответствие файла хэшу.)

— Каким образом IPFS помогает сайтам экономить траффик?

— Если иллюстрации (и другие файлы) с самого начала публиковать не по сайтовому адресу, а в IPFS, то тогда, даже если вдруг случится микросингулярность и на сайт очень быстро придёт биллион зрителей, всё равно бóльшая часть их будет по IPFS стучаться не на сайт, а в кэш своим соседям по биллиону, успевшим чуть раньше. Так что сайт не приляжет. (Конечно, для этого сперва среди зрителей должна распространиться мода на IPFS, а не то вместо сайта приляжет гейт «https://ipfs.io», например.)

— Каким образом IPFS помогает сайтам в случае гибели диска?

— Если иллюстрации и другие статические файлы с самого начала публиковать не по сайтовому адресу, а в IPFS, то тогда можно будет пропавшие картинки (и другие файлы) скачать по IPFS из кэшей читателей сайта в случае чего.

— Каким образом IPFS помогает читателям в случае государственной цензуры?

— Если иллюстрации и другие статические файлы с самого начала публиковать не по сайтовому адресу, а в IPFS, то тогда можно будет запрещённые иллюстрации (например, иллюстрации к ранобэ «精霊使いの剣舞») и другие запрещённые файлы получать по IPFS в обход блокировки (из кэшей читателей сайта, успевших получить файлы до вступления цензуры в силу).
— Каким образом IPFS помогает сайтам экономить дисковое пространство?

— Если иллюстрации с самого начала публиковать не по сайтовому адресу, а в IPFS, то тогда можно через некоторое разумное время стирать их из кэша IPFS, высвобождая пространство и надеясь на то, что иллюстрации продолжат быть доступными для читателей, которые просто будут в дальнейшем получать их из кэша IPFS друг у друга.

— То есть это реальная альтернатива для тех хостингов картинок и для имиджборд, которые сейчас действуют жёстко и после определённого времени просто стирают файлы невозвратно?

— Совершенно верно. (Я предлагал эту альтернативу на Иичане, например.)

— Есть ли прямо сейчас пример такого хостинга картинок, который складывает картинки в IPFS?

— Есть, ipfs.pics.

— Есть ли прямо сейчас пример такого хостинга произвольных файлов, который складывает их в IPFS?

— Есть, http://ipfs.stadja.net/upload/ Увы, нет: закрылся.

— Означает ли контентная адресация, что в IPFS можно хранить только статический (неизменный) контент?

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

— Может быть, придумать новую схему URLов для IPFS? Это позволит записывать их короче, чем длинноватый адрес «https://ipfs.io» перед хэшем.

Две недели обсуждали и решили остановиться на схеме «fs:», предшествующей такому пути в файловой системе, который начинается на «/ipfs/» или на «/ipns/».

— Почему не сделали две раздельные схемы «ipfs:» и «ipns:»?

— Для удобства пользователей юниксоподобных систем, которым теперь достаточно стереть три символа «fs:», чтобы получить путь. (А не то переправлять ещё возиться.)

— Будут ли адреса «fs:» поддерживаться в гипертекстовом Фидонете?

— Будут; для этого достаточно трёх строк на языке ECMAScript 6. Вот пример фидонетовской блогозаписи, сперва снабжённой иллюстрацией из IPFS, а затем транслированной по RSS в LiveJournal.

— Можно ли добавить поддержку открытия адресов «fs:» в редактор фидопочты GoldED-NSF?

Можно:
 

GroupURL IPFS
URLEngine PCRE
URLScheme /ipfs/[1-9A-HJ-NP-Za-km-z]+
URLHandler start "" "https://ipfs.io@url"
EndGroupURL

— Работает ли IPFS под Windows?

Нынешняя альфа-версия под Windows работает довольно скверно, но предыдущая вообще переставала запускаться, так что можно надеяться на дальнейшее улучшение положения дел в будущем, и надеюсь.