| Fuchsia software is delivered **on demand** to the system through **packages**. |
| This is a critical component to Fuchsia's core design principles of |
| **security** and **updatability**. Packages can be updated independently and |
| delivered on demand, like a web page. This enables a vulnerability patch to be |
| pushed to all Fuchsia products at once without the need for individual product |
| coordination. |
| |
| A package is not a single archive or image file, but rather a tree of **Binary |
| Large Objects** (BLOBs). The root of the tree is a BLOB called "meta.far" which |
| contains metadata for the package, including a "meta/contents" file which |
| contains references to the rest of the BLOBs. The BLOBs inside Fuchsia packages |
| are **content-addressed**, meaning they are referenced using a hash of their |
| contents. The content address of the meta.far itself is known as the **package |
| hash**. |
| |
| <aside class="key-point"> |
| </b>Merkle Roots</b> |
| <p>Content addresses are computed as the root hash of a Merkle tree. This is |
| a common technique for verifying the integrity of content in transit and on |
| disk. This allows Fuchsia to verify the contents of an entire package using |
| just the package hash!</p> |
| |
| <p>To learn more about Merkle roots and how they are used in Fuchsia, see |
| <a href="/docs/concepts/packages/merkleroot.md">Fuchsia package hash</a>.</p> |
| </aside> |
| |
| The meta.far contains a `meta/` directory with at least the |
| following two items: |
| |
| * `meta/package`: JSON file containing the package's identity information |
| such as name and version. |
| * `meta/contents`: A map of the human-readable file names in a package to |
| their content addresses. |
| |
| {: width="544"} |
| |
| If two or more packages share the same content (such as a library dependency, |
| or font resource), their metadata will point to the same content address for |
| that resource. This enables Fuchsia to optimize package distribution and |
| storage by avoiding the need to fetch and save a content BLOB that already |
| exists. |