LINUX.ORG.RU

Xenolith: Clang в браузере, сборка нативных С++ приложений для Windows, Linux, MacOS прямо со страницы

 , , , ,


0

3

Группа энтузиастов собрала SDK, позволяющий собирать полноценные настольные приложения прямо в браузере.

Система устроена так: инструменты сборки разделены на две части: host и target. Часть target полностью независима от платформы, на которой выполняется компиляция, что позволяет использовать её для сборки приложения на любой платформе, включая браузер.

Далее, этими же инструментами собирается сам clang с целью wasm32-unknown-unknown, он и выполняет сборку в браузере.

Для того, чтобы система запускалась. создана «зонтичная» libc, которая транслирует внешние POSIX функции в функции системы. Эта libc одновременно заменяет UCRT на Windows и служит полноценной libc в WebAssembly.

Лицензия запрещает поставлять заголовки Windows SDK и MacOS SDK в браузерную систему, потому им найдены замены. На Windows это ручные функциональные замены для функций WinAPI, которые линкуются с системными DLL независимо от Windows SDK. На MacOS создан открытый sysroot на базе открытых заголовков XNU и открытых проектов Apple.

Поверх собственной libc собирается llvm libc++, прикладные библиотеки (curl, openssl, freetype, libpng и прочие), собственные прикладные средства и собственный открытый графический движок Xenolith Engine.

Система сама выбирает графический API и API оконной системы, за счёт чего одно и то же приложение может работать на Linux в режимах X11 или Wayland. Поддеживается WebGPU, что позволяет запускать графические приложения там же, в браузере. Инструменты сборки для Linux поставляются со старой glibc (2.33), за счёт чего могут запусаться на современных системах и линковаться с glibc старших версий бесшовно, без контейнера или другой обёртки. Все нужные зависимости собираются статически, либо линкуются динамически через dlopen. На Windows, среда (включая поставляемый бинарно clang) не использует реализаций С и C++ от Microsoft, вместо этого реализована собственная базовая библиотека и подсистема старта.

Система сборки – GNU Make (4.1+), однако для Windows и WebAssembly используется собственный сборщик xlmake (его исходный код также в репозитории), полностью совместимый по синтаксису с GNU Make. Он необходим, поскольку обычные Makefile часто ожидают Linux-подобную среду исполнения, а на Windows и WebAssembly её нет. xlmake подменяет вызовы к стандартным программам встроенными функциями, и работает с тем же Makefile.

Среда позволяет использовать любую базовую платформу для того, чтобы собирать любую целевую платформу, кросс-компиляция здесь заложена изначально на самом базовом уровне. Именно за счёт этого стало возможным собирать полнофункциональные настольные приложения в браузере.

Исходный код среды доступен на Github под лицензией MIT, там же есть бинарные сборки инструментов. Все без исключения инструменты собираются из исходных кодов внутри среды (для сборки требуется Linux и компилятор, способный собрать GCC 15.2, дальше среда соберёт всё сама).

Доступна онлайн-демонстрация с набором примеров, включая DOOM и демо-версию HoMM2. Не требует регистрации, работает одной страницей, не общается сервером, данные лежат на AWS CDN, отслеживание посещений Яндекс-метрикой.

Подробная статья на хабре.

Сайт движка.

>>> Попробовать живьём



Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 3)
Ответ на: комментарий от PPP328

А как может выглядеть такая гарантия? Можно взять, собрать обычный тулчейн из кода с гитхаба, скачать код примера, собрать тулчейном, сравнить результат.

sbkarr
() автор топика
Ответ на: комментарий от sbkarr

Если нужно какое-то доверие c громкими именами, то через 5 минут будет доклад с анонсом этого же проекта здесь: www.basealt.ru/22dev-conf. Можно будет смело сказать, что Альт Линукс пропустили троянщиков.

sbkarr
() автор топика

Без сомнения круто и по хакерски, кроссплатформенно. Я могу придумать много применений этой красоты, но для чего позиционируют проект сами авторы?

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

У нас изначально не было идеи именно для WebAssembly и браузера, это скорее сделано в качестве bells and whistles чтобы показать возможности. В рамках системы WebAssembly это только один из hosts и targets.

А исходная цель это сделать среду для C++, где нет платформенных ifdef, не нужно вспоминать, как в текущем дистрибутиве ставить правильные dev пакеты, откуда брать и как устанавливать SDK на проприетарщину. Заодно, возможность разрабатывать на атомарном дистрибутиве. И в принципе иметь возможность собрать всё, не прыгая между машинами. То есть, сделать универсальное коробочное издание C++, как в Rust или Zig. А запуск добра в браузере вышел, во многом, побочным продуктом.

sbkarr
() автор топика
Ответ на: комментарий от sbkarr

Можно взять, собрать обычный тулчейн из кода с гитхаба, скачать код примера, собрать тулчейном, сравнить результат.

А если у меня есть такая возможность, то зачем мне ваш проект?

PPP328 ★★★★★
()
Ответ на: комментарий от PPP328

Чтобы взять, собрать самому и использовать в свооих целях. А зачем ещё нужны проекты с исходным кодом?

sbkarr
() автор топика

оказывается, у меня тут какого-то webgpu в браузере нет

madcore ★★★★★
()

А откуда такая задача — собирать стопицот таргетов на стапицот хостах?

Ну и да, скорость сборки какова? Попробуйте собрать в броузере... Броузер! Интересно, сколько это займет времени и как после этого заработает?

gns ★★★★★
()
Ответ на: комментарий от sbkarr

похвально. Жаль, что linux версия всё ещё вынуждена линковаться к glibc

mittorn ★★★★★
()
Ответ на: комментарий от gns

Собрать в этой среде браузер, чтобы…
(через полутора суток)…запустить из первичного браузера собранный браузер, чтобы собрать в этой среде браузер, чтобы…
(через еще полутора суток)…запустить из собранного в браузере браузера собранный в браузере браузер, чтобы собрать в этой среде (собранного в браузере браузера) браузер, чтобы…
…
…в системе, которую поставил Джек

DzenPython ★
()
Ответ на: комментарий от I-Love-Microsoft

Без сомнения круто и по хакерски, кроссплатформенно.

Нет, конечно, их покусал Xibit с «тачка на прокачку».

Shadow ★★★★★
()
Ответ на: комментарий от DzenPython

Ну как-то так. GCC сам себя быстрее собирает.

Я как бы рад за автора, если у него есть время на подобные проекты, работа же действительно большая... Но смысл?

gns ★★★★★
()
Ответ на: комментарий от imul

Ему некогда. Он деньги зарабатывает, насколько мне известно. И явно не от хорошей жизни.

gns ★★★★★
()
Ответ на: комментарий от sbkarr

Можно взять, собрать обычный тулчейн из кода с гитхаба, скачать код примера, собрать тулчейном, сравнить результат.

А на кой художник это делать в браузере? Это примерно как штаны через голову одевать. Как по мне, та самая «группа этузиазистов», про которую рассказано в начале новости, писала сие находясь в стольном граде Амстердаме под воздействием некоторых (запрещенных в РФ) веществ… :)

Потому как лично у меня - нет другого объяснения вот этому вот :)

DrRulez ★★★★★
()

Очень хорошо. Пусть всю нагрузку с наших чудесных серверов забирают на их клиентские машины.

Saakx ☆
()

ну, вообще-то, да! как насчет безопасности?!
имхо, весьма дырявое решение.

sunjob ★★★★★
()
Последнее исправление: sunjob (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.