Vercel Labs представила фреймворк Zero-Native на основе Zig с открытым исходным кодом

Vercel Labs представила фреймворк Zero-Native на основе Zig с открытым исходным кодом — Tech | Versia.media

Vercel Labs выпустила с открытым исходным кодом zero-native — кроссплатформенный фреймворк для разработки нативных десктопных приложений (поддержка мобильных приложений запланирована в будущих релизах). Zero-native обходит Electron, используя встроенные в операционную систему движки WebView, и, по утверждению разработчиков, позволяет создавать более компактные и эффективные нативные приложения с минимальными системными издержками.

Архитектура и возможности

Zero-native написан на языке Zig, что обеспечивает прямое взаимодействие с нативными библиотеками на C и высокую скорость инкрементальной компиляции. Цель проекта — добиться малого веса исполняемых файлов и низкого потребления оперативной памяти, отказываясь от значительных системных издержек, характерных для кроссплатформенных фреймворков вроде Electron, которые поставляют полноценную браузерную среду вместе с приложением.

Для резервного сценария разработчики могут настроить файл манифеста app.zon, чтобы включить Chromium в сборку через Chromium Embedded Framework.

Для резервного сценария разработчики могут настроить файл манифеста 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 все еще остается экспериментальным инструментом, находящимся в стадии активной разработки.

← Tech