I was looking through github and saw that people are hardcoding interfaces in order to communicate with different main net canisters.
For example I saw that people were using get_icp_to_cycles_conversion_rate() function from NNS and that got changed to get_icp_xdr_conversion_rate(). Now in this situation if I had a contract running in prod that was using this method and that contract was immutable then my app would stop working and I could not do anything about this.
I also saw that the nns canister id’s also changed so I am assuming that the previous version is still running exactly for this use case where backwards compatibility is required. I am not totally sure that this is actually true so I would appreciate if someone can confirm it.
Considering that what was mentioned above is true then what is the behaviour for sub dependencies where that NNS canister might have sub dependencies that change as well, how will the system handle this?
My assumption is that for internet computer to assure backwards compatibility then the systems canisters must be immutable and all changes actually imply a new separate install.
Again, these are only assumptions and I would appreciate a lot if someone could clarify the things a bit.
Thank you!