I am developing an embedded linux based product. The linux user-space runs multiple processes that are part of the product. I want to implement a clever design of upgrade (and downgrade) of the firmware version. So for example, If I change a structure in a newer version, the newer process can know how to read the old data (which is stored on flash) and build from it the new structure, But!, when downgrade, the older process won't understand the new structure that is being saved on the flash.
So what is the best design for handling the upgrading (and downgrading) of a whole firmware version?