IDEC favicon

IDEC (ii-like Data Exchange Convention) - достаточно простой и гибкий протокол обмена сообщениями, который не имеет прямых аналогов и разработан российскими разработчиками. На его основе строится сеть из взаимодействующих серверов-узлов, к которым подключаются клиенты, отправляющие и принимающие сообщения.

Протокол имеет довольно интересную историю и предпосылки его создания, поэтому будет правильным шагом сразу рассказать об этом. Благо, у нас есть возможность узнать эту информацию буквально из “первых рук”. Андрей Лобанов - один из разработчиков протокола IDEC, автор клиента Caesium, сервера iing, скрипта rss2idec.

Началось всё с Фидонета. Фидонет был популярен в 1990-е годы и в начале 2000-х. Его преимуществом было наличие одной точки входа (программы GoldEd) для чтения всех источников информации. А источниками в то время были BBS (Bulletin Board System, электронная доска объявлений).

BBS является сервером. Его суть похожа на интернет-форум или mailing list. Пользователи отправляют на BBS в определенный канал (другими словами, в тему форума/эхоконференцию) сообщения-письма, содержащие тему и основной текст, при необходимости цитируя предыдущие сообщения символом >, как это принято в электронной почте. Сервер всего лишь распространяет сообщения каждого пользователя всем, кто подписался на канал. Клиентская часть более умная - она группирует сообщения по темам и выстраивает некое дерево разговора, исходя из времени отправки сообщений и определяя, кто кого цитировал.

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

Некоторое время назад, в 2000-х, был популярен формат RSS, как раз предоставлявший возможность читать стандартизованные ленты новостей на любом сайте, включая в том числе и соцсети, такие как Twitter, Vkontakte, Facebook. Но после 2010 года его применение стали ограничивать. Проблемы в основном касались финансовых вопросов. Сайты не хотели предоставлять простой способ “воровать” у них контент, к тому же в формате RSS сложно или невозможно показывать рекламу. Да, получается добавлять текстовую рекламу, но она далеко не так эффективна. А все графические элементы RSS-читалки могли вырезать. Ситуацию не спасала даже возможность отображать в RSS неполные статьи, а только заголовок и краткое содержание каждой. В 2011 от RSS отказались Facebook и Twitter, а летом 2013 закрылся крупнейший онлайн RSS-агрегатор Google Reader.

В 2014 году у Ромы из Владивостока зародилась идея о том, как сделать мир лучше. Вылилось это в технологию под названием ii (по которой обнаружить информацию в сети проблематично из-за самого названия). Суть технологии достаточно простая: 2 узла передают друг другу идентификаторы сообщений, которые у них уже есть, а затем происходит синхронизация - каждый из узлов получает ту информацию, которая у него отсутствует. На данном простом алгоритме держится вся сеть.

Это дает возможность быстро и на любом языке написать совместимое с данным алгоритмом приложение, систему мониторинга, бота. Даже для bash был написан простейший клиент. Предполагалось, что можно будет разработать небольшие плагины для различных CMS, форумов, чтобы обеспечить с ними совместимость, и таким образом позволить людям связать свой сайт или блог с общей сетью. Объединить всё в единую сеть. Чтобы ii стал для Интернета, как Фидонет для BBS…

На деле мало у кого обнаружилось желание объединяться с чужими сайтами. А на собственных сайтах разработчиков ii было не так много контента. Рома ушел из проекта, разочаровавшись в нём и активности других его участников. Оставшиеся стали думать, как улучшить ii, и продолжили его развивать в сторону агрегатора новостей и средства общения. Так получился проект сети IDEC (уже без узла Ромы), в основе которой та же топология, что у ii.

IDEC обратно совместим с ii, имеет ряд улучшений, позволяющих уменьшить траффик между узлами, а также дополнительный функционал. В то же время, разработчики стремятся оставить технологию простой и понятной. Чтобы развернуть у себя узел достаточно скачать iing (ссылку можно найти на странице официального сайта), поправить простейший текстовый файл конфигурации и запустить iing.py. Собственный узел будет развернут. При необходимости можно договориться с другими участниками сети о взаимном обмене данными (это необязательно, обычно узлы свободно выдают доступный на них контент в режиме read-only).

Виктор - разработчик Android-клиента IDEC mobile, админ сайта ii-net.tk, владелец узла “Станция Мира” и узла главного архива сообщений - поведал нам о технической стороне протокола.

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

