There comes a time in many embedded or IoT projects where it is necessary or useful to migrate from one OS to another. Whether a long-time OS is moving closer to its planned end-of-support point, your strategy dictates a migration to a new OS to help power new functionality, or where your OS is aging and support for the operating system from the OS developer is being or will be withdrawn, an OS migration is as complex to manage as it is important to execute smoothly.
Across the lifetime of a device there will also likely be a need to migrate hardware platforms, too. Limitations to functionality or performance and demands from end users often combine in a push for new hardware, perhaps with a software update, too.