Современный браузер - это миллионы строк кода.
- Прорисовка HTML / CSS и выполнение JS - лишь очень малая часть того, что браузер сегодня умеет. Он так же должен быть:
- Аудио и видео плеером, проигрывателем шифрованного контента, просмотрщиком изображений, базой данных, p2p и p2s транспортом, библиотекой для: работы с VR девайсами, геймпадами / определения геолокации, положения девайса, его движения / нескольких механизмов аутентификации / системы оплаты и десятков других вещей, которые в лучшем случае должны быть фичами application layer / частями 3rd party библиотек.
- Что хуже, количество фич продолжает расти. Не исключаю, что браузеростроители намеренно усложняют стандарт, чтобы не вылететь с браузеростроительного бизнеса.
- Помимо этого, результатом превращения просмотрщика документов в платформу для приложений является огромное количество подпорок для исправления уязвимостей того или иного рода.
- А добавление поддержки каждого нового типа устройства в браузер - это таки годы обсуждений и ещё столько же запила.
При этом есть и положительные стороны:
- Compile once, run everywhere.
- Каждое приложение имеет адрес. Т.е. может быть найдено даже без включения в разного рода «каталоги» (app store'ы).
- Относительно малый размер и отсутствие необходимости скачивать приложение целиком, чтобы решить - пользоваться или нет.
- Возможность поделиться результатом работы приложения (например, ссылку на твит можно опубликовать в лицокниге).
- Есть зачатки контроля используемых девайсов, звука и т.д. Далеко от идеала, но сказать «не используй мой микрофон / камеру, не сри в мою localDB, заткни свой звук» можно.
Вопрос в том, как бы нам заполучить эти ништяки, но без браузера и его проблем. Минималистичное и, возможно, на базе уже существующих технологий решение. Кроссплатформенное, достаточно универсальное, чтобы для каждого типа девайса не созывать комитет, но при этом с гибкой настройкой доступа к возможностям платформы.
Ключевые слова: JVM, WASM (может выполняться по мере загрузки и оптимизирован под минимальный размер), CIL, Snap, Flatpack (имеет гибкую настройку доступа к устройствам и сети, но использует Linux специфичные фичи), WebGL.
Перемещено leave из development