У каждого узла может быть свой собственный набор ПО и скриптов (по факту сейчас так и есть - общим является только протокол). На официальном сайте выложены ссылки на 2 основных варианта серверной части:

  • iing [прим. - реализация Андрея на python]
  • ii-php [прим. - реализация самого Виктора на PHP]

Обе реализации поддерживают файловые эхи (каналы, в которые пользователи могут выкладывать любые файлы размером не больше, чем укажет владелец узла). Каждый файл имеет имя и краткое описание. Обычно данная функциональность используется, когда надо поделиться книгой, музыкой или картинками/фотографиями. Файлы синхронизируются между станциями тем же механизмом, что и обычные сообщения.

В качестве архитектурного недостатка сети IDEC можно отметить проблемы со спамом и DoS-атаками. Они решаются ведением черных списков сообщений (черные списки синхронизируются между серверами, и соответствующие сообщения удаляются с узлов и клиентов), а также отключением неугодного пользователя от узла. Отключение производится вручную, поэтому для эффективного противодействия вандалам владелец узла должен регулярно проверять всё ли в порядке, читая новые сообщения, опубликованные на нем.

IDEC

Крупнейший сайт, посвященный данному протоколу ii-net.tk встречает пользователя громким лозунгом “Секта плохих парней”. Скорее всего, это название сети IDEC не является общепринятым, однако сайт является одним из самых полезных. Он содержит ссылки практически на весь софт и репозитории git, которые могут понадобиться при работе с сетью IDEC. Это клиенты, реализации сервера, вспомогательные скрипты. Я попробовал только как работают клиенты:

  • Клиент для андроид IDEC Mobile. Работает быстро, имеет приятный современный интерфейс. Позволяет после установки без настроек сразу подключиться к 2 узлам - “Станция мира” и “Таверна”. Последняя сборка была 9 августа 2018 года, судя по всему, клиент активно развивается и содержит большое количество функций (не меньше, чем десктопный), в том числе отправку/прием файлов.

