
Vercel Labs выпустила zero-native с открытым исходным кодом — кроссплатформенный фреймворк для создания нативных десктопных приложений (поддержка мобильных приложений планируется в будущих релизах). Zero-native обходит стороной среду выполнения Electron в пользу встроенных в операционную систему движков WebView и, по заявлениям разработчиков, позволяет создавать более компактные и эффективные нативные приложения с минимальными системными издержками.
Архитектура и возможности
Zero-native написан на языке Zig, благодаря чему напрямую взаимодействует с нативными библиотеками на языке C, а также отличается высокой скоростью инкрементальной компиляции. Цель проекта — обеспечить малый вес исполняемых файлов и низкое потребление оперативной памяти за счет отказа от огромных системных издержек, характерных для кроссплатформенных фреймворков, таких как Electron, которые поставляют полноценную среду браузера вместе с приложением.
Тем не менее, для обеспечения резервного сценария разработчики могут настроить файл манифеста
app.zon, чтобы включить Chromium в сборку через Chromium Embedded Framework.
По имеющимся данным, Zig отличается более высокой скоростью инкрементальной компиляции по сравнению с Rust, что имеет ключевое значение для разработки приложений — процесса, который по своей природе является высокоитеративным. Ричард Фельдман, создатель языка программирования Roc, в прошлом году объявил о полном переписывании их компилятора с Rust на Zig, назвав медленную компиляцию в Rust одной из главных «болевых точек».
Кроме того, Zig напрямую взаимодействует с бинарным интерфейсом приложений языка C. Благодаря этому для повторного использования нативных локальных библиотек C не требуется интерфейс внешних функций, что значительно экономит время при сборке. Вместо описания структуры данных на промежуточных языках или генерации биндингов разработчики просто подключают системный заголовочный файл и напрямую вызывают платформенные SDK или аудиокодеки.
С точки зрения безопасности, Zero-native использует систему на основе полномочий (Capability-based system), тем самым запрещая фронтенду произвольно читать локальные файлы или напрямую вызывать нативные API платформы. Вместо этого код на Zig должен явно регистрировать нативные команды, которые он планирует использовать, а манифест app.zon должен напрямую предоставлять соответствующие разрешения.

Создайте веб-приложение и получите бонусы на его деплой в облако
В новом бесплатном курсе по JavaScript.
Альтернативы
Zero-native выходит на крайне активный рынок альтернатив Electron, преследующих цель уменьшить раздутый размер кроссплатформенных приложений. Так, его конкурентами становятся WebUI, LynxJS, Tauri.
WebUI задействует уже установленные в операционной системе браузеры, которые выступают в роли графического интерфейса для языков бэкенда, таких как C/C++ или Nim, без необходимости упаковывать Chromium внутрь приложения. Tauri аналогичным образом использует нативный WebView операционной системы в связке с бэкендом на Rust, где межпроцессное взаимодействие (IPC) служит мостом между фронтендом и бэкендом.
Lynx — это работающий на базе Rust фреймворк, который компилирует фронтенд (веб-разметку, CSS и JavaScript) в по-настоящему нативные элементы интерфейса с помощью двухпоточного движка, разделяющего рендеринг интерфейса и бизнес-логику. Он компилируется под операционную систему HarmonyOS от Huawei, отличительной чертой которой является Cangjie — новый язык с открытым исходным кодом, поддерживающий нативные обработчики эффектов и алгебраические типы данных.
Ограничения
Хотя использование встроенных в ОС движков WebView для рендеринга уменьшает размер поставляемого приложения, оно также подвергает пользователя риску столкнуться с проблемами несовместимости и различиями в отображении интерфейса между разными операционными системами. Что еще более важно, приложения могут аварийно завершать работу или вообще не запускаться, если нативный WebView отсутствует в системе, не найден или имеет неподдерживаемую версию.
Так что на данный момент Zero-native все еще остается экспериментальным инструментом, находящимся в стадии активной разработки.
ссылка на оригинал статьи https://habr.com/ru/articles/1047650/