# Layer cake deprecation

## Goal & motivation

Once upon a time Fuchsia OS & platform built out of multiple repositories,
designed in a cascade so that changes would flow from the lower-level
repositories to the higher-level repositories. This arrangement was called the
Layer Cake, and was comprised of four layers: Zircon (mostly kernel and
drivers), Garnet (low-level usermode services), Peridot (application-facing
services), and Topaz (application layer).

The distinctions between layers weren't crystal clear, the cost/benefit of this
arrangement wasn't compelling, and so eventually we moved the majority of
Fuchsia OS & platform development into a single repository and established a
new [source code layout][source-code-layout].

However the old model left a lingering mark on our directory structure, as you
can still find top-level directories named after layers.

These holdover-directories only serve to confuse new team members.
Let's move on.

## Technical background

Not much to say here. Move slow and don't break things.

Don't let them eat cake?

## How to help

### Picking a task

The following directories remain in the Fuchsia git repository:

*   `//zircon/`
*   `//garnet/`

Show them that you mean business by picking one of their subdirectories and
moving it elsewhere - typically to `//src`.

At the time of writing, prime targets for migrations include:

*   `//zircon/system/ulib/`
*   `//zircon/system/utest/`
*   `//garnet/bin/`
*   `//garnet/lib/`

### Doing a task

This mostly involves moving files and renaming some build targets.
9 out of 10 changes will be entirely mechanical.

### Completing a task

Find reviewers via OWNERS, merge your change, and take us one step closer to
deleting layer directories.

In your commit messages, include:

```none
Bug: 36063
```

## Examples

*   [`424156: [fuchsia-cprng] Move to src/lib/zircon/rust`](https://fuchsia-review.googlesource.com/c/fuchsia/+/424156)
*   [`449714: [build][power] Move power_manager to //src/power`](https://fuchsia-review.googlesource.com/c/fuchsia/+/449714)
*   [`461096: [thermd][shuffle] Migrate thermd from //garnet to //src`](https://fuchsia-review.googlesource.com/c/fuchsia/+/461096)
*   [`473957: [sysmem] Move sysmem_connector to src/devices/sysmem/bin`](https://fuchsia-review.googlesource.com/c/fuchsia/+/473957)
*   [`592547: [log_listener] Move from garnet to src/diagnostics`](https://fuchsia-review.googlesource.com/c/fuchsia/+/592547)
*   [`627766: [boards][garnet] Cleanup graphics targets`](https://fuchsia-review.googlesource.com/c/fuchsia/+/627766)

## Sponsors

Reach out for questions, status updates, or OWNERS approvals:

*   jamesr@google.com
*   shayba@google.com

[source-code-layout]: /docs/development/source_code/layout.md
