LINUX.ORG.RU

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

 , , , ,


3

2

Группа энтузиастов собрала 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 ()
Последнее исправление: CrX (всего исправлений: 5)
Ответ на: комментарий от 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)
Ответ на: комментарий от sunjob

Предложения?

Смотрите, релизы подписаны моим GPG, вся цепочка зависимостей запинена в коде, весь код в целом прилизан как минимум нейронкой несколько раз на предмет уязвимостей (тут уж прошу прощения, нас два человека). То есть, вопрос безопасности сводится к тому, насколько вы доверяете лично мне. Вопрос - как сделать так, чтобы вы доверяли мне? Устроится на работу в известную контору и публиковать от их имени - не предлагать.

sbkarr
() автор топика
Последнее исправление: sbkarr (всего исправлений: 1)
Ответ на: комментарий от DrRulez

Например, чтобы запустить сборку там, где, по разным причинам, вы этого иначе сделать не можете. От мобильных устройств до атомарных дистрибутивов и корпоративных политик безопасности. Бесплатный chroot для тех, кто в него не умеет. Ну и вопрос кросс-компиляции, как вы сейчас сможете легально собрать что-то для MacOS на Linux? А здесь все платформы и архитектуры одной кнопкой.

Но вообще, это ж только поверхность, демонстрация. Фича в том, чтобы сделать коробочный тулчейн для чего угодно, хоть браузер, хоть мастдай. Этот же тулчейн есть и нативно. Для тех же целей, собрать разом на Linux, Windows, MacOS. Без того, чтобы тащить себе Windows SDK иои macOS SDK.

Участие запрещённых веществ подтвердить или опровергнуть не могу, но с духом тезиса, пожалуй, соглашусь:)

P.S. А ещё здесь цельный Linux, а не конкретный дистрибутив - платформа первого класса. Хоть musl, хоть glibc. Разработчик сразу поставляет приложение, без ожидания мейтенеров. И без спецтулчейна для AppImage. Из коробки, на одном уровне с остальными платформами.

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

вопрос безопасности сводится к тому, насколько вы доверяете лично мне

насколько мы доверяем интернету! а тут, пожалуй, однозначный ответ!
(ничего личного ... :о)

Предложения?

если-бы... это как найти вакцину от рака, старения, отупления... :о)

sunjob ★★★★★
()
Последнее исправление: sunjob (всего исправлений: 1)

Шёл 2026 год, пацаны открыли для себя web assembly… Я правильно понял?

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

Так то двигло у браузеров сейчас очень быстрое, не хуже jvm. Другое дело что сайты и скрипты для них пишут кое-как, лишь бы быстрее сделать.

peregrine ★★★★★
()

Быстро пробежался глазами по тексту новости. Это про то, что ты кидаешь сурсы в браузер, а тебе их компилирует чья-то крутая машинка и выдаёт бинарь?

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

А это нечего на зеркало пенять, коли рожа крива. Я посмотрел и попробовал, на JS можно очень быстрый код писать, если надо ещё быстрее есть webasm и WebGL/WebGL 2/WebGPU. А сейчас имея ИИ под рукой это делать вообще проще паренной репы. Но конечно когда регулярки используют вместо циклов, то скорость страдает да.

Вообще есть мысли статью написать про разработку в 2026, потому что много старых подходов теперь в тыкву превратились, которые раньше по книжкам таскали. ХЗ только, надо ли, да и я сам не могу всё охватить. Например классические юнит тесты, когда тестировалась только открытая часть методов/api теперь неправильная. Т.к. всё не тестировали чтоб тесты не переписывать на каждое изменение внутренней логики, а то люди устают от этого и забивают на тесты. А ИИ сейчас может спокойно все функции тестами покрывать, что очень неплохо ловит баги в приватном коде, при граничных условиях, которые годами могут тихо сидеть. Туда же вопросы по оптимизациям кода и бенчи.

ЗЫ

А пишут кое-как, чтоб быстрее деньги зарабатывать.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 3)

Тулчейн кросскомпиляции и так собирается периодически, когда в этом есть необходимость, в маломальски крупных проектах, где есть либо отдельный интегратор, либо целый подрядчик с нужными спецами. Если ещё собирается ядро и куча базовых либ и фреймворков, то для этого ещё нужен мощнейший комп и того или иного рода CI инфраструктура, с компами не менее мощными, чем компы разрабов очень жирного аппа. И на каждой стадии свой контроль качества, и понятно, с кого спросить, если что-то не так. Но в таких случаях, - когда заказчик в конце концов отвечает за всю систему, не важно сколько опенсорсных компонент туда вложено, - тогда эта сложность оправдана.

А тут «своя libc», «свои заголовки API off-the-shelf OS»… Это больше попахивает каким-то экспериментом с дурацкой целью доказать что-то там, чем сложность, вынужденная реальными бизнес-целями. Типа вассермановского «буду девственником всю жизнь, и насрать на последствия».

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

В статье на Хабре же написано — just for fun...

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

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

А, я понял. Васисуалий Пупкин любил КОМПИЛЯТЬ ! Бывало непокомпиляет полчаса и уж аж трясет.

Мне вот прям интересно. А чтож это за причины такие интересные? И каковые цели преследуются?

От мобильных устройств

Ась? Енто на телефоне чтоля? Микроскоп в комплекте идет, или свой таскать предлагаете?

корпоративных политик безопасности.

УУУУУУ. Тебя первый-же cisa или даже кто-то помельче из ИБ с таким подходом знаешь куда пошлет? Знаешь, знаешь. Туда, куда дорога - всегда без пробок, несмотря на большую загруженность :) Как ты собрался пройти сертификацию по pci dss например с этим вот вот? Ась?

