|  | # Sandboxing | 
|  |  | 
|  | This document describes how sandboxing works for a process | 
|  | in Fuchsia. | 
|  |  | 
|  | ## A new process has nothing | 
|  |  | 
|  | In Fuchsia, a newly created process is empty. It cannot | 
|  | access any kernel objects, allocate memory, or execute code. | 
|  | Because of this, processes are usually created with some | 
|  | initial resources and capabilities. | 
|  |  | 
|  | Most commonly, a process starts executing some code with an initial stack, some | 
|  | command line arguments, some environment variables, and a set of initial handles. | 
|  | [Zircon program loading and dynamic linking](/docs/concepts/booting/program_loading.md) describes | 
|  | the resources provided to programs when starting. | 
|  |  | 
|  | ## Namespaces are the gateway to the world | 
|  |  | 
|  | Some of the initial handles given to a process are directories that the process | 
|  | mounts into its _namespace_. These handles let the process discover and | 
|  | communicate with other processes running on the system, including file systems | 
|  | and other servers. See [Namespaces](/docs/concepts/framework/namespaces.md) for more details. | 
|  |  | 
|  | The namespace given to a process strongly influences how much of the system the | 
|  | process can influence. Therefore, configuring the sandbox in which a process | 
|  | runs amounts to configuring the process's namespace. | 
|  |  | 
|  | ## Package namespace | 
|  |  | 
|  | A [component](/docs/glossary.md#component) run from a package is given access to | 
|  | `/pkg`, which is a read-only view of the package containing the component. To | 
|  | access these resources at runtime, a process can use the `/pkg` namespace. For | 
|  | example, the `root_presenter` can access `cursor32.png` using the absolute path | 
|  | `/pkg/data/cursor32.png`. | 
|  |  | 
|  | ## Services | 
|  |  | 
|  | Processes that are [components](/docs/glossary.md#component) receive an `/svc` | 
|  | directory in their namespace. The services available through `/svc` are a | 
|  | subset of the services provided by the component's | 
|  | [environment](/docs/glossary.md#environment). This subset is determined by the | 
|  | [`sandbox.services`](/docs/concepts/components/v1/component_manifests.md#sandbox) allowlist in the | 
|  | component's [manifest file](/docs/concepts/components/v1/component_manifests.md). | 
|  |  | 
|  | A typical component will interact with a number of services from `/svc` in | 
|  | order to play some useful role in the system. For example, the service | 
|  | `fuchsia.sys.Launcher` is required if a component wishes to launch other | 
|  | components. | 
|  |  | 
|  | Processes that are not components may or may not have `/svc`. These processes | 
|  | receive whatever `/svc` their creator provided to them. | 
|  |  | 
|  | ## Configuring additional namespaces | 
|  |  | 
|  | If a component requires access to additional resources (for example, device drivers), | 
|  | the package can request access to additional names by including the `sandbox` | 
|  | property in its  [Component Manifest](/docs/concepts/components/v1/component_manifests.md) | 
|  | for the package. For example, to request direct access to the input drive, | 
|  | include the following `dev` array in your `sandbox`: | 
|  |  | 
|  | ``` | 
|  | { | 
|  | "dev": [ "class/input" ] | 
|  | } | 
|  | ``` |