Back to Timeline
Avatar
Shmuel Leib Melamud
(updated )
Введение в Мойру

Меня попросили сделать небольшое введение в Мойру для новых пользователей. Я давно собирался написать такое объяснение базовых вещей — что это вообще за сеть, почему она устроена именно так, а не иначе. Воспользуюсь случаем и соберу мысли в одном месте.

* * *

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

Но интернет вообще-то не задумывался таким.

Если вспомнить ранние времена, веб виделся как большая паутина маленьких сайтов, связанных ссылками. Будущее представляли так: у каждого человека, компании, проекта — своя «домашняя страница», то есть отдельный сайт, где лежит всё, что связано именно с этим человеком или темой. А дальше всё связывается ссылками.

Но веб отлично работает для выдачи информации: ты запрашиваешь адрес и получаешь публичную страницу. А вот для получения информации от пользователя (комментарий, лайк, приватный доступ) нужна авторизация: кто-то должен представитьcя, идентифицироваться, и другая сторона должна наделить его правами. Эту проблему проще всего решать внутри одного большого сайта: он регистрирует пользователей, задаёт правила, хранит данные на одном сервере, раздаёт их из централизованной базы. Поэтому история ушла от «паутины личных страниц» к форумам, а затем к соцсетям, где всё в одном месте — и так, увы, продолжается до сих пор.

* * *

Централизация создаёт вполне конкретные проблемы.

1. Зависимость от владельца сервиса
Если бизнес не пошёл — сервис закрывается, и вместе с ним пропадает ваш контент и ваши социальные связи, существовавшие только внутри этого сайта.

2. Зависимость от правил и вкусов хозяина площадки
Владелец может решить, что ему не нравится ваш контент, или вы ему не подходите по любому признаку — и просто закрыть вам доступ.

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

А реклама означает: задача соцсети — показать вам как можно больше рекламы. Значит, вы должны сидеть дольше и потреблять нескончаемый поток контента, который не даёт оторваться. В результате вы получаете меньше того, на что подписались, и больше того, что приносит площадке доход: продвижение, рекомендации, спонсируемый контент.

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

Это картина, которую мы наблюдаем сегодня.

* * *

В Мойре я изначально ставил себе задачу продумать строение соцсети заново, исходя из идеи: веб — это сеть личных сайтов.

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

* * *

Чтобы другие могли комментировать и ставить лайки, нужно их авторизовать. И здесь ключевой момент: система регистрации/авторизации не должна зависеть от конкретного сервера, иначе вы снова окажетесь привязаны к площадке. Нужна общая интернетовская система — по смыслу чем-то похожая на DNS, только с авторизацией. В DNS есть имена и концепция владения именем, но нет встроенной криптографической авторизации (и регистрация имён — не автоматический процесс).

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

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

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

* * *

Итак, аккаунт в Мойре состоит из двух частей:

  1. Имя в системе имён (оно не привязано к конкретному серверу).
  2. Домашний сервер (узел), на котором установлен софт Мойры и где физически хранится ваш контент.

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

Провайдер, разумеется, не обязан предоставлять услуги бесплатно. Самая здоровая модель — брать плату за хранение и/или за нагрузку, чтобы уйти от рекламной модели и выстроить правильные стимулы. Но это уже личное дело каждого провайдера как владельца бизнеса.

* * *

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

Я сделал веб-клиент, который выглядит привычно (в духе Facebook / Minds / Instagram), и постарался, чтобы для неподготовленного пользователя регистрация имени и выбор провайдера были максимально простыми и по возможности спрятанными за интерфейсом.

Но принципиально: открытые протоколы и открытый исходный код не ограничивают вас вообще. Это ваш сайт и ваш контент — хотите, используйте мой клиент, хотите — сторонний, хотите — пишите свой.

* * *

Даже если вы сидите у провайдера, ваш аккаунт там — это отдельный сайт. Поэтому френдлента устроена не как выборка из одной базы данных.

Мойра взаимодействует с теми, на кого вы подписаны, как с независимыми сайтами: получает уведомления о новых постах, копирует их в вашу ленту новостей на вашем узле. Взаимодействие с пользователем на том же сервере и с пользователем на любом другом сервере не отличаются. И, разумеется, другой участник сети не обязан пользоваться именно моим софтом — он может использовать любой другой, который реализует тот же протокол.

* * *

Софт в Мойре не устанавливает правила общения и не решает, что должно быть открыто или закрыто — это настраиваете вы. Настроек много: Мойра позволяет делать больше, чем любая другая соцсеть. (Чтобы интерфейс не выглядел как кабина самолёта, кое-что пришлось спрятать, но через API доступно всё.)

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

* * *

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

* * *

Для тех, кто видел децентрализованные соцсети, многое из описанного выше будет звучать знакомо. Но у Мойры есть важные отличия.

