프로젝트 소개
이 프로젝트는 Bionic libc를 사용해 Android/Termux(aarch64)에서 네이티브로 실행되는 [Bun](https://bun.sh)의 수정된 빌드를 제공합니다. proot, glibc-runner, LD_PRELOAD, termux-exec 없음 — 모든 수정은 `#[cfg(target_os = "android")]` Rust 분기를 통해 바이너리에 직접 컴파일됩니다.
### 해결 내용
업스트림 Bun 1.4의 Android 빌드는 Termux에서 세 가지 남은 문제에 직면합니다:
- `bun install`이 SIGSYS로 크래시 — Android의 zygote seccomp 프로필이 `fchmodat2`와 `openat2`를 ENOSYS 대신 트랩해 업스트림 런타임 폴백 실행 불가.
- `bunx <pkg>`가 ENOENT로 실패 — npm shims가 `#!/usr/bin/env node` shebang을 보유하고 있으며 Android에는 `/usr/bin` 없음.
- `bun:ffi cc()`가 TinyCC 비활성화 보고 — 업스트림이 Android에서 이 기능을 비활성화.
이 포크는 각 문제를 수정하기 위해 Bun v1.4.0 기준으로 7개의 소스 레벨 패치를 적용합니다.
### 기능
- **완전한 FFI 지원**: `dlopen`, `cc()`, `JSCallback` 모두 작동.
- **Android용 TinyCC 활성화**: `memfd_create` + ARM64 long-call veneers를 통한 SELinux 안전 JIT 메모리.
- **seccomp 트랩 우회**: `lchmod`가 트랩된 `fchmodat2` 대신 `fchmodat(AT_SYMLINK_NOFOLLOW)` 사용; resolver walk가 트랩된 `openat2` 대신 일반 `openat` 사용.
- **shebang 재매핑**: 간 Interpreter가 없는 스크립트는 `/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 | 작동 |
### 설치
```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 필요. 전체 지침은 [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.