Тулчейн, общая libc с libc++, прикладные библиотеки и графический движок. Linux, Windows, macOS и Android собираются из одного кода. Windows SDK и NDK для этого не нужны.
Компилятор, линкер и make уже в тулчейне. Отдельно их ставить не нужно.
MIT, без роялти
Как создать проект, собрать его и выбрать систему, написано в репозитории. Откройте исходники и спросите — агент ответит по ним.
Тулчейн везёт компилятор, заголовки и библиотеки с собой. Чужой SDK нужен только если вы сами выбрали сборку через него.
x86_64, arm64 и riscv64, glibc и musl. Вызовы уходят в системную libc, вторая поверх неё не подменяется.
x86_64 и arm64. Своя libc на mimalloc, без UCRT и без Windows SDK. Системные DLL цепляются своим import.lib.
x86_64 и arm64. Сборка +sprt обходится без macOS SDK. Обычная сборка под Apple SDK его просит — так у них устроена лицензия.
arm64, armv7, x86 и x86_64. Есть свой sysroot, NDK для него не нужен. Если NDK уже стоит, собрать через него тоже можно.
Отдельными таргетами собираются WebAssembly, Embox и NuttX. На iOS пока только sysroot тулчейна: рантайма и варианта +sprt там нет.
С вашего кода Linux, Windows, macOS и Android выглядят одинаково. Лес #ifdef из-за разной CRT не нужен.
На Linux, Android и macOS вызовы идут в glibc, musl, Bionic или libSystem. На Windows libc своя. time_t и off_t везде 64-битные. Вызова, которого в системе нет, из заголовков не выкидываем: он возвращает ENOSYS.
Обычный pthread на каждой системе. Мьютекс с наследованием приоритета сидит на futex, на WaitOnAddress или на os_sync — смотря где запущено.
Сам рантайм собран на маленьком sprt/cxx: без исключений, со Status и Result. Прикладной код получает обычный std:: из порта LLVM libc++. Он живёт в std::__sprt и не сталкивается с чужим libc++.
Таймеры, сокеты, файлы и процессы — через один Looper. Под ним epoll и io_uring, IOCP, kqueue или ALooper. Окна и дисплеи тоже за этим API, а не за заголовками чужого SDK.
Поверх рантайма лежат библиотеки, которыми обычно обрастает приложение. Это не обёртки над системными SDK.
Один контейнер Value пишется в JSON, CBOR и свой url-safe формат. Сжатие LZ4, формат на чтении определяется сам.
SQLite и PostgreSQL через одни схемы: объекты, файлы, роли на операцию, постраничная выборка. Полнотекстовый поиск на 23 языках, в том числе в памяти, без сервера.
HTTP/2 и HTTP/3 через curl. OpenSSL, GnuTLS и mbedTLS: RSA, ECDSA, EdDSA, ГОСТ 34.10, 34.11 и 34.12, JWT.
Чтение PNG, JPEG, WebP, GIF и TIFF, запись PNG, JPEG и WebP. Вектор режется в треугольники на GPU. Шрифты — FreeType и HarfBuzz, в том числе переменные.
HTML и EPUB со своей вёрсткой: блоки, обтекание, таблицы, оглавление. Ещё Markdown и шаблоны Pug.
Свой zip, файловая система, гостевой WebAssembly на WAMR. Графику в гостевой код пока не отдаём.
Кадр — это граф проходов и ресурсов. Барьеры и смену лейаутов движок ставит сам, графику и compute можно мешать в одном графе. Новый кадр готовится, только если сцена изменилась: в простое батарею не жжёт.
Основной. На macOS это MoltenVK, с portability-подмножеством, из вашего .app.
Отдельный бэкенд на macOS, без прослойки через Vulkan.
Для плат, где Vulkan нет: Mali, VideoCore, старый Android и эмуляторы.
Нативно и в браузере, через сборку в WebAssembly.
Плоский 2D без драйвера и шейдеров. Compute, глубина и MSAA тут не делаются.
Wayland и X11 (на Linux выбирается при запуске), Win32, Cocoa, Android и режим без окна. В комплекте flexbox и grid, жесты, вектор и текст с посадкой глифа в пиксель.
Установщик ставит тулчейн и создаёт первый проект.