← Stack / PocketFabric

One phone. A month of operating it.

A retired phone,
run like a server.

PocketFabric is an experiment in using a rooted Android phone as personal computing infrastructure. The hard parts were service control, recovery, isolation and getting the GPU result right.

Android remains underneath the Linux servicesA OnePlus 9 contains a Debian chroot, a runit supervisor and application services. Android and the vendor kernel remain underneath. The laptop connects as an operator client.Still a phone.Debian 13 / chrootWeb apps + terminalsrunit supervisorAndroid 14vendor kernel 5.4OnePlus 9 · rootedOperatorlaptopThe laptop can leave. The services stay.
Architecture of the recorded deployment. The laptop is a client. Research §4 ↗
1main device
OnePlus 9
12weeks of records
including the pre-study
28completed experiments
6 refused or interrupted
8unplanned incidents
recorded in the study

Historical observations through 29 October 2026. This page is an illustrated account of that work, not a live status page. Research §§3–4 ↗

01 / The record

Getting it to run was the beginning.

A terminal experiment grew into a host for web applications and coding-agent sessions. Select a point to see what changed.

10 October

Move into chroot

Debian 13 was built beside the old installation. Services moved in stages, with the old userland retained for rollback. Magisk started the supervisor at boot. A mount cleanup incident required a reboot.

Research §§5.2–5.3 · migration and incident ↗

02 / The migration

Change the userland. Keep a way back.

PRoot ran a Linux userland through system-call translation. With root access, chroot gave it a different filesystem root while still sharing Android’s kernel. The move happened in stages on 10 October.

PRoot / Termux

The earlier installation

  • Verb
  • LanguageOps
  • AdGuard
  • cloudflared
  • SSH

Debian chroot

Magisk → runit → services

    Build and check first

    Illustrated reconstruction of the migration, not a deployment control.

    Keep a rollback

    Archive the node state and build Debian 13 beside the existing PRoot installation. The old service environment stays available.

    Research §5.2 ↗

    Binary replacement

    Write, then rename.

    Copying over the running binary caused SIGBUS crashes. Replacing it through a new file and rename avoided that failure.

    Supervision

    Check the process that matters.

    The PRoot wrapper and the real service process needed different handling. A successful wrapper command did not prove that a restart had replaced the service.

    03 / The failure

    A copy of /dev was still connected.

    A chroot does not automatically isolate mount operations. This cleanup reached Android’s own device mounts. Step through the incident.

    Android / original/devterminals · binder · USB
    Shared mounts
    Chroot / copy/devShared propagation
    Mechanism drawing of the recorded incident. No commands here operate the phone.

    Bind the device tree

    A test bound /dev into the chroot. The mount copies remained in a shared propagation group.

    Research §5.3 ↗

    04 / The boundary

    The kernel set the ceiling.

    This vendor build lacked user and PID namespaces. Separate Linux accounts and controlled launch paths supplied a limited boundary; the public deployment did not have per-session container isolation.

    verb-host

    Application server

    Private state and the public service

    verb-agent

    Terminal sessions

    Tools, launch limits and resource budgets

    Shared Android vendor kernel No user or PID namespaces
    Recorded public deployment checkpoint, 12 October. Candidate isolation experiments were assessed separately. Research §§4, 5.5 ↗

    Power policy

    The process lived. Its network did not.

    Android’s Doze policy blocked network access for Linux accounts used by the candidate agent boundary. Service health needed to include reachability and recovery.

    Research §5.3 ↗

    Idle cost

    A missing interface had a CPU bill.

    The vendor build omitted a procfs child-process interface. The original supervisor consumed 0.44 CPU cores per idle terminal until its process tracking was redesigned.

    Research §5.4 ↗

    05 / The GPU

    Compute worked. The defaults failed the test.

    The Adreno 660 ran Vulkan compute through Turnip. Exact integer addition passed. Embedding output needed a separate comparison against fixed numerical criteria.

    Change the precision path

    F16 means 16-bit floating point. Compare the GPU results against the same cosine threshold.

    Minimum cosine similarity0.99982Failed the fixed criteriaCosine threshold: ≥ 0.99999
    Results for the tested model, build and driver. Passing a tolerance does not mean bit-identical output. The full criteria also include component errors. Research §§6.1–6.2 ↗

    Choose what the clock counts

    The GPU’s compute counter was lower. Starting a fresh process changed the result.

    CPU
    2.037 s
    GPU
    3.095 s

    CPU finished first in this cold job.

    36 texts, 732 tokens; one cold run per configuration (n = 1). Compute values are internal prompt-evaluation counters, not another end-to-end measurement. Research §6.3 ↗

    06 / The reports

    Read the evidence and the loose ends.

    The research report explains the experiments. The validation report checks a specific release and records what remained unresolved.

    What this establishes

    A single-device study with a pre-study on a second phone. Raw operational logs are private; the public supplements support the reported figures and ledger. The work does not establish long-term availability, energy savings or results across other devices.

    The 31 October validation includes failed checks and open findings. Local console fixes had separate test evidence and were not certified as deployed. The latest state belongs in that report, rather than in a green status illustration here. Validation report ↗

    Personal work by Shailesh Rawat, self-funded, with no external funding or endorsement. The reports disclose substantial AI assistance. Both are CC BY 4.0 preprints and have not undergone journal peer review.

    Adapted from the author’s interactive PocketFabric account. The separate meaning-similarity experiment is outside these two reports and is not presented as a result here.