عن المشروع

يوفر هذا المشروع نسخة معدلة من [Bun](https://bun.sh) تعمل أصلياً على أندرويد/ترمكس (aarch64) باستخدام Bionic libc. لا proot، ولا glibc-runner، ولا LD_PRELOAD، ولا termux-exec — جميع الإصلاحات مُدمجة مباشرة في البتارية عبر فروع Rust `#[cfg(target_os = "android")]`. ### ما يحلّه المشروع يلتقي بنية Bun 1.4 للأندرويد بثلاثة مشكلات متبقية على ترمكس: - ينهار `bun install` بـ SIGSYS لأن ملف seccomp في zygote بأندرويد يحجز `fchmodat2` و`openat2` بدلاً من إرجاع `ENOSYS`، مما يمنع عمليات السقوط التلقائي في زمن التشغيل. - يفشل `bunx <pkg>` بـ ENOENT لأن أدوات npm الشيبية تحمل شيبانات `#!/usr/bin/env node` وأندرويد لا يملك `/usr/bin`. - يُبلغ `bun:ffi cc()` عن تعطيل TinyCC لأن البرنامج الأصلي يعطل الميزة على أندرويد. يطبّق هذا الشوكة سبعة تصحيحات على مستوى المصدر ضد Bun v1.4.0 لإصلاح كل مشكلة. ### الميزات - **دعم FFI كامل**: `dlopen` و`cc()` و`JSCallback` تعمل جميعها. - **تمكين TinyCC على أندرويد**: ذاكرة JIT آمنة عبر SELinux باستخدام `memfd_create` + دعامات ARM64 طويلة للنداءات BL البعيدة. - **تجاوز حجز seccomp**: يستخدم `lchmod` دالة `fchmodat(AT_SYMLINK_NOFOLLOW)` بدلاً من `fchmodat2` المحجوز؛ وتستخدم مسارات المُحلِّل `openat` العادية بدلاً من `openat2` المحجوزة. - **إعادة تعيين الشيبان**: تُعيد السكريبتات ذات المفسّرين المفقودين تعيين المسارات مثل `/usr/bin` إلى `$PREFIX/bin`. - **`bunx` يعمل**: يضع المُطلق `argv[0]` بشكل صحيح لإطلاق السكريبتات. ### التوافق | العنصر | الحالة | |---|---| | المعمارية | `aarch64` (arm64) | | أندرويد | 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.