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

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

Пользоваться Decimen предельно просто. Откройте веб-приложение на обоих устройствах, выберите «Отправить» на первом и укажите файл. Поток анимированных QR-кодов запустится немедленно. На принимающем устройстве выберите «Получить», предоставьте доступ к камере и направьте её на экран отправителя.

Документация проекта рекомендует использовать ноутбук в качестве передатчика, увеличить яркость его дисплея и расположить принимающий телефон так, чтобы QR-код занимал как можно большую часть поля зрения камеры. После того как будет захвачено достаточно данных и проверка целостности по SHA-256 пройдёт успешно, восстановленный файл становится доступным для предварительного просмотра и сохранения.

Decimen использует экран передающего устройства и камеру приёмника для передачи файлов.
Decimen использует экран передающего устройства и камеру приёмника для передачи файлов.

Decimen поддерживает передачу отдельных файлов размером до 64 МБ и вставленных текстовых фрагментов размером до 4 МБ. Приложение сохраняет исходное имя файла и медиа-тип, применяет сжатие gzip, когда это уменьшает объём данных, и проверяет передачу перед тем, как предложить файл пользователю. Полученные видео также можно воспроизводить прямо в браузере.

За необычным интерфейсом скрывается интересная техническая деталь. Вместо того чтобы разбивать файл на фиксированную последовательность QR-кодов, которые должны считываться строго по порядку, Decimen применяет fountain-кодирование Luby Transform.

Отправитель непрерывно генерирует закодированные кадры, а приёмник собирает любые уникальные кадры, которые попадают в объектив камеры. По данным проекта, для восстановления обычно требуется около 115% от минимального числа кадров. Их порядок не имеет значения, а пропуск кадра лишь увеличивает время передачи, не повреждая файл.

Разработчик сообщает, что в более масштабном эксперименте, из которого вырос Decimen, скорость передачи между телефонами достигала около 128 КБ/с, а на странице проекта демонстрируется передача примерно 130 КБ/с. Разумеется, такие показатели не сравнятся с обычными локальными сетями, но скорость здесь не главное. Decimen предназначен для ситуаций, когда настройка сетевого подключения неудобна, нежелательна или невозможна.

После первого посещения веб-приложение может работать в офлайн-режиме и устанавливаться как прогрессивное веб-приложение (PWA) на iOS и Android. Те, кто предпочитает не использовать размещённый сервис, могут запустить проект самостоятельно. Репозиторий содержит команды для сборки в режиме разработки и продакшен-сборки, а также автономные сборки с изолированными страницами для отправки и получения.

Однако у Decimen есть важное ограничение в плане безопасности: он не шифрует передаваемый контент.

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

Decimen Optical Transfer написан в основном на TypeScript и распространяется под лицензией MIT. Желающие опробовать приложение могут воспользоваться официальным веб-сервисом напрямую или обратиться к репозиторию проекта на GitHub за исходным кодом, документацией и инструкциями по самостоятельному развёртыванию.