Привет Хабр. В свободное время я поддерживаю бесплатный сервис Авакари. Основная его функция - фильтрация сообщений из многих тысяч разных источников (RSS, Telegram, Fediverse, ...). В двух словах, вы определяете критерии поиска, Авакари "просеивает" то, что вам интересно и присылает результаты. Интеграция с Fediverse появилась недавно и содержала на своём пути нетехнологические грабли, к которым автор не привык. В этой статье я расскажу о них, возможно, мой опыт будет кому-то полезен.
Федиверс
Fediverse - это гипертекстовый векторный Фидонет децентрализованная социальная сеть. Узлы обмениваются данными по общему протоколу ActivityPub, который и объединяет весь этот зоопарк. Узлы могут иметь собственный неповторимый софт, правила и прочее. Каждый может стать участником Fediverse зарегистрировавшись на любом из существующих узлов либо создав собственный. Есть наиболее популярный софт - Mastodon и наиболее популярный узел - https://mastodon.social. Fediverse стал особенно популярным убежищем криптоанархистов с момента покупки Twitter Маском. На момент написания статьи число пользователей превысило 11 млн. и продолжает расти.
Интеграция
После RSS и успешной интеграции с Телеграм выглядело логичным развивать Awakari в направлении интеграции социальных сетей. Facebook, Instagram и им подобные, очевидно, не заинтересованы в том, чтобы предоставлять данные кому-либо. Другое дело Fediverse, где каждый может написать свой сервер, просто реализуя открытый протокол ActivityPub. Таким образом, Awakari стал работать в роли прокси-сервиса, который от лица своих пользователей автоматически находит и подписывается (follow) на аккаунты в Fediverse. Как только аккаунт подтверждает запрос на подписку (follow), он самостоятельно начинает рассылать свои новые активности (посты) своему новому подписчику.
В механизме follow в протоколе ActivityPub на практике есть один нюанс. В наиболее популярных реализациях, таких как Mastodon, есть возможность автоматически одобрять все входящие запросы follow. С одной стороны, это позволяет набрать большое количество подписчиков и быть популярнее пользователю аккаунта. С другой стороны, пользователь может не знать, о том, что таким образом он уже согласился на обработку своих данных (постов) кем угодно и где угодно.
Тревожные сигналы
В какой-то момент люди стали замечать среди своих подписчиков Awakari и начали интересоваться, что это за зверь. Иногда даже переходили на основной сайт, находили контакты и задавали вопросы. Как правило, после разъяснений о том, как это работает они оставались удовлетворены ответами. Иногда представители ЛГБТ-специфичных узлов беспокоились о приватности своих пользователей. Их интересовала потенциальная возможность использования Awakari для преследования конкретных людей. Здесь стоит отметить также, что в Fediverse популярны леворадикальные настроения, зачастую неприемлимо: "отрицание климата" (дословно), "энтерпрайз", Трамп и тому подобное.
Из такой обратной связи мне удалось также узнать, что незадолго до этого был скандал с неким сервисом "Content Nation". Единственным автором Content Nation является некий backend-программист Sascha Nitsch (!). Сам сервис ничего особо криминального не делал, но пришелся неожиданно не по вкусу пользователям Fediverse. После чего некоторые пользователи решили ради веселья накормить Content Nation нелегальным контентом и пожаловаться на этот же сервис. Последствия таких шуток грозили автору 1 годом тюрьмы в Германии.
Awakari выгодно отличается от Content Nation тем, что он не показывает содержимое из сторонних источников на своём домене. То есть накормить его непотребщиной не так просто. Кроме того, Awakari не является "скрэйпером", а вместо этого использует общепринятый и вежливый механизм follow для получения контента. Поэтому до определённого момента казалось, что всё идёт не так плохо.
Не в ту дверь
Позже ко мне в очередной раз пришла обратная связь, что неплохо было бы сделать так, чтобы Awakari явно уведомлял пользователя Fediverse, что он на него подписан. Так как многие сервисы имеют автоматическое одобрение follow-запросов, то это выглядело вполне логичным. Эффект получился обратный - Awakari стал привлекать внимание пользователей, которые не разобравшись что к чему, стали довольно активно жаловаться. В отдельных случаях стали упоминаться GDPR и пожелания посоветоваться с адвокатами "ещё вчера":
Немного разобравшись в вопросе, могу сказать, что апелляция к GDPR была неуместна, так как при регистрации на узлах Mastodon (и остальных типах сервисов) пользователь автоматически соглашается на то, что узел будет работать как Public Морозов и рассылать активности всем подписчикам, которые, в свою очередь могут делать с этим всё, что захотят.
...Your posts are delivered to your followers, in some cases it means they are delivered to different servers and copies are stored there. When you delete posts, this is likewise delivered to your followers. The action of reblogging or favouriting another post is always public...
... We make a good faith effort to limit the access to those posts only to authorized persons, but other servers may fail to do so. Therefore it's important to review servers your followers belong to. You may toggle an option to approve and reject new followers manually in the settings. Please keep in mind that the operators of the server and any receiving server may view such messages, and that recipients may screenshot, copy or otherwise re-share them. Do not share any sensitive information over Mastodon...
Строго говоря, иначе Fediverse просто работать не сможет и не будет. Можно убедиться в том, что узлы работают именно так, а не иначе, заглянув, например, на live stream в Mastodon:
Однако обычных пользователей это всё не убеждало и некоторый всплеск негативной реакции имел место быть. Интеграция Awakari с Fediverse даже была приостановлена на несколько часов до выработки решения проблемы.
Масла в огонь также добавило то, что кроме ActivityPub-интеграции общего назначения, в Awakari есть также ещё и Mastodon-специфичная интеграция, которая слушает этот самый Live Feed на предмет публичных постов (дополнительный входящий трафик). Это привело к тому, что некоторые пользователи, у которых нет Awakari среди подписчиков, обнаруживали свои посты в результатах в Awakari. Это, опять же, не нарушает ничего, если пост явно помечен как "indexable" и Google их вполне обрабатывает, но что дозволено Юпитеру, не дозволено быку...
Чуть позднее также был небольшой всплеск поддержки, люди с разных узлов также высказывались в защиту Авакари. Особенно интересно мнение одного пользователя из японского misskey узла:
Postmortem
Ущерб
Незначительный. Блокировка на некоторых небольших узлах. Простой в течение нескольких часов интеграции с Fediverse. Снижения входящего трафика из Fediverse не замечено.
Риск
Средний. Вероятность худшего исхода мала, но последствия могут быть значительными. Высокая степень неопределённости.
Причина
Привлечение внимания широких масс без проработанных механизмов отказа от обработки данных в Awakari (opt-out).
Меры
Не спамить пользователей уведомлениями о follow. Всю необходимую информацию расположить в описании сервиса, доступном пользователям Fediverse для прочтения.
Сделать Awakari более социально-дружелюбным, выглядящим больше как соцсеть, нежели как поисковая система, чтобы не пугать пользователей из Fediverse.
Mastodon: обрабатывать только аккаунты и посты, явно помеченные как "discoverable" и "indexable". Запрашивать follow только если аккаунт вручную подтверждает.
Аккаунты с тэгом "#nobot" в описании не должны обрабатываться никак вообще.
Пост с тэгом "#nobot" не должен обрабатываться.
По результатам вырабатанных мер появился документ для владельцев источников, которые не хотят, чтобы Awakari их использовал: https://github.com/awakari/.github/blob/master/OPT-OUT.md. Решение пока ещё неидеальное, но лучше что-то, чем ничего.
PS
История повторилась со стартапом "Maven", который брал всё, что плохо лежало, в том числе сообщения, которые пользователи Fediverse считали "приватными". Несмотря на то, что в отличие от меня, там работает целая команда, проспонсированная Twitter и OpenAI (не-не, я не завидую), это никак их не уберегло их от наступания на те же грабли спустя 2 дня.