IDEC-mobile

  • Клиент Цезий. Консольный, кроссплатформенный, написан на языке Python. Запустился на Android через Termux и на Windows через Cygwin. Если у вас возникнут ошибки при скачивании сообщений, следует указать в конфиге параметр auth с произвольным значением и проверить, что URL узла корректный (например, http://idec.spline-online.ml/ для станции автора клиента). Интерфейс напоминает средство чтения сообщений в Фидонете GoldEd и использует те же горячие клавиши. Для редактирования сообщений открывается внешний текстовый редактор, команду вызова которого можно настроить в файле конфигурации.

caesium

  • Простейший клиент iitxt. Предназначен для Linux, использует Python и shell-скрипты. Запустился на Android через Termux. После указания URL узла в файле конфигурации, клиент без проблем загрузил все сообщения в файл newmsg.txt. Также есть скрипт view.sh, который фильтрует содержимое newmsg.txt, выводя только тот кусок файла newmsg.txt, который относится к конкретному каналу (“эхе” на языке Фидо).

  • CutieFeed. Графический клиент для Windows и Linux с использованием Python. На Windows запустился без проблем и скачал сообщения. Интерфейс выглядит немного непривычно для пользователя, но интуитивно понятный. Кажется, что разработчик достаточно экстравагантный человек (уже по сообщению “Ну, всё!” в конце инсталляции), но знает, что делает. По словам автора Windows-версия клиента давно не обновлялась (последние сборки предназначены только для Linux). Тем не менее, вся необходимая функциональность в ней присутствует.

Также на официальном сайте рассказывается о том, для кого предназначена сеть IDEC. Целевой аудиторией являются:

  • Программисты и системные администраторы, которые хотят поднять свой сервер сообщений (сообщения могут быть различной природы и источников), используя готовый протокол с готовыми клиентами для чтения сообщений;

  • Пользователи, которые стремятся к медленному, продуманному общению (в отличие от быстрого обмена сообщениями в мессенджерах). IDEC, как и Фидонет позволяет скачать сообщения за одно подключение к серверу и в дальнейшем читать их и отвечать на них offline. При следующей синхронизации с сервером исходящие сообщения будут отправлены.

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

На данный момент мне удалось обнаружить в сети IDEC 3 основных узла и 2 вспомогательных:

  • Станция Мира
    IDEC / WEB
    Принадлежит Виктору, г. Иркутск.

  • Таверна
    IDEC и WEB
    В собственности Андрея Лобанова, г. Курган.

  • INSTEAD
    IDEC и WEB
    Владелец - Косых Петр Александрович, г. Москва.

  • Lessmore
    IDEC / WEB
    Собирает сообщения со всех узлов, автор узла - товарищ Difrex.

  • alicorn-archive
    IDEC / WEB
    Служит хранилищем старых сообщений сетей ii и IDEC. Может представлять исторический интерес для исследователей сети. Узел также принадлежит Виктору.

На официальном сайте сказано о наличии “филиала” IDEC в сети Tor по адресу mtgbjhifvi4sl773.onion, но сейчас он не работает (закрыт по причине непопулярности). Клиенты IDEC Mobile и CutieFeed по заверениям разработчика поддерживают настройки прокси, и в том числе успешно тестировались им на сетях Tor и i2p.

Некоторые эхо-конференции (каналы) являются уникальными для узлов, многие повторяются и синхронизируются друг с другом. Авторы - владельцы узлов сами решают, что они хостят. Каждая из представленных станций также доступна через веб, установка специального клиента не требуется для чтения и написания сообщений. В настоящий момент есть 3 реализации web-интерфейса: на php от Виктора, на python от Андрея, и на javascript от Difrex. У вас есть возможность сравнить и оценить их по указанным выше адресам. На мой взгляд, на компьютере сайты выглядят удобными. На Android же навигация не такая приятная, как в специальном приложении, которое, к тому же, позволяет читать каналы оффлайн.

Из каналов можно выделить:

  • Несколько rss-лент на компьютерную тематику (раньше rss-источников было больше, старые можно найти в архиве);
  • Каналы, посвященные тематике Linux и программированию, в которых ведутся соответствующие дискуссии и обмен опытом;
  • Самый активный канал - о жизни и учебе - pipe.2032;
  • Каналы на культурные темы: музыка, литература, компьютерные игры;
  • Специализированные каналы по интересам: юмор, истории-ужастики с мракопедии, пони и дружбомагия, город Курган, Фидонет;
  • Каналы для обсуждения и тестирования самой сети IDEC;
  • Каналы о разработке текстовых квестов и интерактивных рассказов, в том числе на основе специализированного софта INSTEAD 3 на базе ядра STEAD. Данное ПО написал Петр, автор одного из узлов.

Следует отметить, что концепция сети IDEC в настоящее время предполагает открытый обмен сообщениями. То есть не содержит в себе средств шифрования, а пароль для отправки сообщений на узел передаётся в открытом виде (если соединение не https). Также в сети пока невозможно обмениваться личными сообщениями между участниками. Эта функциональность запланирована на будущее, в качестве обходного решения можно общаться, создав на узле канал, имя которого не опубликовано в общедоступном списке каналов.

На первый взгляд, серверное программное обеспечение узла сети IDEC по назначению похоже на:

  • Станции BBS с возможностью передачи текста и файлов (для людей 90-х);
  • Форумный движок, в котором нельзя прикреплять картинки и графические смайлы в посты (с точки зрения тех, кто познакомился с интернетом в 2000-х);
  • Мессенджер с синхронизацией вместо мгновенной передачи сообщений (для современного человека 2010-х годов).

Но нельзя забывать и о преимуществах связности между узлами. Часть информации может дублироваться, и таким образом не теряться при отключении одного из узлов. Такая сеть более устойчива и существует, пока жив по крайней мере 1 узел. С другой стороны, сейчас всё строится на доверии и сеть одноранговая. Чтобы подключить свой узел к чужому следует договориться с его владельцем.

В случае существенного увеличения количества узлов разработчики предлагают модель с несколькими уровнями доверия, в которой центральные узлы содержат только доверенный контент и полностью синхронизируются друг с другом. Узлы уровня 2 могут быть подняты кем угодно и отправлять контент на центральные, но сообщения проходят через фильтр. Уровень 3 предназначен для анонимных узлов в P2P сетях и не предполагает взаимодействие с ядром сети IDEC.

Область применения самого протокола IDEC широкая, ограничивается только фантазией разработчиков. Под него можно писать шлюзы для взаимодействия и обмена данными с любыми другими сетями и мессенджерами. Уже существуют скрипты преобразования ленты RSS в IDEC и наоборот, канала сообщений IDEC в RSS-ленту. Другой, несложный самостоятельно написанный скрипт, позволяет владельцу узла IDEC читать email-письма с нескольких своих почтовых ящиков через стандартный IDEC-клиент. Также можно отправлять на узел IDEC события с разных датчиков, фотографии с камер слежения и т.д. Вся эта информация будет доступна через один и тот же клиент чтения сообщений и отсортирована по каналам.