このプロジェクトについて
このプロジェクトは、Bionic libc を使用して Android/Termux (aarch64) 上でネイティブに動作する [Bun](https://bun.sh) の改変ビルドを提供します。proot、glibc-runner、LD_PRELOAD、termux-exec は不要で、すべての修正は Rust の `#[cfg(target_os = "android")]` 分岐を通じてバイナリに直接コンイルされています。
### 解決する問題
上流の Bun 1.4 の Android ビルドは、Termux 上で残り 3 つの問題に遭遇します。
- `bun install` は SIGSYS でクラッシュします。Android の zygote seccomp プロファイルが `fchmodat2` と `openat2` を `ENOSYS` を返す代わりにトラップし、上流のランタイムフォールバックが実行されないためです。
- `bunx パッケージ名` は ENOENT で失敗します。npm シムが `#!/usr/bin/env node` シンを持ち、Android には `/usr/bin` が存在しないためです。
- `bun:ffi cc()` は TinyCC が無効と報告します。上流が Android でこの機能をオフにしているためです。
このフォークは、各問題を修正するために Bun v1.4.0 に対して 7 つのソースレベルパッチを適用します。
### 機能
- **完全な FFI サポート**: `dlopen`、`cc()`、`JSCallback` がすべて動作します。
- **Android で TinyCC を有効化**: `memfd_create` による SELinux 安全な JIT メモリ + 範囲外の BL 呼び出し向け ARM64 ロングコールベニア。
- **Seccomp トラップのバイパス**: `lchmod` はトラップされる `fchmodat2` の代わりに `fchmodat(AT_SYMLINK_NOFOLLOW)` を使用し、リゾルバの走査はトラップされる `openat2` の代わりに通常の `openat` を使用します。
- **シバンの再マップ**: インタプリタが見つからないスクリプトは、`/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` | 動作 (上流で修正済み) |
| `bun:ffi` `dlopen` / `cc()` / `JSCallback` | 動作 |
| opentui TUI | 動作 |
### インストール
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 が必要です。完全な手順は [docs/BUILD.md](docs/BUILD.md) を参照してください。
### ライセンス
フォークパッチは MIT。TinyCC コンポーントは LGPL-2.1。上流の Bun は MIT。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.