1. Имя отделено от серверов
В отличие от федеративных сетей, где вы прикреплены к серверу/инстансу как к колхозу, в Мойре провайдер — это просто хостинг. Он не определяет правила, нет «конституции вашего пода», и вы можете уйти, не теряя контент и подписчиков.

2. Мойра не ограничивается моделью Твиттера
Цель — реализовать возможности уровня Facebook: разные уровни доступа, управление комментариями, группы, рекомендации и прочее. И сделать это всё максимально удобным для пользователя.

* * *

В Мойре нет и не может быть единой системы модерации. Есть контроль на вашей стороне: вы можете заблокировать пользователя, чтобы он не мог писать комментарии вам; можете настроить клиент так, чтобы не видеть этого пользователя в других обсуждениях. Но при этом он всё равно остаётся участником сети: может вести свой блог, читать ваш публичный контент (если он не требует авторизации), строить свой круг общения отдельно от вашего.

Пользователи могут добровольно формировать общие списки (например, антиспам) — и каждый сам решает, сверяться с ними или наплевать. С помощью того же механизма можно создавать сообщества внутри сети и наделять их правами.

Но есть одно исключение: мобильное приложение в магазинах приложений.

По правилам Google Play, любое приложение, показывающее пользовательский контент, должно иметь контактное лицо для жалоб на контент, нарушающий правила Google Play — и такой контент должен скрываться внутри приложения. В Мойре этот человек называется шерифом: он может помечать определённые блоги или посты так, чтобы мобильный клиент их не показывал.

Важно: это не «удаление контента из сети». Через браузер и на других платформах контент всё равно будет виден — в Мойре физически нет возможности удалить контент из чужого блога.

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

* * *

Вот, вкратце, что такое Мойра и почему она устроена именно так. Приглашаю всех присоединяться — как пользователей, так и тех, кто хочет участвовать в разработке: есть GitHub и группа разработчиков в Telegram. Идей ещё море — я уже реализовал много всякого такого, чего вы никогда не дождётесь от Facebook. Очень удобно владеть кодом своей собственной соцсети 😉

👍😍12
Comments (72)
👍😍2

При этом клиент на стороне читателя может фильтровать оформление (например, если кто-то решит писать всё огромными буквами или на ярко-красном фоне, чтобы выделиться во френдленте).

хы, вспомнил the good old days когда я нашёл баг в этой фильтрации и потратил день чтобы строить оформление так чтобы его можно было отфильтровать

😀👍2

Add account, к сожалению, приводит к Log In.

Так и должно быть. Когда вы залогинены, Add account - это залогиниться в ещё один аккаунт, чтобы потом иметь возможность быстро между ними переключаться. Точно так же, как, например, в GMail. Но если вы хотите создать дополнительный аккаунт, то там же в форме Log In есть ссылка Sign Up.

Спасибо, но на мой взгляд, это не верно с позиций UX. Я увидел Add account и подумал, что клик приведёт к форме создания аккаунта, (что естественно, нет?) а пришел в Log-In, который мне, в данном случае, не нужен, это разочаровало. И да, в GMail та же проблема. Это, собственно, первое. Второе - "Add account" - что это вообще? Куда я добавляю аккаунт? Если я добавляю, значит, я добавляю что-то, что уже создано. New Account будет лучше, но тоже плохо, так как я могу подумать, что по клику мне откроется (не знаю зачем) некий Новый аккаунт (только что созданный кем-то из пользователей сети, например). Create Account - будет самым правильным вариантом, так как напрямую отражает ДЕЙСТВИЕ, которое мне предлагается совершить.
P.S. Ориентироваться на дизайн GMail не стоит.

Вы сейчас сказали две противоположные вещи. Сначала, что увидев "Add account", подумали, что это создание аккаунта.

Я увидел Add account и подумал, что клик приведёт к форме создания аккаунта, (что естественно, нет?)

Потом, что "Add account" не означает создание аккаунта.

"Add account" - что это вообще? Куда я добавляю аккаунт? Если я добавляю, значит, я добавляю что-то, что уже создано.

Да, не означает. И создание аккаунта тут и не подразумевалось. А подразумевалось именно добавление существующего аккаунта в список, чтобы можно было между ними переключаться. Как на картинке.

Было бы хорошо, чтобы односимвольные аватары типа моего показывались как односимвольные (без underscore слева)

👍1

Кстати, я только сейчас понял, что это список, в моём случае, он списком не воспринимется, так как содержит только один единственный аккаунт. В любом случае, Log In меня совсем сбил с толку, так как я уже был залогинен. Вобщем, здесь есть проблема. Шмуэль, у вас есть ещё одна нода, что бы попробовать, каково общаться с кем-то с другой ноды? Хочу открыть ещё один аккаунт но на другой ноде.

Verify signature. А что, существует возможность, что сервер отдаст изменённый пост?

