Об этом проекте
Этот проект предоставляет изменённую сборку [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.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.