Об этом проекте

Этот проект предоставляет изменённую сборку [Bun](https://bun.sh), которая работает нативно на Android/Termux (aarch64) с использованием Bionic libc. Никакого proot, glibc-runner, LD_PRELOAD, termux-exec — все исправления скомпилированы непосредственно в бинарный файл через ветки `#[cfg(target_os = "android")]` в Rust. ### Что это решает Нативная сборка Bun 1.4 для Android сталкивается с тремя проблемами в Termux: - `bun install` падает с SIGSYS, потому что seccomp-профиль zygote в Android блокирует `fchmodat2` и `openat2`, предотвращая работу резервных путей времени выполнения. - `bunx <pkg>` выдаёт ENOENT, поскольку npm-обёртки содержат `#!/usr/bin/env node` и в Android отсутствует `/usr/bin`. - `bun:ffi cc()` сообщает о выключенном TinyCC, поскольку upstream блокирует эту функцию на Android. Этот форк применяет семь патчей на уровне исходного кода к Bun v1.4.0 для устранения каждой проблемы. ### Возможности - **Полная поддержка FFI**: работают `dlopen`, `cc()` и `JSCallback`. - **TinyCC включён на Android**: безопасный для SELinux JIT-память через `memfd_create` + ARM64 long-call veneers для вызовов BL вне диапазона. - **Обход seccomp-блокировок**: `lchmod` использует `fchmodat(AT_SYMLINK_NOFOLLOW)` вместо заблокированного `fchmodat2`; resolver использует обычный `openat` вместо заблокированного `openat2`. - **Ремешинг shebang**: скрипты с отсутствующими интерпретаторами переназначают пути вида `/usr/bin` на `$PREFIX/bin`. - **`bunx` работает**: лаунчер корректно устанавливает `argv[0]` для запуска скриптов. ### Совместимость | Параметр | Статус | |---|---| | Архитектура | `aarch64` (arm64) | | Android | 10+ (API 29+, SELinux untrusted_app_27+) | | Версия Bun | 1.4.0 | | `bun install` | Работает (обход seccomp) | | `bun run` / `bunx` | Работает | | `bun build --compile` | Работает (исправлено в upstream) | | `bun:ffi` `dlopen` / `cc()` / `JSCallback` | Работают | | opentui TUI | Работает | ### Установка ```bash curl -fsSL https://raw.githubusercontent.com/bd-loser/bun-termux/main/scripts/install.sh | bash ``` Устанавливает `bun` и `bunx` в `$PREFIX/bin`. ### Сборка из исходников Требуется Rust, NDK r27c, clang 18, CMake, Ninja и Bun для_bootstrap_. Полные инструкции см. в [docs/BUILD.md](docs/BUILD.md). ### Лицензирование MIT для патчей форка; компоненты TinyCC под LGPL-2.1; upstream Bun под MIT.