Протокол Coect это адаптация идей Email и XMPP (Jabber) для современного мира
Нам очень нравится децентрализованность электронной почты и XMPP, но, к сожалению, эти технологии уже не отвечают вызовам сегодняшнего дня. При разработке Coect мы намерены взять все лучшее, что есть в этих технологиях, и добавить то, чего в них не хватает, чтобы называться универсальным информационным протоколом Сети.
Coect это свобода общения. Открытый протокол объединяет Email, XMPP, RSS, VoIP-телефонию, видео-конференции, передачу данных в режиме P2P и возможности социальных сетей. Coect обеспечивает адресацию, обнаружение, авторизацию и передачу любых данных между любыми устройствами, подключенными к Интернету: компьютерами, смартфонами, датчиками умного дома.
Coect это свобода для разработчиков. Любая компания может создать свой сервис, использующий протокол Coect, и взаимодействовать с другими компаниями, так же как сейчас мы обмениваемся электронной почтой не задумываясь о том, какой сервер, провайдер или клиент использует получатель письма.
Coect это свобода для пользователей. Любой человек может использовать свой домен как идентификатор в Coect, но также может получить адрес на общем сервере типа Gmail. Использование своего домена позволяет в любой момент сменить Coect-провайдера с сохранением своего адреса и всех контактов. Весь обмен данными между пользователями может быть защищен с помощью асимметричного шифрования.
Twitter показал всем, как много хороших клиентов может создать сообщество, имея доступ к открытому API. Но мы также увидели, как легко можно уничтожить все это разнообразие, изменив политику доступа к API. Открытый, свободный протокол Coect дает разработчикам гарантию, что их программа никогда не будет запрещена. Пользователь может использовать любой клиент для доступа к любому Coect-провайдеру. Универсальный протокол позволяет создавать различные приложения, среди которых можно выделить собственные социальные сети для компаний и популярных сайтов, P2P-взаимодействие между игроками в мобильных играх, управление умными устройствами и датчиками в домашней сети.
С помощью Coect любая компания или популярный сайт может объеденить свою аудиторию в собственную социальную сеть, но такая сеть не будет замыкать пользователей внутри. Сейчас есть много Email-провайдеров и все их пользователи могут писать письма кому угодно. Coect делает тоже для социальных сетей. Также как сейчас вы используете аккаунты в социальных сетях, чтобы логиниться на других сайтах, вы можете использовать свой Coect адрес, чтобы идентифицировать себя в любой социальной сети, находить друзей, подписываться на их новости, общаться и комментировать фотографии.
Каждый пользователь может иметь несколько каналов с разным уровнем доступа, например семья, друзья, работа. Пользователи могут подписываться на сообщения в каналах, обслуживаемыми другими Coect-провайдерами и перепубликовывать такие сообщения в своих каналах.
Coect не ограничен традиционной моделью клиент-сервер. Сервисы адресации, аутенфикации и обнаружения, лежащие в основе Coect, позволяют реализовать интересные сценарии прямого взаимодействия между игроками в сетевых играх. Coect может использоваться для маршрутизации любых данных между любыми Coect-узлами, также как SMTP-сервер пересылает все письма, в том числе, сгенерированные роботами, а не людьми.
В Coect узел это все, что подключено к какой-то сети и может обрабатывать Coect пакеты. Сервер, ноутбук, планшет, телефон, телевизор с WiFi, веб-камера, датчик наружной температуры это все сетевые узлы. Нет жесткого деления по ролям клиент/сервер. Сервер может быть клиентом для другого сервера, а телефон может выполнять роль сервера для планшета. Пакеты могут идти не только через Интернет, но и через Bluetooth, например, c датчика частоты сердечных сокращений на телефон.
Coect это информационный протокол, который можно условно считать пятым уровнем в стеке протоколов TCP/IP. Coect может работать в различных сетях. Доставка пакетов от одного узла к другому осуществляется с помощью транспортов, в качестве которых могут выступать HTTP(S), WebRTC и Web Sockets в браузерах, TCP- и UDP- сокеты в мобильных клиентах, Bluetooth, оптическое и аудио-кодирование. В процессе передачи одного пакета может быть задействовано несколько различных транспортов, которые объединяются в один логический канал, на уровне которого осуществляется контроль доставки пакетов и буферизация. Пакеты могут распространяться широковещательно среди подписчиков одного адреса.
На прикладном уровне Coect-приложения работают только с каналами, взаимодействие с транспортным уровнем осуществляется на уровне библиотечного кода Coect для каждой отдельной платформы.
Всегда, когда это возможно, используются защищенные стандартными средствами платформы TLS-соединения. Шифрованием защищается обмен данными как между клиентом и провайдером, так и между провайдерами (аналог S2S-соединений в XMPP). Клиенты могут дополнительно использовать собственные методы защиты и проверки подлинности, основанные на принципах ассиметричного шифрования. Coect обеспечивает механизм распространения открытых сертификатов клиентов и средства проверки подлинностей подписей сообщений.
JSON доказал свою эффективность как основной формат обмена данными в современных веб-приложениях. Опыт MongoDB показывает, что JSON может использоваться и при работе с бинарными данными (BSON). Все пакеты внутри Coect кодируются с помощью JSON, и его расширений EJSON и RJSON.
Такие комплексные протоколы, как Coect нельзя создать по принципу сверху-вниз. Вначале надо создать работающую версию, проверить ее в реальных условиях, собрать отзывы пользователей и советы экспертов, и лишь затем формально стандартизировать сам протокол.
Мы ожидаем большое число изменений в процессе подготовки финальной версии протокола, поэтому специально для Coect разработали логос-ориентированный язык программирования MetaJS (по типу того, как ELisp создан для Emacs). MetaJS позволяет создавать живое программное обеспечение, которое не просто имплементирует некоторую спецификацию, но само является этой спецификацией. Компилятор лишь транслирует эту спецификацию с мета-языка в исполняемый код на целевом языке (например Javascript или Python).
Сейчас мы работаем над имплементацией протокола Coect, используя основанный на Lisp MetaJS, который транслируется в Javascript для исполнения в браузерах или на сервере (NodeJS). C помощью этой цепочки трансформаций мы намерены получить максимально простое описание протокола, из которого будет генерироваться всегда актуальная имплементация.
Пользуясь математической терминологией, мы пытаемся достичь состояния, в котором имплементация это интреграл протокола, а протокол — дифференциал имплементации.
MetaJS полностью открытая технология, желающие уже сегодня могут получить исходный код на GitHub. Имплементация Coect пока недоступна публично (помните о нашем секретном плане?). Подпишитесь на наш список рассылки или обновления в социальных сетях, и вы первым узнаете о времени «Ч».
Каждый радист знает: закончил передачу — переходи на прием. Напишите нам, что вы думаете о проекте Coect, что нужно именно вам в первую очередь.
Вы можете связаться с нами через Твиттер @coect_net или страницу Coect на Фейсбук.
Следите за обновлениями кода MetaJS на GitHub.
Есть идея? Добавьте свои пожелания через UserVoice.
Присоединяйтесь к нашему списку рассылки.
Черкните нам пару строк по адресу info at dogada.org.
Главные новости о Coect и MetaJS также публикуются в твиттере Дмитрия Догадайло @d0gada.
До coect'a!