| # Components vs. processes |
| |
| This document explains how the concept of components differs from processes and |
| related concepts. |
| |
| The Zircon kernel defines [processes] and other [task objects] that are common |
| in modern operating systems. The abstraction of [component instances] sometimes |
| correlates with Zircon task abstractions, but not always. |
| |
| ## Examples |
| |
| The relationship between components and Zircon tasks differs, often as defined |
| by [component runners], which implement strategies for launching component |
| instances. |
| |
| - [ELF Runner] launches components by creating a new [job] that contains a |
| process that's created from a given executable file in ELF format. |
| - Dart Runner launches a new Dart isolate in a Dart Virtual Machine. A Dart |
| VM is implemented as a process that can host one or more Dart isolate. |
| Dart isolates execute on [threads], but don't necessarily have an |
| assigned thread (this is a VM implementation detail). |
| - Web runner can launch one or more web pages as components, and host them |
| the same web engine container or in separate containers per its isolation |
| policy. Web pages are typically isolated by being hosted in separate |
| processes. |
| |
| [processes]: /docs/reference/kernel_objects/process.md |
| [task objects]: /docs/reference/kernel_objects/objects.md#tasks |
| [component instances]: /docs/concepts/components/v2/topology.md#component-instances |
| [component runners]: /docs/concepts/components/v2/capabilities/runner.md |
| [ELF Runner]: /docs/concepts/components/v2/elf_runner.md |
| [job]: /docs/reference/kernel_objects/job.md |
| [threads]: /docs/reference/kernel_objects/thread.md |