# Show GN: Android arm64에서 proot 병목을 줄이기 위해 ptrace 없는 proroot를 만들어봤습니다

> Clean Markdown view of GeekNews topic #28342. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=28342](https://news.hada.io/topic?id=28342)
- GeekNews Markdown: [https://news.hada.io/topic/28342.md](https://news.hada.io/topic/28342.md)
- Type: show
- Author: [coderred](https://news.hada.io/@coderred)
- Published: 2026-04-09T14:47:56+09:00
- Updated: 2026-04-09T14:47:56+09:00
- Original source: [github.com/coderredlab](https://github.com/coderredlab/proroot)
- Points: 1
- Comments: 0

## Topic Body

안녕하세요.  
  
Android에서 Ubuntu arm64 사용자 공간을 올려 사용하는 프로젝트를 진행하면서, 가장 큰 병목은 역시 proot의 ptrace 오버헤드였습니다. 특히 Node.js나 Chromium 같은 워크로드에서는 syscall마다 발생하는 context switch 비용이 꽤 크게 느껴졌습니다.  
  
그래서 proot와 비슷한 방향성을 가지되 ptrace 없이 동작하는 proroot를 만들어보고 있습니다. 목표는 root 없이 경로 변환과 실행 환경 격리를 제공하면서도, syscall interception을 프로세스 내부에서 처리해 오버헤드를 줄이는 것입니다.  
  
현재는 LD_PRELOAD와 바이너리 패칭을 조합하는 방식으로 구현하고 있고, arm64 환경에서 아래 항목들을 테스트했습니다.  
  
* Node.js 24 / npm  
* Python 3.12  
* Git 2.43  
* curl, jq, OpenSSL  
* Chromium headless_shell 131 (Playwright)  
  
구현은 대략 아래 방식입니다.  
  
* glibc 함수(openat, stat, execve, dlopen 등)에 대한 PLT interception  
* 로드 시점 ELF 스캔 후 syscall 지점을 trampoline 호출로 패칭  
* Android seccomp quirks 및 Chrome 호환성을 위한 signal handler 보완  
  
사용 방식은 proot와 최대한 비슷하게 맞추고 있어서, 현재는 -r, -w, --link2symlink 같은 CLI 플래그를 그대로 사용할 수 있습니다.  
  
아직은 arm64 전용이고, 전체 소스 공개 전에는 조금 더 테스트와 안정화가 필요해 당분간은 바이너리 형태로만 배포하고 있습니다. 반쯤 정리되지 않은 코드를 먼저 공개하기보다, 실제 워크로드에서 호환성과 안정성을 조금 더 검증한 뒤 정리해서 공개하는 쪽이 낫다고 판단했습니다.  
  
Android에서 proot 성능 때문에 비슷한 고민을 해보신 분들이 있다면 의견이나 피드백 부탁드립니다.

## Comments



_No public comments on this page._