Нет. Был moera.club, но он уже давно не обновлялся, и moera.com.ua, но он так и не заработал по-хорошему. Ещё есть пару человек тут, у которых собственные ноды на одного человека, но они тоже давно не обновляли софт. Так что, если экспериментировать с несколькими серверами, придётся поднять свой. Могу помочь.

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

Так если сервер подделал пост, он и верификацию подделает. Кнопка проверки подписи должна не быть в пределах досягаемости сервера. Например, на десктоп-клиенте или в аппликации телефона. То, что всё подписано - это классно.

Так она и не в пределах досягаемости сервера 😉 Верификация работает на твоей домашней ноде, которой ты, очевидно, доверяешь.

👍1

Рассматривайте домашнюю ноду как личный компьютер, просто находящийся в облаке.

Это не так. Я - обычный пользователь вашей ноды. Вы, к примеру, подделали пост другого пользователя. Как я об этом узнаю? Или я не правильно представляю концепцию? Разве каждый обязан иметь свою доверенную ноду? На всех нодах можно видеть посты со всех других нод? Догадываюсь, что нет. Или да? Если каждая нода со своими постами, то одна из них может вырасти до фэйсбука 2.0.

Я не очень понял вопрос.

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

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

Более того, вы же не будете проверять подписи при помощи карандаша и бумаги? Вы воспользуетесь какой-то программой. Откуда вы знаете, что эта программа проверяет их правильно? Это опять вопрос доверия. Откуда вы знаете, что написанный мной клиент Moera, скачанный с моего сервера, правильно проверяет подписи? Но вы, конечно, можете написать свой скрипт, который скачает пост и проверит подпись. Если считаете это нужным.

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

👍2

И давайте немного наведём порядок в терминах, чтобы не путаться. Вы - не пользователь моей ноды, нода у вас своя, личная. Находится она на моём сервере. Каждый блог - это отдельная нода. Они могут физически находиться на одном сервере, а могут - на разных. Я являюсь провайдером, то есть предоставляю место своим клиентам для размещения их нод.

👍2

Спасибо за развернутый ответ! Это ключевая фраза: "

Но если вы не доверяете своему серверу проверять подписи, почему вы доверяете ему хранить свои заметки?"
Сервер для меня - third party, я не должен ему доверять проверку подписи. Подпись проверяет тот, кто доверяет только подписи и ни чему больше. Т.е. я сам должен проверять подпись. Вы правы, если сервер находится только в моём владении, то этой проблемы не возникает. Но мы говорим о провайдерах... Итак, я не доверяю серверу проверять за меня подписи, но доверяю хранить свои заметки. Казалось бы, здесь есть некоторое противоречие. На самом деле, я не доверяю серверу хранить свои заметки, я доверяю ему публиковать свои заметки, которые храню сам. Я же, теоретически, не знаю как вы храните мои заметки, может быть в /tmp))
Если говорить о жизни, то я вижу основную проблему соверемнного интернета в том, что мне буквально негде публиковать. Хранение же, черт возьми, задача куда более простая, - cloud backups, физические диски, репликация, репликация, репликация...

👍1

Жаль, что View source есть, но нет Edit source (HTML). Возможно не нашел.

Что-то неладное с аккаунтами происходит или мне кажется?

Я только вижу у вас свою аватарку, но аккаунт правильный. Это вы специально, или как-то само получилось?

Нет, проблема глубже. Сейчас пришлю скрин.

😱1

А как так получилось?

Даже не знаю. Ничего специального помимо кликов на сайте не делал (no hacking at all). Была какая-то опция, не совсем мне понятная, сейчас постараюсь вспомнить.

Сейчас кликнул на Edit account и похоже всё восстановилось;

Вспомнил. Перед тем как это случилось кликнул на Privacy на вашем аккаунте.

Понимаю, что испортил вам день))

😀1

Eсли нужно что-то протестировать с моего аккаунта.

У меня через два часа шаббат, слава Б-гу 😉

😀1

👍1

Шаббат шалом!

💝1

В редакторе постов снизу есть Advanced options. Там можно переключить редактор на Markdown или HTML

В редакторе комментов такого переключения нет, формат задаётся в настройках. Для комментов я сильно упростил интерфейс, хотя в API у них есть все те же фичи, что и у постов.

Если вопрос о выделении цитат 😉 то выделение цитаты относится ко всему абзацу. Просто разбиваете текст на два абзаца, и тогда у каждого из них можно убрать цитату. Или кнопкой в меню редактора, или поставить курсор в начало абзаца и нажать Backspace.

Kоммент, с точки зрения автора, ничем не отличается от поста, непонятно, почему у них разные наборы инструментов редактирования.

👍1

Отличается, и поэтому понятно 😉

Комменты короче и быстрее пишутся. Огромный редактор комментов с кучей функций будет только отпугивать комментаторов.

👍1