नमस्ते।

Android पर Ubuntu arm64 user space चलाने वाले एक प्रोजेक्ट पर काम करते समय, सबसे बड़ा bottleneck proot का ptrace overhead ही था। खासकर Node.js या Chromium जैसे workloads में, हर syscall पर होने वाला context switch cost काफ़ी बड़ा महसूस होता था।

इसलिए मैं proot जैसी दिशा वाला, लेकिन ptrace के बिना काम करने वाला proroot बना रहा हूँ। लक्ष्य है root के बिना path translation और execution environment isolation देना, और साथ ही syscall interception को process के अंदर ही संभालकर overhead कम करना।

फ़िलहाल इसे LD_PRELOAD और binary patching के संयोजन से implement किया गया है, और arm64 environment में नीचे दिए गए आइटम्स को test किया गया है।

  • Node.js 24 / npm
  • Python 3.12
  • Git 2.43
  • curl, jq, OpenSSL
  • Chromium headless_shell 131 (Playwright)

implementation मोटे तौर पर नीचे दिए गए तरीके की है।

  • glibc functions (openat, stat, execve, dlopen आदि) के लिए PLT interception
  • load समय ELF scan करने के बाद syscall points को trampoline call के लिए patch करना
  • Android seccomp quirks और Chrome compatibility के लिए signal handler में सुधार

इसे इस्तेमाल करने का तरीका proot के जितना संभव हो उतना समान रखा गया है, इसलिए फ़िलहाल -r, -w, --link2symlink जैसे CLI flags को वैसे ही इस्तेमाल किया जा सकता है।

अभी यह केवल arm64 के लिए है, और पूरे source को public करने से पहले थोड़ा और testing और stabilization की ज़रूरत है, इसलिए कुछ समय तक इसे केवल binary form में ही distribute किया जा रहा है। आधा-अधूरा व्यवस्थित code पहले public करने के बजाय, वास्तविक workloads में compatibility और stability को थोड़ा और verify करने के बाद उसे व्यवस्थित करके public करना बेहतर लगा।

अगर Android पर proot performance की वजह से आपने भी इसी तरह की समस्या पर विचार किया है, तो अपनी राय या feedback ज़रूर दें।

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.