у и вопрос кросс-компиляции, как вы сейчас сможете легально собрать что-то для MacOS на Linux?

Я еще не тронулся умом программировать для мак-а на линуксе :) Таких альтернативно-одаренных еще надо найти. «Энтузиазисты» под веществами, посетившие Амстердам - не в счет. Ну а если уж очень приперло, то, знаетели зайти по ssh на мак и запустить cmake make в терминале - много ума не надо. Магия просто какая-то - не иначе. Наверное все потому, что мак - юникс система. это я для любителей веществ, если что, говорю.

Ту-же штуку, правда чуть более замороченно, с установкой ssh-сервера, можно провернуть и с виндой.

А еще можно взять и поставить vs-code. Где, внезапно, можно запустить режим удаленной разработки на удаленном хосте, не покидая среду. Без всякого «браузера» и остальной фигни из Амстердама.

А ещё здесь цельный Linux

Ежели туситы из Амстердама забыли, то это, вообще, название ядра :)

платформа первого класса

Видимо, забыли. Напоминаю - линукс - ядро!

А про все остальное ниже - господа страждущие веществ. Найдите лучше тулчейн под названием «МОЗГ» и переведите ползунок - в право!

И откройте, наконец, для себя vs-code.

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

Такая задача стоит везде, где нужна конкретная программа.

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

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

Статью по методологии могу только поддержать. Попытался начать процесс, но это только малая часть, буду рад помощи.

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

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

А какой вообще смысл собирать что-то нативное в браузере, если получившееся после сборки всё равно не сможет быть установлено и/или запущено в системе из-за всех этих ограничений «мобильных устройств, атомарных дистрибутивов и корпоративных политик безопасности» ? Ведь если бы нативный результат можно было бы установить и/или запустить в системе, то ничего не мешало бы точно так же установить и/или запустить в системе и нативную систему сборки, без всех этих удалений гланд через жопу в браузере.

В чём смысл этой охоты? Ничего против «Just for fun» не имею, сам давеча кучу fun получил собирая «DivMMC на рассыпухе» для своего оригинального ZX Spectrum Issue 3, но КМК эта заморочка со сборкой нативщины в браузере - это уже перебор в смысле невменяемого отношения затраченных усилий к этому самому fun’у который будет получен в результате.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от Stanson

А какой вообще смысл собирать что-то нативное в браузере, если получившееся после сборки всё равно не сможет быть установлено и/или запущено в системе из-за всех этих ограничений «мобильных устройств, атомарных дистрибутивов и корпоративных политик безопасности» ?

Отправить дальше по конвейеру политики публикации. У нас сейчас есть одно практическое приложение - оно собирается и отправляется во fleet control, который отправляет это на девайсы через OTA. Минус одна подсистема в этом самом fleet contol (от буквально на Radxa Zero может работать), плюс для возможности что-то починить прям из поездки.

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

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

Есть годное SDK которое позволит собирать приложения из под linux под MacOS и MS и что бы без браузера?

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

Отправить дальше по конвейеру политики публикации

И разбиться одним местом о службу ИБ, которая вас за вывод процесса разработки из закрытого контура, так поимеет, что потом долго вспоминать будете!

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

собирать приложения из под linux под MacOS и MS

ничто не мешает это и так делать, без этих штанов через голову. я уже писал - vs-code плюс удаленная разработка. все работает без этого вот

хочешь из под линукса на мак, хочешь из макос для линукс, хочешь из винды. да как хочешь. Уже давно. Уже несколько лет как.

DrRulez ★★★★★
()
Последнее исправление: DrRulez (всего исправлений: 2)
Ответ на: комментарий от DrRulez

я уже писал - vs-code плюс удаленная разработка. все работает без этого вот

А без vs-code и удалённых серверов? Только консольный кросс-компилятор и фсё.

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

T.e. что - это всерьёз предлагается как некое «enterprise» решение, а не «just for fun» типа «запустить линукс на восьмибитном микропроцессоре»?

Мда…

ЗЫ: Необходимость «что-то починить прям из поездки» в контексте данного топика возникает тогда и только тогда, когда тестирование и отладка предыдущей версии нативного бинаря залитого на кучу устройств либо отсутствуют напрочь, либо делаются каким-нибудь т.н. «ИИ» и неимоверно критичный баг попадает в прод. :)

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

А без vs-code и удалённых серверов? Только консольный кросс-компилятор и фсё.

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

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

Необходимость «что-то починить прям из поездки»

Решается банальным подключением по ssh :) через корпоративный vpn предварительно, само собой.

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

КМК эта заморочка со сборкой нативщины в браузере - это уже перебор в смысле невменяемого отношения затраченных усилий к этому самому fun’у который будет получен в результате.

А это видел?

https://bellard.org/jslinux

Там вообще любой x86 софт можно в браузере запускать.

firkax ★★★★★
()

Выглядит страшно, попроси клод скопировать дизайн godbolt

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

Конечно видел. Кто ж Фабриса-то нашего Белларда не знает. :)

Ну да, прикольно. Но практической пользы - никакой. :)

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

Вцелом - да, это «затюненные sdk на основе кросс-компиляторов». Поскольку таким sdk тесная связь с хост-ситсемой не полезна, а вредна - потсавляются они в часто виде контейнеров (но и не обязательно, в debian sdk на основе mingw протсо доступен в репе).

Для сборки нацеленной на windows - это упомянытуй mingw в сегодняшних реалиях в вариации UCRT64. Имел с ним небольшую практику, не всё идеально, но вполне рабочий вариант

Для сборки на MacOS - https://github.com/crazy-max/docker-osxcross - с ним практики не имел, но суть та же.

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

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