ARC++ at a glance
ARC++ lets Chromebooks run unmodified Play Store apps. A full Android system (green) runs in a container beside Chrome OS (blue), and both share one Linux kernel and one GPU.
Two systems, one kernel
The session manager starts Android in a Linux container built from kernel namespaces and cgroups. This keeps Android apart from Chrome OS for security, but it has no kernel of its own.
Inside the container
Inside is the normal Android stack: apps, the framework and ART, and SurfaceFlinger. Apps draw into Surfaces with Canvas or OpenGL ES, backed by buffers from gralloc.
Windows go to Chrome
Android does not composite its own screen. The ARC++ HWComposer is a Wayland client that sends each Surface's buffer to Exo, Chrome's Wayland server. Ash then places it on screen as an ordinary window.
Sharing the GPU
Both sides use the kernel's DRM. Android renders on the GPU through a render node, and its buffers are shared with Chrome as DMA-BUFs without copying. Only Chrome OS, as DRM master, drives the display.
The Mojo bridge
Everything else, such as notifications, clipboard, opening links, files and power state, goes over a Mojo IPC bridge between an Android system service and Chrome.
Next: ARCVM
Newer Chromebooks use ARCVM: the same Android stack, but inside a crosvm virtual machine with its own guest kernel instead of a container, for stronger isolation.