MurMur — молодой проект, и он ведёт себя соответствующе: иногда что-то ломается, мы это замечаем и чиним. Этот текст — обычный девлог о серии недавних исправлений: в чём была проблема и что мы поменяли. Без номеров версий, без обещаний на год вперёд — только то, что уже работает.
Самая неприятная ошибка, которая у нас была: если отправить сообщение без сети или при нестабильном соединении, оно могло застрять в исходящих и больше никогда не уйти. У вас оно выглядело отправленным. Собеседник его не видел. Для мессенджера это худший сценарий из возможных: обе стороны уверены, что переписка в порядке.
Мы переписали работу с исходящими. Теперь всё, что вы отправляете офлайн, хранится на устройстве и автоматически уходит, как только связь вернётся. Логика доставки больше не предполагает, что в момент нажатия «отправить» у вас было стабильное соединение — на телефоне это, честно говоря, редкость. Заодно закрылся бытовой сценарий: написать пару сообщений в метро и вспомнить о них через час.
В MurMur есть сквозное шифрование звонков, но была дыра: если вы не сидели в приложении в момент звонка, звонок просто исчезал. Без следа, без уведомления. О попытке вы узнавали, только если человек писал вам после этого текстом.
Теперь пропущенный вызов приходит пуш-уведомлением. Видно, кто звонил, и можно перезвонить прямо из уведомления. Работает это через тот же конвейер шифрованных уведомлений, что и обычные сообщения: релей, который доставляет пуши, не может прочитать вашу переписку, и о звонках он знает не больше, чем нужно для доставки самого уведомления.
Мелочь, но заметная: во время звонка можно переключиться с фронтальной камеры на основную и обратно, не сбрасывая вызов. Раньше, чтобы что-то показать основной камерой, приходилось завершать звонок и набирать заново. Исправлено.
Ещё одна ошибка из семейства «нестабильная сеть»: после переподключения некоторые фото и текстовые сообщения могли появиться в чате дважды, а то и трижды. Отправляющий клиент не всегда был уверен, ушла ли предыдущая попытка, и повторял её, а принимающая сторона не распознавала повтор как то же самое сообщение.
Мы добавили дедупликацию при переподключении. Клиент теперь помнит, что уже получил, и повторные доставки одного и того же фото или текста схлопываются в одно сообщение. История переписки остаётся такой, какой должна быть: одно сообщение — одна запись, даже если сеть отвалилась три раза посреди разговора.
MurMur — это PWA: приложение ставится на iPhone и Android прямо из браузера, без App Store и Google Play. У этого есть приятный побочный эффект в отношении обновлений: переустанавливать нечего. Когда мы выпускаем исправление, приложение подхватывает его из сети само, как обычный сайт. Открываете MurMur в следующий раз — вы уже на актуальной версии.
Для маленькой команды это важно: мы можем починить баг, и через день он будет у всех, без многодневных модераций в двух сторах. Но за это приходится платить зависимостью от браузера: если браузер устарел или производитель что-то сломал в поддержке PWA, это бьёт и по нам. Мы об этом ограничении знаем и следим за ним.
MurMur — проект с открытым исходным кодом, молодой, с небольшой аудиторией. Независимого аудита безопасности не было. Личность в MurMur — это криптографический ключ (npub), без телефона и почты при регистрации. Из этого следует жёсткое правило: потеряли ключ — потеряли аккаунт. Восстановления по SMS нет, и это осознанно: восстанавливать нечем, номера же нет. Это реальные ограничения, а не мелкий шрифт.
Зачем тогда вообще писать такие ченджлоги? Отчасти потому, что небольшой проект зарабатывает доверие конкретикой: что поменялось и что может пойти не так. Если мы отчитываемся о починке доставки — значит, доставка раньше была сломана. Мы предпочитаем говорить об этом прямо.
Оно останется в исходящих и уйдёт автоматически, когда связь появится. Пересылать его заново или держать чат открытым не нужно.
В уведомлении видно, кто звонил. Звонки и сообщения шифруются сквозным шифрованием, релей не может их прочитать.
Ничего делать не нужно. MurMur — PWA, установленный из браузера: обновления приходят из сети сами, без сторов и переустановок.
Доступ к аккаунту будет потерян. Восстановления по SMS или почте нет, потому что при регистрации не используются ни номер, ни почта. Делайте резервную копию ключа аккуратно.
MurMur бесплатный и открытый — попробуйте на murmurchat.org или посмотрите код на GitHub.