xref: /aosp_15_r20/external/pigweed/pw_software_update/docs.rst (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker.. _module-pw_software_update:
2*61c4878aSAndroid Build Coastguard Worker
3*61c4878aSAndroid Build Coastguard Worker.. rst-class:: with-subtitle
4*61c4878aSAndroid Build Coastguard Worker
5*61c4878aSAndroid Build Coastguard Worker==================
6*61c4878aSAndroid Build Coastguard Workerpw_software_update
7*61c4878aSAndroid Build Coastguard Worker==================
8*61c4878aSAndroid Build Coastguard Worker.. pigweed-module::
9*61c4878aSAndroid Build Coastguard Worker   :name: pw_software_update
10*61c4878aSAndroid Build Coastguard Worker
11*61c4878aSAndroid Build Coastguard Worker   The ``pw_software_update`` module offers the following building blocks for
12*61c4878aSAndroid Build Coastguard Worker   setting up your own end-to-end software delivery system.
13*61c4878aSAndroid Build Coastguard Worker
14*61c4878aSAndroid Build Coastguard Worker   - **TUF embedded**: An underlying TUF_-based security framework tailored
15*61c4878aSAndroid Build Coastguard Worker     for embedded use cases that enable safe and resilient software delivery.
16*61c4878aSAndroid Build Coastguard Worker   - **One bundle**: A standard update bundle format for assembling all build
17*61c4878aSAndroid Build Coastguard Worker     artifacts and release information.
18*61c4878aSAndroid Build Coastguard Worker   - **Two keys**: Each product has two keys dedicated to software updates. The
19*61c4878aSAndroid Build Coastguard Worker     ``targets`` key directly signs a versioned manifest of target files and
20*61c4878aSAndroid Build Coastguard Worker     can be regularly rotated by the ``root`` key. The ``root`` keys are in
21*61c4878aSAndroid Build Coastguard Worker     turn rotated by verified boot. No provisioning is required.
22*61c4878aSAndroid Build Coastguard Worker   - **Frameworked client**: An update client that takes care of all the logic
23*61c4878aSAndroid Build Coastguard Worker     of checking, staging, verifying, and installing an incoming update. The
24*61c4878aSAndroid Build Coastguard Worker     framework calls into the downstream backend only when needed.
25*61c4878aSAndroid Build Coastguard Worker   - **Signing service**: Integration support for your favorite production
26*61c4878aSAndroid Build Coastguard Worker     signing service.
27*61c4878aSAndroid Build Coastguard Worker   - **Tooling**: Python modules that assemble, sign, and inspect bundles,
28*61c4878aSAndroid Build Coastguard Worker     ready to be integrated into your build and release pipeline. Plus a CLI
29*61c4878aSAndroid Build Coastguard Worker     with which you can try out ``pw_software_update`` before buying into it.
30*61c4878aSAndroid Build Coastguard Worker   - **Extensive guidance**: All software update systems are not equal. We
31*61c4878aSAndroid Build Coastguard Worker     are building out extensive guidance for representative scenarios.
32*61c4878aSAndroid Build Coastguard Worker
33*61c4878aSAndroid Build Coastguard Worker-------------
34*61c4878aSAndroid Build Coastguard WorkerWho is it for
35*61c4878aSAndroid Build Coastguard Worker-------------
36*61c4878aSAndroid Build Coastguard Worker
37*61c4878aSAndroid Build Coastguard WorkerThe ``pw_software_update`` module is still in early stages. It works best if
38*61c4878aSAndroid Build Coastguard Workeryour software update needs checks the following boxes.
39*61c4878aSAndroid Build Coastguard Worker
40*61c4878aSAndroid Build Coastguard Worker✅ **I want security-by-design**!
41*61c4878aSAndroid Build Coastguard Worker
42*61c4878aSAndroid Build Coastguard WorkerThe ``pw_software_update`` module is built with security in mind from
43*61c4878aSAndroid Build Coastguard Workerday 0. It leverages the state-of-the-art and widely used TUF_ framework.
44*61c4878aSAndroid Build Coastguard WorkerWith relatively little expertise, you can set up and operate a software
45*61c4878aSAndroid Build Coastguard Workerbuilding, release, and delivery pipeline that is resiliently secure and
46*61c4878aSAndroid Build Coastguard Workerprivate.
47*61c4878aSAndroid Build Coastguard Worker
48*61c4878aSAndroid Build Coastguard Worker✅ **My project has verified boot.**
49*61c4878aSAndroid Build Coastguard Worker
50*61c4878aSAndroid Build Coastguard WorkerSoftware update is an extension of verified boot. Security measures in
51*61c4878aSAndroid Build Coastguard Worker``pw_software_update`` CANNOT replace verified boot.
52*61c4878aSAndroid Build Coastguard Worker
53*61c4878aSAndroid Build Coastguard Worker.. note::
54*61c4878aSAndroid Build Coastguard Worker
55*61c4878aSAndroid Build Coastguard Worker   Verified boot, also known as secure boot, refers to the generic security
56*61c4878aSAndroid Build Coastguard Worker   feature that ensures no software component is run without passing
57*61c4878aSAndroid Build Coastguard Worker   integrity and authentication verification.  In particular, verified boot
58*61c4878aSAndroid Build Coastguard Worker   ensures the software update stack has not been tampered with.
59*61c4878aSAndroid Build Coastguard Worker
60*61c4878aSAndroid Build Coastguard Worker✅ **My project DOES NOT require delta updates.**
61*61c4878aSAndroid Build Coastguard Worker
62*61c4878aSAndroid Build Coastguard Worker``pw_software_update`` packages every new software release in a single opaque
63*61c4878aSAndroid Build Coastguard Workerbundle. The bundle is the smallest granularity transferred between endpoints.
64*61c4878aSAndroid Build Coastguard Worker
65*61c4878aSAndroid Build Coastguard Worker✅ **I can manage signing keys myself.**
66*61c4878aSAndroid Build Coastguard Worker
67*61c4878aSAndroid Build Coastguard WorkerWe don't yet have a public-facing signing service.
68*61c4878aSAndroid Build Coastguard Worker
69*61c4878aSAndroid Build Coastguard Worker✅ **I can store and serve my own updates.**
70*61c4878aSAndroid Build Coastguard Worker
71*61c4878aSAndroid Build Coastguard WorkerWe don't yet have a public-facing end-to-end software delivery solution.
72*61c4878aSAndroid Build Coastguard Worker
73*61c4878aSAndroid Build Coastguard WorkerIf your project doesn't check all the boxes above but you still wish to use
74*61c4878aSAndroid Build Coastguard Worker``pw_software_update``. Please `email <https://groups.google.com/g/pigweed>`_
75*61c4878aSAndroid Build Coastguard Workeror `chat <https://discord.gg/M9NSeTA>`_ with us for potential workarounds.
76*61c4878aSAndroid Build Coastguard Worker
77*61c4878aSAndroid Build Coastguard Worker.. _TUF: https://theupdateframework.io/
78*61c4878aSAndroid Build Coastguard Worker
79*61c4878aSAndroid Build Coastguard Worker.. toctree::
80*61c4878aSAndroid Build Coastguard Worker   :hidden:
81*61c4878aSAndroid Build Coastguard Worker   :maxdepth: 1
82*61c4878aSAndroid Build Coastguard Worker
83*61c4878aSAndroid Build Coastguard Worker   get_started
84*61c4878aSAndroid Build Coastguard Worker   design
85*61c4878aSAndroid Build Coastguard Worker   guides
86*61c4878aSAndroid Build Coastguard Worker   cli
87