このプロジェクトについて

このプロジェクトは、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。