Just a short teaser for another blogpost:
I want …
- … to version control all the things (version control system, code reviews)
- … to build the firmware in the continuous integration system (CI, command-line interface)
- … a reproducible firmware build (reproducibility)
- … to fix bugs in all software components (full-stack patchability, open-source, available source)
- … to fix bugs in old firmware images (archive support, offline builds)
- … to be license compliant (software bill of materials (SBOM))
- … a separation of code and state (read-only root filesystem, power cut safety)
- … to provide a SDK to application developers (SDK, cross-compilation)
- … a robust update mechanism (over the air updates (OTA), atomic, rollback, recovery, A/B, factory flashing)
For a detailed explanation with arguments and a conclusion see the full blog post on the website of my company inovex.