The way they do it, unfortunately, is by maintaining every previous version of the processing pipeline.
How do the FOSS alternatives handle this?
If I was designing a raw engine I would try to store the high-level code for the processing pipeline in the metadata for each file such that it could be reproduced reliably across software versions and even forks. Like a sequence of shaders.