New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
API Compatibility v0.27 vs v0.27 "dots" #890
Comments
This change was introduces in commit 86816c0 (by @kevinbackhouse)
This change was introduced in commit d1097fa (by @piponazo). I guess that this one should have been marked with hidden visibility, but we missed that during code review.
Not sure why this shows up in the diff, the header containing this function got touched last in commit 0f01822 (from 2015).
This is a specific instantiation of a template function, it already existed in 0.27, just not this specific instance. The remaining functions are from the Internal namespace, which I wouldn't strictly consider as part of the API. |
Thanks for those comments @D4N. Very helpful. You're correct that entry points in the "Internal" namespace aren't in the "public API". My aim is to enable "dynamic library swapping" (DLLs on Windows, .so on Linux/Unix and .dylib on MacOS-X). So far, I've only looked on MacOS-X and will be investigating other platforms for v0.27.2. We're in Scotland this week on family business. Looking forward to releasing v0.27.2 in June. Aiming for RC1 about 15/6 and GM on 30/6. |
Dynamic library swapping requires a stable ABI, which is considerably more work |
I did more work on this two weeks ago while on vacation in Scotland. I can copy the Shared objects (DLL, .so, .dylib) built with 0.27.2.99 and run them on 0.27.0 test suite. This runs successfully. It produces some benign warnings for (correct) output changes. I am going to focus on releasing 0.27.2.1 (v0.27.2-RC1) and will return to this for v0.27.2. I hope that the output of the following command will be identical on 0.27.1 and 0.27.2 on all platforms.
|
@cryptomilk has recommended that we use this: Thank you @cryptomilk I'm sure this will be very useful. |
Btw. I've contacted Andrey and he added exiv2 master to abi checker: |
I'm going to defer this for v0.27.3. This is an important topic. Dan's adding a task to the CI to use abimap and I'll update our status about this for v0.27.3. |
I've run the test suite on Exiv2 v0.27.2 and replaced the dynamic libraries with the 0.27.3.9 versions.
Success |
…oth Exiv2::base64encode() and Exiv2::base64decode(). I'm a little uneasy about changes to the API of the shared object/DLL. I will investigate Exiv2#890 during the release process. So I have a plan to identify this if it's an issue. I think it's OK. ``` 703 rmills@rmillsmm-local:~/gnu/github/exiv2/bmff/build $ nm --demangle lib/libexiv2.dylib | grep base64 00000000000384a0 T Exiv2::base64decode(char const*, char*, unsigned long) 0000000000038340 T Exiv2::base64encode(void const*, unsigned long, char*, unsigned long) 00000000001c33a0 s Exiv2::base64_encode 704 rmills@rmillsmm-local:~/gnu/github/exiv2/bmff/build $ nm -g --demangle lib/libexiv2.dylib | grep base64 00000000000384a0 T Exiv2::base64decode(char const*, char*, unsigned long) 0000000000038340 T Exiv2::base64encode(void const*, unsigned long, char*, unsigned long) 705 rmills@rmillsmm-local:~/gnu/github/exiv2/bmff/build $ ```
Exiv2 v0.27.4 I have run the test suite on Exiv2 v0.27.2 and v0.27.3 using the 0.27.4.9 dynamic libraries.
Success Suite ran without crashing on all tested platforms with no notable exceptions being reported. There are of course differences in the output of the test suite as bugs have been fixed or features added. For example the reporting of Exif.Image.PlanarConfiguration has been changed in 0.27.4 to report "Chunky" instead of 1. |
I've noticed wrong versions of the libraries in the 0.27.4.9 library column. |
Oh, this is work in progress, Peter. It'll be correctly finished later today. |
@nehaljwani shared something about ABI/API compatibility of different releases of Exiv2. I think it was this: https://abi-laboratory.pro/index.php?view=timeline&l=exiv2
In the past, I have not worried about API/ABI compatibility. Every release of Exiv2 (v0.24, v0.25 etc) has similar and slightly different APIs. They have a different set of headers and different library filenames. This is “open-source”, and users are expected to recompile applications for different versions of Exiv2.
However, with “the dots” we have a different scenario. In February, I had an email conversation with Dan Bricklin (Yes, the guy who invented Lotus-1-2-3) and he wanted to use Exiv2 for one of his projects. He had several conditions and one was “he could replace DLLs in an existing application”. Dan had a couple of features he wanted us to add to Exiv2 and we didn’t shake hands on a deal. I couldn’t undertake the necessary work and I can’t ask any member of Team Exiv2 to deliver anything to Dan’s schedule. We didn’t discuss money.
On 2019-05-23, I built Exiv2 0.27.0 and ran the test suite on MacOS-X. Then I build Exiv2 0.27.2.99 (0.27 maintenance development for v0.27.2). I successfully ran the 0.27 test suite using the 0.27.2.99 .dylib. Very good. Very pleased that this is working OK. I didn’t try on other platforms such as Windows or Linux.
I’ve written a 1 line command to extract the API from the library:
$ nm -g --demangle libexiv2.0.27.0.dylib | grep ' T ' | cut -d' ' -f 3- | sort > ~/temp/27.0.txt
This is a 4606 line file. (4610 lines for 0.27.2.99). So small changes in the API. Nothing that seems to be a disaster. I would like folks to be able to replace 0.27 DLLs for existing applications without recompiling anything.
Here's the diff. I'll see if this can be reduced. The remaining differences will be documented in the release notes for v0.27.2
I've invited Nehal to get involved in this effort and it fits well with tasks he has been assigned at work. So, Nehal will be the expert on API/ABI compatibility for "the dots".
I don't see any reason to be concerned about API/ABI compatibility for v0.28.
I will investigate the differences and they will be eliminated or justified in releasenotes/releasenotes.txt
The text was updated successfully, but these errors were encountered: