[interfacekit] How backwards compatible?

I am working on BPropertyInfo and I have run into a minor issue.  I 
have a plan to address it, but I want to check with some people on the 
mailing list first.

Prior to R4, the struct property_info structure had only five elements 
to it.  With R4, the structure was changed and three new elements were 
added to it.  This means that code that pass a property_info to a 
BPropertyInfo class using the old header from R3 will have a different 
size structure than what is found in R4.

To handle this, Be changed the constructor for BPropertyInfo.  The old 
R3 constructor was moved so it became private.  However, existing 
binaries will still use this private constructor and this constructor 
knows the structure passed in is the old format and it converts it to 
the new structure.  Any code compiled on R4 or newer will use a new 
constructor.  Because it is compiled on R4 or later, the right 
property_info structure and BPropertyInfo constructor gets called.

So, the question becomes should I bother to implement the code to 
convert between the old property_info structure and the new one (as of 
R4) and implement this private constructor.  Here are the things I have 
considered:

- On Intel, R4 was incompatible with R3.  So, all current Intel BeOS 
binaries should not be using the old constructor/old structure format.  
I have checked all ELF files on my BeOS machine and confirmed that none 
of them link against this deprecated constructor.  From this 
perspective it should be safe not to implement it.

- On PPC, R4 is compatible with R3.  If OpenBeOS is to be compatible 
with PPC in the future, we will need this constructor etc in order to 
run PPC binaries from R3.  Personally, I think this isn't too likely.  
If we do end up with a PPC version of OpenBeOS, I suspect it will not 
be compatible at all and be based on the gcc toolchain.

- I am worried that there may be flattened R3 BPropertyInfo's out there 
on someones harddisk, even on Intel.  Perhaps Be handled unflattening 
these also.  If we don't implement support for old BPropertyInfo 
unflattening, we may have some minor compatibility issues.  I think the 
risk here is very low however.

Given all of this, I have decided _not_ to implement this backward 
compatibility to the R3 BPropertyInfo interface.  If anyone has any 
concerns about this, please let me know.  Thanks.

--
Jeremy Rand
jrand@xxxxxxxx

Other related posts: