Меня попросили сделать небольшое введение в Мойру для новых пользователей. Я давно собирался написать такое объяснение базовых вещей — что это вообще за сеть, почему она устроена именно так, а не иначе. Воспользуюсь случаем и соберу мысли в одном месте.
* * *
Когда говорят, что появилась новая социальная сеть, обычно представляют себе большой сайт, где люди регистрируются, у каждого есть аккаунт, есть лента постов, другие подписываются, читают, комментируют, ставят лайки — и всё это происходит внутри одного сайта.
Но интернет вообще-то не задумывался таким.
Если вспомнить ранние времена, веб виделся как большая паутина маленьких сайтов, связанных ссылками. Будущее представляли так: у каждого человека, компании, проекта — своя «домашняя страница», то есть отдельный сайт, где лежит всё, что связано именно с этим человеком или темой. А дальше всё связывается ссылками.
Но веб отлично работает для выдачи информации: ты запрашиваешь адрес и получаешь публичную страницу. А вот для получения информации от пользователя (комментарий, лайк, приватный доступ) нужна авторизация: кто-то должен представитьcя, идентифицироваться, и другая сторона должна наделить его правами. Эту проблему проще всего решать внутри одного большого сайта: он регистрирует пользователей, задаёт правила, хранит данные на одном сервере, раздаёт их из централизованной базы. Поэтому история ушла от «паутины личных страниц» к форумам, а затем к соцсетям, где всё в одном месте — и так, увы, продолжается до сих пор.
* * *
Централизация создаёт вполне конкретные проблемы.
1. Зависимость от владельца сервиса
Если бизнес не пошёл — сервис закрывается, и вместе с ним пропадает ваш контент и ваши социальные связи, существовавшие только внутри этого сайта.
2. Зависимость от правил и вкусов хозяина площадки
Владелец может решить, что ему не нравится ваш контент, или вы ему не подходите по любому признаку — и просто закрыть вам доступ.
3. Рекламная модель искажает стимулы
По-хорошему, если вы пользуетесь услугой — вы за неё платите. Но поначалу платежи в интернете были затруднены, особенно микроплатежи. Поэтому сервисы выбрали рекламную модель монетизации — как газеты, телевидение и радио — и приучили пользователей к халяве.
А реклама означает: задача соцсети — показать вам как можно больше рекламы. Значит, вы должны сидеть дольше и потреблять нескончаемый поток контента, который не даёт оторваться. В результате вы получаете меньше того, на что подписались, и больше того, что приносит площадке доход: продвижение, рекомендации, спонсируемый контент.
4. Площадке выгодно вас запереть
Если вы вложили годы в свой блог и социальные связи, вам психологически тяжело уйти. Поэтому соцсети намеренно усложняют экспорт, миграцию, автоматизацию, сторонние клиенты и инструменты — всё, что даёт пользователю контроль (и одновременно мешает рекламной модели).
Это картина, которую мы наблюдаем сегодня.
* * *
В Мойре я изначально ставил себе задачу продумать строение соцсети заново, исходя из идеи: веб — это сеть личных сайтов.
Мойра — это не один большой сайт, где хранится весь контент. С самого начала она строится так, что у вас есть ваше место в облаке — ваш домашний узел, ваша домашняя страница (по сути, ваш собственный сайт), где хранится ваш контент: посты, комментарии к ним, реакции и всё, что вокруг этого. (Этот «домашний узел» может хранить не только социальное. В принципе, любую информацию от любых приложений, которые вы захотите использовать.)
* * *
Чтобы другие могли комментировать и ставить лайки, нужно их авторизовать. И здесь ключевой момент: система регистрации/авторизации не должна зависеть от конкретного сервера, иначе вы снова окажетесь привязаны к площадке. Нужна общая интернетовская система — по смыслу чем-то похожая на DNS, только с авторизацией. В DNS есть имена и концепция владения именем, но нет встроенной криптографической авторизации (и регистрация имён — не автоматический процесс).
Пример базы пользователей с автоматической регистрацией и криптографическим подтверждением владения аккаунтом — блокчейн: в нём можно хранить имя и открытый ключ, а владение подтверждать закрытым ключом. Тогда любой сервер может просто проверять электронную подпись и решать, какие права давать данному пользователю.
Таким образом, узлы Мойры независимы, но благодаря общей системе имён и электронным подписям вам не нужно заводить аккаунт на каждом узле по отдельности. Сегодня имена хранятся в базе данных сервера имён, а в дальнейшем он будет заменен или дополнен блокчейном или любым другим механизмом. Важно, что концепция отделения имени от хостинга сохраняется.
В Мойре используется два ключа: один — для управления именем через сервер имён, второй — для подписей и авторизации. В идеале первый ключ передаётся сервером имён напрямую пользователю, и он хранит его у себя на компьютере или на бумаге в виде набора из 24 слов. В этом случае провайдер никаким образом не сможет получить к нему доступ. Но, к сожалению, для большинства пользователей такая процедура слишком сложна, и мне пришлось реализовать хранение обоих ключей на сервере.
* * *
Итак, аккаунт в Мойре состоит из двух частей:
- Имя в системе имён (оно не привязано к конкретному серверу).
- Домашний сервер (узел), на котором установлен софт Мойры и где физически хранится ваш контент.
Вы можете поставить софт Мойры на свой сервер или арендовать хостинг у провайдера (на большом сервере, где хостится много пользователей). Но в любой момент вы можете забрать весь свой контент, переехать к другому провайдеру или на свой сервер — и сохранить социальные связи, потому что имя не связано с сервером: вы просто перенаправляете его на новый узел.
Провайдер, разумеется, не обязан предоставлять услуги бесплатно. Самая здоровая модель — брать плату за хранение и/или за нагрузку, чтобы уйти от рекламной модели и выстроить правильные стимулы. Но это уже личное дело каждого провайдера как владельца бизнеса.
* * *
Серверный софт Мойры предоставляет API, и через него любой клиент или любая программа, которую вы захотите использовать, может работать с вашим контентом.
Я сделал веб-клиент, который выглядит привычно (в духе Facebook / Minds / Instagram), и постарался, чтобы для неподготовленного пользователя регистрация имени и выбор провайдера были максимально простыми и по возможности спрятанными за интерфейсом.
Но принципиально: открытые протоколы и открытый исходный код не ограничивают вас вообще. Это ваш сайт и ваш контент — хотите, используйте мой клиент, хотите — сторонний, хотите — пишите свой.
* * *
Даже если вы сидите у провайдера, ваш аккаунт там — это отдельный сайт. Поэтому френдлента устроена не как выборка из одной базы данных.
Мойра взаимодействует с теми, на кого вы подписаны, как с независимыми сайтами: получает уведомления о новых постах, копирует их в вашу ленту новостей на вашем узле. Взаимодействие с пользователем на том же сервере и с пользователем на любом другом сервере не отличаются. И, разумеется, другой участник сети не обязан пользоваться именно моим софтом — он может использовать любой другой, который реализует тот же протокол.
* * *
Софт в Мойре не устанавливает правила общения и не решает, что должно быть открыто или закрыто — это настраиваете вы. Настроек много: Мойра позволяет делать больше, чем любая другая соцсеть. (Чтобы интерфейс не выглядел как кабина самолёта, кое-что пришлось спрятать, но через API доступно всё.)
По форматам тоже нет искусственных ограничений: есть Markdown, есть визуальный редактор. При этом клиент на стороне читателя может фильтровать оформление (например, если кто-то решит писать всё огромными буквами или на ярко-красном фоне, чтобы выделиться во френдленте).
* * *
Поиск устроен так же, как поиск в вебе: есть отдельный поисковый сервер, который собирает публичные посты, имена, публичные связи и индексирует это. Естественно, вы можете поднять свой поисковик или пользоваться любым поисковиком, которому доверяете. Тот же поисковик выдаёт рекомендации, чтобы помочь новому пользователю сформировать свою ленту (их можно отключить).
* * *
Для тех, кто видел децентрализованные соцсети, многое из описанного выше будет звучать знакомо. Но у Мойры есть важные отличия.
1. Имя отделено от серверов
В отличие от федеративных сетей, где вы прикреплены к серверу/инстансу как к колхозу, в Мойре провайдер — это просто хостинг. Он не определяет правила, нет «конституции вашего пода», и вы можете уйти, не теряя контент и подписчиков.
2. Мойра не ограничивается моделью Твиттера
Цель — реализовать возможности уровня Facebook: разные уровни доступа, управление комментариями, группы, рекомендации и прочее. И сделать это всё максимально удобным для пользователя.
* * *
В Мойре нет и не может быть единой системы модерации. Есть контроль на вашей стороне: вы можете заблокировать пользователя, чтобы он не мог писать комментарии вам; можете настроить клиент так, чтобы не видеть этого пользователя в других обсуждениях. Но при этом он всё равно остаётся участником сети: может вести свой блог, читать ваш публичный контент (если он не требует авторизации), строить свой круг общения отдельно от вашего.
Пользователи могут добровольно формировать общие списки (например, антиспам) — и каждый сам решает, сверяться с ними или наплевать. С помощью того же механизма можно создавать сообщества внутри сети и наделять их правами.
Но есть одно исключение: мобильное приложение в магазинах приложений.
По правилам Google Play, любое приложение, показывающее пользовательский контент, должно иметь контактное лицо для жалоб на контент, нарушающий правила Google Play — и такой контент должен скрываться внутри приложения. В Мойре этот человек называется шерифом: он может помечать определённые блоги или посты так, чтобы мобильный клиент их не показывал.
Важно: это не «удаление контента из сети». Через браузер и на других платформах контент всё равно будет виден — в Мойре физически нет возможности удалить контент из чужого блога.
Кроме того, провайдеры будут вынуждены соблюдать законы стран, где они находятся — иногда это касается и модерации. Единственное, что вам остаётся в таком случае — хранить контент на своём сервере или выбирать провайдеров в юрисдикциях без драконовской цензуры.
* * *
Вот, вкратце, что такое Мойра и почему она устроена именно так. Приглашаю всех присоединяться — как пользователей, так и тех, кто хочет участвовать в разработке: есть GitHub и группа разработчиков в Telegram. Идей ещё море — я уже реализовал много всякого такого, чего вы никогда не дождётесь от Facebook. Очень удобно владеть кодом своей собственной соцсети 😉
Comments (2)
https://x.com/abuviktor1/status/2016043282568987044
хы, вспомнил the good old days когда я нашёл баг в этой фильтрации и потратил день чтобы строить оформление так чтобы его можно было отфильтровать