blob: cab8873dd2957c940b8acaaf28b10112899efa72 [file] [log] [blame] [view] [edit]
# Glossary
The purpose of this document is to provide short definitions for a collection of
technical terms used in Fuchsia.
When adding new definitions, follow these guidelines:
- A definition should provide a high-level description of a term and in most
cases should not be longer than two or three sentences.
- When another non-trivial technical term needs to be employed as part of the
description, consider adding a definition for that term and linking to it
from the original definition.
- A definition should be complemented by a list of links to more detailed
documentation and related topics.
## Terms
### **ABI** {#abi}
The [Application Binary Interface](/docs/concepts/system/abi/system.md) (ABI)
for a system is the binary-level interface to the system. Typically you don't
write software that uses the system ABI directly. Instead, you write software
against the system API. When the software is compiled, the binary artifact
created by the compiler interfaces with the system through the ABI.
Changes to the system ABI may require you to recompile your source code to
account for the changes in the ABI.
### **Agent** {#agent}
This is a [Modular](/docs/concepts/modular/overview.md) concept that is being deprecated.
An agent is a role a [component](#component) can play to execute in the
background in the context of a [session](#session). Agents are always a
singleton within a session, and provide services to other components.
See [Agent concept docs](/docs/concepts/modular/agent.md) for more.
### **AppMgr** {#appmgr}
The Application Manager (AppMgr) is responsible for launching
[v1](#components-v1) [components](#component) and managing the namespaces in
which those components run. It is run by [component manager](#component-manager)
as a [v2](#components-v2) component.
### **Banjo** {#banjo}
Banjo is a language for defining protocols that are used to communicate between
[drivers](#driver). It is different from [FIDL](#fidl) in that it specifies an
ABI for drivers to use to call into each other, rather than an IPC protocol.
### **BlackBoxTest** {#black-box-test}
`BlackBoxTest` is a Rust client-side library that sets up black box integration
tests for a v2 component.
- [Documentation](/docs/concepts/components/black_box_testing.md#blackboxtest)
### **bootfs** {#bootfs}
The bootfs RAM disk contains the files needed early in the boot process when no
other filesystems are available. It is part of the [ZBI](#zircon-boot-image),
and is decompressed and served by [bootsvc](#bootsvc). After the early boot
process is complete, the bootfs is mounted at `/boot`.
- [Documentation](/docs/concepts/booting/userboot.md#BOOTFS)
### **bootsvc** {#bootsvc}
`bootsvc` is the second process started in Fuchsia. It provides a filesystem
service for the [bootfs](#bootfs) and a loader service that loads programs from
the same bootfs. After starting these services, it loads the third program,
which defaults to `component_manager`.
- [Documentation](/docs/concepts/booting/bootsvc.md)
### **BreakpointSystemClient** {#breakpoint-system-client}
`BreakpointSystemClient` is a Rust client-side library that connects to
the breakpoint system in component manager. It allows setting breakpoints on
system events in component manager. Integration tests use this library to
verify the state of components.
- [Documentation](/docs/concepts/components/black_box_testing.md#breakpointsystemclient)
### **Bus Driver** {#bus-driver}
A [driver](#driver) for a device that has multiple children. For example,
hardware interfaces like PCI specify a topology in which a single controller is
used to interface with multiple devices connected to it. In that situation, the
driver for the controller would be a bus driver.
### **Cache directory** {#cache-directory}
Similar to a [data directory](#data-directory), except that the contents of a
cache directory may be cleared by the system at any time, such as when the
device is under storage pressure. Canonically mapped to /cache in the component
instance’s [namespace](#namespace).
- [Testing isolated cache storage](/docs/concepts/testing/testing_isolated_cache_storage.md).
### **Capability** {#capability}
A capability is a value which combines an *object reference* and a set of
*rights*. When a program has a capability it is conferred the privilege to
perform certain actions using that capability. A [handle](#handle) is a common
example for a capability.
### **Capability routing** {#capability-routing}
A way for one [component](#component-instance) to give
[capabilities](#capability) to another instance over the
[component instance tree](#component-instance-tree).
[Component manifests](#component-manifest) define how routing takes place, with
syntax for [service capabilities](#service-capability),
[directory capabilities](#directory-capability), and
[storage capabilities](#storage-capability).
Capability routing is a [components v2](#components-v2) concept.
#### expose {#expose}
A [component instance](#component-instance) may use the `expose`
[manifest](#component-manifest) keyword to indicate that it is making a
capability available to its parent to route. Parents may [offer](#offer) a
capability exposed by any of their children to their other children or to their
parent, but they cannot [use](#use) it themselves in order to avoid dependency
cycles.
#### offer {#offer}
A [component instance](#component-instance) may use the `offer`
[manifest](#component-manifest) keyword to route a capability that was
[exposed](#expose) to it to one of its children (other than the child that
exposed it).
#### use {#use}
A [component instance](#component-instance) may use the `use`
[manifest](#component-manifest) keyword to consume a capability that was
[offered](#offer) to it by its parent.
### **Channel** {#channel}
A channel is an IPC primitive provided by Zircon. It is a bidirectional,
datagram-like transport that can transfer small messages including
[Handles](#handle). [FIDL](#fidl) protocols typically use channels as their
underlying transport.
- [Channel Overview](/docs/reference/kernel_objects/channel.md)
- [Update Channel Usage Policy](/docs/community/contribute/best-practices/update_channel_usage_policy.md)
### **Component** {#component}
A component is a unit of executable software on Fuchsia. Components support
[capability routing](#capability-routing), software composition, isolation
boundaries, continuity between executions, and introspection.
### **Component collection** {#component-collection}
A node in the [component instance tree](#component-instance-tree) whose children
are dynamically instantiated rather than statically defined in a
[component manifest](#component-manifest).
Component collection is a [components v2](#components-v2) concept.
### **Component declaration** {#component-declaration}
A component declaration is a [FIDL](#fidl) table ([fuchsia.sys2.ComponentDecl])
that includes information about a [component](#component)’s runtime
configuration, [capabilities](#capabilities) it [exposes](#expose),
[offers](#offer), and [uses](#use), and [facets](#component-manifest-facet).
Component declaration is a [components v2](#components-v2) concept.
[fuchsia.sys2.ComponentDecl]: /sdk/fidl/fuchsia.sys2/decls/component_decl.fidl
### **Component Framework** {#component-framework}
An application framework for declaring and managing [components](#component),
consisting of build tools, APIs, conventions, and system services.
- [Components v1](#components-v1), [Components v2](#components-v2)
### **Component instance** {#component-instance}
One of possibly many instances of a particular [component](#component) at
runtime. A component instance has its own [environment](#environment) and
[lifecycle](#lifecycle) independent of other instances.
### **Component instance tree** {#component-instance-tree}
A tree structure that represents the runtime state of parent-child relationships
between [component instances](#component-instance). If instance A launches
instance B then in the tree A will be the parent of B. The component instance
tree is used in [static capability routing](#static-capability-routing) such
that parents can [offer](#offer) capabilities to their children to [use](#use),
and children can [expose](#expose) capabilities for their parents to expose to
their parents or offer to other children.
Component instance tree is a [components v2](#components-v2) concept.
### **Component Manager** {#component-manager}
A system service which lets [component instances](#component-instance) manage
their children and [routes capabilities](#capability-routing) between them, thus
implementing the [component instance tree](#component-instance-tree). Component
Manager is the system service that implements the
[components v2](#components-v2) runtime.
### **Component Manifest** {#component-manifest}
In [Components v1](#components-v1), a component manifest is a JSON file with a
`.cmx` extension that contains information about a [component](#component)’s
runtime configuration, services and directories it receives in its
[namespace](#namespace), and [facets](#component-manifest-facet).
In [Components v2](#components-v2), a component manifest is a file with a `.cm`
extension, that encodes a [component declaration](#component-declaration).
- [Component manifests v2](/docs/concepts/components/component_manifests.md)
### **Component Manifest Facet** {#component-manifest-facet}
Additional metadata that is carried in a
[component manifest](#component-manifest). This is an extension point to the
[component framework](#component-framework).
### **Moniker** {#moniker}
A moniker identifies a specific component instance in the component tree using a topological path.
A v1 component's moniker is defined as a tuple of (path to the component's [realm][#realm], component URL).
A v2 component's moniker is defined as a path to the component instance in the [component instance tree](#component-instance-tree).
[moniker]: /docs/concepts/components/monikers.md
### *Component Instance Identifier** {#component-instance-id}
A unique, stable identifer for a component instance. The instance id is _the_
canonical identifier for a component instance. The component runtime uses this
to key a component's persistent resources, if it has any. While a component
instance's moniker may change, its instance ID remains the same.
Instance IDs are assigned to component instances using a [component ID
index](/docs/development/components/component_id_index.md).
### **Component URL**
A [URL][component-url] that identifies a component, most often used when
instantiating a component, for example
`fuchsia-pkg://fuchsia.com/stash#meta/stash_secure.cm`.
See also: [fuchsia-pkg URL](#fuchsia-pkg-url)
[component-url]: /docs/concepts/components/component_urls.md
### **Components v1** {#components-v1}
A shorthand for the [Component](#component) Architecture as first implemented on
Fuchsia. Includes a runtime as implemented by [appmgr](#appmgr) and
[sysmgr](#sysmgr), protocols and types as defined in [fuchsia.sys], build-time
tools such as [cmc], and SDK libraries such as [libsys] and [libsvc].
See also: [Components v2](#components-v2)
[fuchsia.sys]: /sdk/fidl/fuchsia.sys/
[cmc]: /src/sys/cmc
[libsys]: /sdk/lib/sys
[libsvc]: /sdk/lib/svc
### **Components v2** {#components-v2}
A shorthand for the [Component](#component) Architecture in its modern
implementation. Includes a runtime as implemented by
[component_manager](#component-manager), protocols and types as defined in
[fuchsia.sys2], and build-time tools such as [cmc].
See also: [Components v1](#components-v1)
[fuchsia.sys2]: /sdk/fidl/fuchsia.sys2/
[cmc]: /src/sys/cmc
### **Concurrent Device Driver** {#concurrent-device-driver}
A concurrent device driver is a [hardware driver](#hardware-driver) that
supports multiple concurrent operations. This may be, for example, through a
hardware command queue or multiple device channels. From the perspective of the
[core driver](#core-driver), the device has multiple pending operations, each of
which completes or fails independently. If the driven device can internally
parallelize an operation, but can only have one operation outstanding at a time,
it may be better implemented with a
[sequential device driver](#sequential-device-driver).
### **Core Driver** {#core-driver}
A core driver is a [driver](#driver) that implements the application-facing RPC
interface for a class of drivers (e.g. block drivers, ethernet drivers). It is
hardware-agnostic. It communicates with a [hardware driver](#hardware-driver)
through [banjo](#banjo) to service its requests.
### **Data directory** {#data-directory}
A private directory within which a [component instance](#component-instance) may
store data local to the device, canonically mapped to /data in the component
instance’s [namespace](#namespace).
### **DevHost** {#devhost}
A Device Host (`DevHost`) is a process containing one or more device drivers.
They are created by the Device Manager, as needed, to provide isolation between
drivers for stability and security.
### **Device Manager** {#devmgr}
The Device Manager (formerly devmgr or devcoordinator) is responsible for
enumerating, loading, and managing the life cycle of device drivers.
### **DDK** {#ddk}
The Driver Development Kit is the documentation, APIs, and ABIs necessary to
build Zircon Device Drivers. Device drivers are implemented as ELF shared
libraries loaded by Zircon's Device Manager.
- [DDK Overview](/docs/concepts/drivers/overview.md)
- [DDK includes](/zircon/system/ulib/ddk/include/ddk/)
### **Directory capability** {#directory-capability}
A [capability](#capability) that permits access to a filesystem directory by
adding it to the [namespace](#namespace) of the
[component instance](#component-instance) that [uses](#use) it. If multiple
[component instances](#component-instance) are offered the same directory
capability then they will have access to the same underlying filesystem
directory.
Directory capability is a [components v2](#components-v2) concept.
- [Capability routing](#capability-routing)
### **Driver** {#driver}
A driver is a dynamic shared library which [Device Manager](#devmgr) can load
into a [DevHost](#devhost) and that enables, and controls one or more devices.
- [Reference](/docs/concepts/drivers/driver-development.md)
- [Driver Sources](/zircon/system/dev)
### **Element** {#element}
A [component](#component) added to a [session](#session) dynamically through the [FIDL](#fidl) protocol [`ElementManager`](#element-manager). In addition to the properties common to all components, Elements are also annotated by Element Proposers. Those annotations are shared with other components within the session.
It is the session's responsibility to manage the lifecycle of elements.
Elements are a [Session Framework](#session-framework) concept.
### **Element Annotation** {#element-annotation}
This is a [FIDL](#fidl) struct. For more information, see [`fuchsia.session.Annotation`].
A collection of named attributes associated with an [element](#element). Annotations are specified at element creation time by [element proposers](#element-proposer) and remain mutable for the lifetime of the element.
Element annotations are a [Session Framework](#session-framework) concept.
[`fuchsia.session.Annotation`]: /sdk/fidl/fuchsia.session/annotation.fidl
### **Element Manager** {#element-manager}
This is a [FIDL](#fidl) protocol. For more information, see [`fuchsia.session.ElementManager`].
A protocol used to grant [session](#session) sub-components the capability to ask for [elements](#element) to be added to the product experience at runtime.
Element manager is a [Session Framework](#session-framework) concept.
[`fuchsia.session.ElementManager`]: /sdk/fidl/fuchsia.session/element_manager.fidl
### **Element Proposer** {#element-proposer}
A way to refer to any [component](#component) that invokes the ProposeElement() method on [`ElementManager`](#element-manager) to launch a specific [element](#element) in a [session](#session).
Element Proposer is a [Session Framework](#session-framework) concept.
### **Environment** {#environment}
A container for a set of components, which provides a way to manage their
lifecycle and provision services for them. All components in an environment
receive access to (a subset of) the environment's services.
### **Escher** {#escher}
Graphics library for compositing user interface content. Its design is inspired
by modern real-time and physically based rendering techniques though we
anticipate most of the content it renders to have non-realistic or stylized
qualities suitable for user interfaces.
### **FAR** {#far}
The Fuchsia Archive Format is a container for files to be used by Zircon and
Fuchsia.
- [FAR Spec](/docs/concepts/source_code/archive_format.md)
### **FBL** {#fbl}
FBL is the Fuchsia Base Library, which is shared between kernel and userspace.
- [Zircon C++](/docs/development/languages/c-cpp/cxx.md)
### **fdio** {#fdio}
`fdio` is the Zircon IO Library. It provides the implementation of posix-style
open(), close(), read(), write(), select(), poll(), etc, against the RemoteIO
RPC protocol. These APIs are return- not-supported stubs in libc, and linking
against libfdio overrides these stubs with functional implementations.
- [Source](/zircon/system/ulib/fdio/)
### **FIDL** {#fidl}
The Fuchsia Interface Definition Language (FIDL) is a language for defining
protocols that are typically used over [channels](#channel). FIDL is programming
language agnostic and has bindings for many popular languages, including C, C++,
Dart, Go, and Rust. This approach lets system components written in a variety of
languages interact seamlessly.
- [FIDL](/docs/development/languages/fidl/)
### **Flutter** {#flutter}
[Flutter](https://flutter.dev/) is a functional-reactive user interface framework
optimized for Fuchsia and is used by many system components. Flutter also runs
on a variety of other platforms, including Android and iOS. Fuchsia itself does
not require you to use any particular language or user interface framework.
### **Fuchsia API Surface** {#fuchsia-api-surface}
The Fuchsia API Surface is the combination of the
[Fuchsia System Interface](#fuchsia-system-interface) and the client libraries
included in the [Fuchsia SDK](#fuchsia-sdk).
### **Fuchsia Package** {#fuchsia-package}
A Fuchsia Package is a unit of software distribution. It is a collection of
files, such as manifests, metadata, zero or more executables (e.g.
[Components](#component)), and assets. Individual Fuchsia Packages can be
identified using [fuchsia-pkg URLs](#fuchsia-pkg-url).
### **fuchsia-pkg URL** {#fuchsia-pkg-url}
The [fuchsia-pkg URL](/docs/concepts/packages/package_url.md) scheme is a means for referring
to a repository, a package, or a package resource. The syntax is
`fuchsia-pkg://<repo-hostname>[/<pkg-name>][#<path>]]`. E.g., for the component
`echo_client_dart.cmx` published under the package `echo_dart`'s `meta`
directory, from the `fuchsia.com` repository, its URL is
`fuchsia-pkg://fuchsia.com/echo_dart#meta/echo_client_dart.cmx`.
### **Fuchsia SDK** {#fuchsia-sdk}
The Fuchsia SDK is a collection of libraries and tools that the Fuchsia project
provides to Fuchsia developers. Among other things, the Fuchsia SDK contains a
definition of the [Fuchsia System Interface](#fuchsia-system-interface) as well
as a number of client libraries.
### **Fuchsia System Interface** {#fuchsia-system-interface}
The [Fuchsia System Interface](/docs/concepts/system/abi/system.md) is the binary
interface that the Fuchsia operating system presents to software it runs. For
example, the entry points into the vDSO as well as all the FIDL protocols are
part of the Fuchsia System Interface.
### **Fuchsia Volume Manager** {#fuchsia-volume-manager}
Fuchsia Volume Manager (FVM) is a partition manager providing dynamically
allocated groups of blocks known as slices into a virtual block address space.
The FVM partitions provide a block interface enabling filesystems to interact
with it in a manner largely consistent with a regular block device.
- [Filesystems](/docs/concepts/filesystems/filesystems.md)
### **GN** {#gn}
GN is a meta-build system which generates build files so that Fuchsia can be
built with [Ninja](#ninja). GN is fast and comes with solid tools to manage and
explore dependencies. GN files, named `BUILD.gn`, are located all over the
repository.
- [Language and operation](https://gn.googlesource.com/gn/+/master/docs/language.md)
- [Reference](https://gn.googlesource.com/gn/+/master/docs/reference.md)
- [Fuchsia build overview](/docs/concepts/build_system/fuchsia_build_system_overview.md)
### **GraphicalPresenter** {#graphical-presenter}
This is a [FIDL](#fidl) protocol. For more information, see [`GraphicalPresenter`].
A `GraphicalPresenter` organizes and presents graphical views.
The presented views can be annotated with [Element Annotations](#element-annotation) to communicate presentation properties to the `GraphicalPresenter`. This protocol is used, for example, when a [session component](#session) written in Rust wants to delegate presentation logic to a child [component](#component) written in Flutter, or when a session component that manages the lifecycle of elements delegates the presentation of element views to a child component that implements `GraphicalPresenter`.
`GraphicalPresenter` is a [Session Framework](#session-framework) concept.
[`GraphicalPresenter`]: /sdk/fidl/fuchsia.session/graphical_presenter.fidl
### **Handle** {#handle}
A Handle is how a userspace process refers to a [kernel object](#kernel-object).
They can be passed to other processes over [Channels](#channel).
- [Reference](/docs/concepts/kernel/handles.md)
### **Hardware Driver** {#hardware-driver}
A hardware driver is a [driver](#driver) that controls a device. It receives
requests from its [core driver](#core-driver) and translates them into
hardware-specific operations. Hardware drivers strive to be as thin as possible.
They do not support RPC interfaces, ideally have no local worker threads (though
that is not a strict requirement), and some will have interrupt handling
threads. They may be further classified into
[sequential device drivers](#sequential-device-driver) and
[concurrent device drivers](#concurrent-device-driver).
### **Hub** {#hub}
The hub is a portal for tools to access detailed structural information about
component instances at runtime, such as their names, job and process ids, and
exposed capabilities.
- [Hub](/docs/concepts/components/hub.md)
### **Input pipeline client library** {#input-pipeline-client-library}
A client library available to [session](#session) authors to simplify
the consumption and routing of input events from physical hardware.
* [Input client library](/docs/concepts/session/input.md)
Input pipeline is a [Session Framework](#session-framework) concept.
### **Input pipeline InputDeviceBinding** {#input-pipeline-input-device-binding}
A Rust trait in the [input pipeline client library](#input-pipeline-client-library).
An `InputDeviceBinding` represents a connection to a physical input device (e.g. mouse, keyboard) in an input pipeline. An `InputDeviceBinding` does the following:
1. Connects to an [`InputReport`](#input-report) file located at `/dev/class/input-report/XXX`.
1. Generates [`InputEvents`](#input-pipeline-input-event) from the `DeviceDescriptor` and incoming [`InputReports`](#input-report).
The input pipeline creates and owns `InputDeviceBindings` as new input peripherals are connected to a device.
`InputDeviceBinding` is a [Session Framework](#session-framework) concept.
### **Input pipeline InputDeviceDescriptor** {#input-pipeline-input-device-descriptor}
A property of the Rust struct [`InputEvent`](#input-pipeline-input-event).
An `InputDeviceDescriptor` describes the ranges of values a particular input device can generate. For example, a `InputDeviceDescriptor::Keyboard` contains the keys available on the keyboard, and a `InputDeviceDescriptor::Touch` contains the maximum number of touch contacts and the range of `x-` and `y-`values each contact can take on.
`InputDeviceDescriptor` is a [Session Framework](#session-framework) concept.
### **Input pipeline InputDeviceEvent** {#input-pipeline-input-device-event}
A property of the Rust struct [`InputEvent`](#input-pipeline-input-event).
An `InputDeviceEvent` represents an input event from an input device. `InputDeviceEvents` contain more context than the raw [`InputReports`](#input-report) they are parsed from. For example, `InputDeviceEvent::Keyboard` contains all the pressed keys, as well as the key's phase (pressed, released, etc.).
`InputDeviceEvent` is a [Session Framework](#session-framework) concept.
### **Input pipeline InputEvent** {#input-pipeline-input-event}
A Rust struct in the [input pipeline client library](#input-pipeline-client-library).
An event from an input device containing context (a `InputDeviceDescriptor`) and state (e.g. phase and location of a button press). The input pipeline generates `InputEvents` from hardware signals.
`InputEvent` is a [Session Framework](#session-framework) concept.
### **Input pipeline InputHandler** {#input-pipeline-input-handler}
A Rust trait in the [input pipeline client library](#input-pipeline-client-library).
An `InputHandler` represents a client of [`InputEvents`](#input-pipeline-input-event) in an input pipeline. When an `InputHandler` receives an [`InputEvent`](#input-pipeline-input-event), it does at least one of the following:
1) Forwards the [`InputEvent`](#input-pipeline-input-event) to the relevant client component.
1) Outputs a vector of [`InputEvents`](#input-pipeline-input-event) for the next `InputHandler` to process.
`InputHandler` is a [Session Framework](#session-framework) concept.
### **InputReport** {#input-report}
This is a [FIDL](#fidl) struct. For more information, see [`InputReport`](https://fuchsia.dev/reference/fidl/fuchsia.ui.input#InputReport).
A stateless representation of an event from a physical input device. Zircon generates `InputReports` from HID Reports.
### **Jiri** {#jiri}
Jiri is a tool for multi-repo development. It is used to checkout the Fuchsia
codebase. It supports various subcommands which makes it easy for developers to
manage their local checkouts.
- [Reference](https://fuchsia.googlesource.com/jiri/+/master/README.md)
- [Sub commands](https://fuchsia.googlesource.com/jiri/+/master/README.md#main-commands-are)
- [Behaviour](https://fuchsia.googlesource.com/jiri/+/master/behaviour.md)
- [Tips and tricks](https://fuchsia.googlesource.com/jiri/+/master/howdoi.md)
### **Job** {#job}
A Job is a [kernel object](#kernel-object) that groups a set of related
[processes][#process], their child processes, and their jobs (if any).
Every process in the system belongs to a job and all jobs form a single
rooted tree.
- [Job Overview](/docs/reference/kernel_objects/job.md)
### **Kernel Object** {#kernel-object}
A kernel object is a kernel data structure which is used to regulate access to
system resources such as memory, i/o, processor time and access to other
processes. Userspace can only reference kernel objects via [Handles](#handle).
- [Reference](/docs/reference/kernel_objects/objects.md)
### **KOID** {#koid}
A Kernel Object Identifier.
- [Kernel Object](#kernel-object)
### **LK** {#lk}
Little Kernel (LK) is the embedded kernel that formed the core of the Zircon
Kernel. LK is more microcontroller-centric and lacks support for MMUs,
userspace, system calls -- features that Zircon added.
- [LK on Github](https://github.com/littlekernel/lk)
### **Module** {#module}
This is a [Modular](/docs/concepts/modular/overview.md) concept that is being deprecated.
A module is a role a [component](#Component) can play to contribute UI to a
user experience container (story) within a Modular session.
Any component that exports a Scenic `ViewProvider` can be be used as a module.
See [Module concept docs](/docs/concepts/modular/module.md) for more.
### **Musl** {#musl}
Fuchsia's standard C library (libc) is based on Musl Libc.
- [Source](/zircon/third_party/ulib/musl/)
- [Musl Homepage](https://www.musl-libc.org/)
### **Namespace** {#namespace}
A namespace is the composite hierarchy of files, directories, sockets,
[service](#service)s, and other named objects which are offered to components by
their [environment](#environment).
- [Fuchsia Namespace Spec](/docs/concepts/framework/namespaces.md)
### **Netstack** {#netstack}
An implementation of TCP, UDP, IP, and related networking protocols for Fuchsia.
### **Ninja** {#ninja}
Ninja is the build system executing Fuchsia builds. It is a small build system
with a strong emphasis on speed. Unlike other systems, Ninja files are not
supposed to be manually written but should be generated by other systems, such
as [GN](#gn) in Fuchsia.
- [Manual](https://ninja-build.org/manual.html)
- [Ninja rules in GN](https://gn.googlesource.com/gn/+/master/docs/reference.md#ninja_rules)
- [Fuchsia build overview](/docs/concepts/build_system/fuchsia_build_system_overview.md)
### **Outgoing directory** {#outgoing-directory}
A file system directory where a [component](#component) may [expose](#expose)
capabilities for others to use.
### **Package** {#package}
Package is an overloaded term. Package may refer to a
[Fuchsia Package](#fuchsia-package) or a [GN build package](#gn).
### **Paver** {#paver}
A tool in Zircon that installs partition images to internal storage of a device.
- [Guide for installing Fuchsia with paver](/docs/development/hardware/paving.md).
### **Platform Source Tree** {#platform-source-tree}
The Platform Source Tree is the open source code hosted on
fuchsia.googlesource.com, which comprises the source code for Fuchsia. A given
Fuchsia system can include additional software from outside the Platform Source
Tree by adding the appropriate [Fuchsia Package](#fuchsia-package).
### **Process** {#process}
A Process is a [kernel object](#kernel-object) that represents an instance
of a program as a set of instructions which are executed by one or more
[threads](#thread) together with a collection of [capabilities](#capability).
Every process is contained in a [job](#job).
- [Process Overview](/docs/reference/kernel_objects/process.md)
### **Protocol** {#protocol}
In [FIDL](#fidl), a protocol groups methods and events to describe how one
process interacts with another.
In [components v1](#components-v1), a component may access a protocol
(called a "service" in v1) from its [environment](#environment) through its
[namespace](#namespace) by naming the protocol in its services whitelist.
In [components v2](#components-v2), a protocol is used and routed to other
components as a [protocol capability](#protocol-capability).
### **Realm** {#realm}
In [components v1](#components-v1), realm is synonymous to
[environment](#environment).
In [components v2](#components-v2), a realm is a subtree of component instances
in the [component instance tree](#component-instance-tree). It acts as a
container for component instances and capabilities in the subtree.
### **Runner** {#runner}
A [component](#component) that provides a runtime environment for other components,
e.g. the ELF runner, the Dart AOT runner, the Chromium web runner.
Every component needs a runner in order to launch. Components express their
dependency on a runner in the component's [declaration](#component-declaration).
When the [component framework](#component-framework) starts a component, it first
determines the capabilities that the component should receive, then asks the
component's runner to launch the component. The runner is responsible for creating
any necessary processes, loading executable code, initializing language runtimes,
handing control to the component's entry points, and terminating the component when
requested by the component framework.
- [ELF runner](/docs/concepts/components/elf_runner.md)
- [Component runner](/docs/concepts/components/runners.md)
### **Scenic** {#scenic}
The system compositor. Includes views, input, compositor, and GPU services.
### **Sequential Device Driver** {#sequential-device-driver}
A sequential device driver is a [hardware driver](#hardware-driver) that will
only service a single request at a time. The [core driver](#core-driver)
synchronizes and serializes all requests.
### **Service** {#service}
In [FIDL](#fidl), a service groups [protocols](#protocol) to describe how one
process interacts with another.
Services can be used and provided to other components by
[routing](#capability-routing) [service capabilities](#service-capability).
- [Service overview](/docs/concepts/components/services.md)
### **Service capability** {#service-capability}
A [capability](#capability) that permits communicating with a
[service](#service) over a [channel](#channel) using a specified [FIDL](#fidl)
service. The server end of the channel is held by the
[component instance](#component-instance) that provides the capability. The
client end of the channel is given to the
[component instance](#component-instance) that [uses](#use) the capability.
- [Capability routing](#capability-routing)
Service capability is a [components v2](#components-v2) concept.
### **Session** {#session}
A session is a [component](#component) that encapsulates a product’s user experience. It is the first product-specific component started on boot after the [Session Manager](#session-manager). Sessions typically utilize aspects of the [Session Framework](#session-framework) during their development, in automated testing, and at runtime. At runtime, there is only one session component, but it can be composed of many sub-components. For example, the session for a graphical product instantiates Scenic (graphics) as a child component.
Session is a [Session Framework](#session-framework) concept.
### **Session Framework** {#session-framework}
The session framework is a framework for building products on Fuchsia. The framework provides software libraries, FIDL protocols, developer tools, and standards that are composed to create a particular product’s user experience.
See the session framework [conceptual documentation](/docs/concepts/session/introduction.md).
### **Session Launcher** {#session-launcher}
This is a [FIDL](#fidl) protocol. For more information, see [`fuchsia.session.Launcher`].
A protocol, exposed by the [Session Manager](#session-manager), used to start or restart [sessions](#session). It is available to developer tools such as `session_control` to control session components at runtime.
Session Launcher is a [Session Framework](#session-framework) concept.
[`fuchsia.session.Launcher`]: /sdk/fidl/fuchsia.session/launcher.fidl
### **Session Manager** {#session-manager}
The platform component, started late in the Fuchsia boot sequence, that manages the lifecycle of the [session](#session). The session manager defines the set of system capabilities provided to sessions at runtime.
Session Manager is a [Session Framework](#session-framework) concept.
### **Protocol capability** {#protocol-capability}
A [capability](#capability) that permits communicating with a
[protocol](#protocol) over a [channel](#channel) using a specified [FIDL](#fidl)
protocol. The server end of the channel is held by the
[component instance](#component-instance) that provides the capability. The
client end of the channel is given to the
[component instance](#component-instance) that [uses](#use) the capability.
- [Capability routing](#capability-routing)
Protocol capability is a [components v2](#components-v2) concept.
### **Storage capability** {#storage-capability}
A storage capability is a [capability](#capability) that allocates per-component
isolated storage for a designated purpose within a filesystem directory.
Multiple [component instances](#component-instance) may be given the same
storage capability, but underlying directories that are isolated from each other
will be allocated for each individual use. This is different from
[directory capabilities](#directory-capability), where a specific filesystem
directory is routed to a specific component instance.
Isolation is achieved because Fuchsia does not support
[dotdot](/docs/concepts/filesystems/dotdot.md).
There are three types of storage capabilities:
- *data*: a directory is added to the [namespace](#namespace) of the
[component instance](#component-instance) that [uses](#use) the capability.
Acts as a [data directory](#data-directory).
- *cache*: same as data, but acts as a [cache directory](#cache-directory).
- *meta*: a directory is allocated to be used by component manager, where it
will store metadata to enable features like persistent
[component collections](#component-collection).
Storage capability is a [components v2](#components-v2) concept.
- [Capability routing](#capability-routing)
- [Storage capabilities](/docs/concepts/components/capabilities/storage.md)
### **Thread** {#thread}
A Thread is a [kernel object](#kernel-object) that represents a time-shared
CPU execution context. Each thread is contained in a [process](#process).
- [Thread Overview](/docs/reference/kernel_objects/thread.md)
### **userboot** {#userboot}
userboot is the first process started by the Zircon kernel. It is loaded from
the kernel image in the same way as the [vDSO](#virtual-dynamic-shared-object),
instead of being loaded from a filesystem. Its primary purpose is to load the
second process, [bootsvc](#bootsvc), from the [bootfs](#bootfs).
- [Documentation](/docs/concepts/booting/userboot.md)
### **Virtual Dynamic Shared Object** {#virtual-dynamic-shared-object}
The Virtual Dynamic Shared Object (vDSO) is a Virtual Shared Library -- it is
provided by the [Zircon](#zircon) kernel and does not appear in the filesystem
or a package. It provides the Zircon System Call API/ABI to userspace processes
in the form of an ELF library that's "always there." In the Fuchsia SDK and
[Zircon DDK](#ddk) it exists as `libzircon.so` for the purpose of having
something to pass to the linker representing the vDSO.
### **Virtual Memory Address Range** {#virtual-memory-address-range}
A Virtual Memory Address Range (VMAR) is a Zircon
[kernel object](#kernel-object) that controls where and how
[Virtual Memory Objects](#virtual-memory-object) may be mapped into the address
space of a process.
- [VMAR Overview](/docs/reference/kernel_objects/vm_address_region.md)
### **Virtual Memory Object** {#virtual-memory-object}
A Virtual Memory Object (VMO) is a Zircon [kernel object](#kernel-object) that
represents a collection of pages (or the potential for pages) which may be read,
written, mapped into the address space of a process, or shared with another
process by passing a [Handle](#handle) over a [Channel](#channel).
- [VMO Overview](/docs/reference/kernel_objects/vm_object.md)
### **Zircon Boot Image** {#zircon-boot-image}
A Zircon Boot Image (ZBI) contains everything needed during the boot process
before any drivers are working. This includes the kernel image and a
[RAM disk for the boot filesystem](#bootfs).
- [ZBI header file](/zircon/system/public/zircon/boot/image.h)
### **Zedboot** {#zedboot}
Zedboot is a recovery image that is used to install and boot a full Fuchsia
system. Zedboot is actually an instance of the Zircon kernel with a minimal set
of drivers and services running used to bootstrap a complete Fuchsia system on a
target device. Upon startup, Zedboot listens on the network for instructions
from a bootserver which may instruct Zedboot to [install](#paver) a new OS. Upon
completing the installation Zedboot will reboot into the newly installed system.
### **Zircon** {#zircon}
Zircon is the [microkernel](https://en.wikipedia.org/wiki/Microkernel) and
lowest level userspace components (driver runtime environment, core drivers,
libc, etc) at the core of Fuchsia. In a traditional monolithic kernel, many of
the userspace components of Zircon would be part of the kernel itself.
- [Zircon Documentation](/zircon/README.md)
- [Zircon Concepts](/docs/concepts/kernel/concepts.md)
- [Source](/zircon)
### **ZX** {#zx}
ZX is an abbreviation of "Zircon" used in Zircon C APIs/ABIs
(`zx_channel_create()`, `zx_handle_t`, `ZX_EVENT_SIGNALED`, etc) and libraries
(libzx in particular).
### **ZXDB** {#zxdb}
The native low-level system debugger.
- [Reference](/docs/development/debugger/README.md)