Skip to content

Conversation

@darbyjohnston
Copy link
Contributor

@darbyjohnston darbyjohnston commented Mar 28, 2025

Related to #872 and #1182, but this is just for the C++ libraries.

This change sets the SOVERSION for the C++ libraries. This version should be incremented anytime the ABI changes. OTIO is currently using the minor version number for breaking changes, e.g. v0.15, v0.16.0, v0.17.0, so SOVERSION is set as a combination of OTIO_VERSION_MAJOR and OTIO_VERSION_MINOR. When OTIO reaches version 1.x.x then SOVERSION could be changed to track just OTIO_VERSION_MAJOR.

Signed-off-by: Darby Johnston <darbyjohnston@yahoo.com>
@codecov-commenter
Copy link

codecov-commenter commented Mar 28, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 84.72%. Comparing base (c0e97b0) to head (640377f).
Report is 51 commits behind head on main.

❌ Your changes status has failed because you have indirect coverage changes. Learn more about Unexpected Coverage Changes and reasons for indirect coverage changes.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #1860      +/-   ##
==========================================
+ Coverage   84.11%   84.72%   +0.61%     
==========================================
  Files         198      177      -21     
  Lines       22241    12809    -9432     
  Branches     4687     1191    -3496     
==========================================
- Hits        18709    10853    -7856     
+ Misses       2610     1773     -837     
+ Partials      922      183     -739     
Flag Coverage Δ
py-unittests 84.72% <ø> (+0.61%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

see 131 files with indirect coverage changes


Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 4d31e15...640377f. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Signed-off-by: Darby Johnston <darbyjohnston@yahoo.com>
@darix
Copy link

darix commented Mar 29, 2025

TBH: using the version number for the SO version is a good starting point and bumping with the version is an easy way to avoid problems.

but there is actual tooling now for understand when you need to bump your soversion. e.g. libabigail.

https://media.ccc.de/v/1234-libabigail-how-semantic-analysis-of-c-and-c-elf-binaries-can-be-used-to-analyze-abi-changes

@meshula
Copy link
Collaborator

meshula commented Mar 29, 2025

I propose the following policy to make the policy concrete

The SO version must be incremented every time a change occurs to the ABI that causes a backward incompatibility. Such changes include, exhaustively:

  • a change to struct or class layout
  • enum changes that would cause a renumbering of previously published enums
  • a removal of a struct, class, enumeration, or function
  • a change in parameters to a free standing function
  • a removal of a global variable

OTIO currently designates the minor version number for breaking changes, e.g. v0.15, v0.16.0, v0.17.0, accordingly the SOVERSION will be incremented to match. SO version must be monotically increasing, so the ABI version should be computed as major100 + revision1. The third digit will never implicate an ABI version change.

Distros that wish to minimize version changes are encouraged to pick the version of OpenTimelineIO that was released most recently before the last cut off date of the most recent vfxplatform year. Distros that wish to always be on head are advised that ABI version is considered carefully before a bump and subject to OpenTimelineIO project policy.

@JeanChristopheMorinPerso
Copy link
Member

@meshula I find the following confusing:

Distros that wish to minimize version changes are encouraged to pick the version of OpenTimelineIO that was released most recently before the last cut off date of the most recent vfxplatform year. Distros that wish to always be on head are advised that ABI version is considered carefully before a bump and subject to OpenTimelineIO project policy.

I'm curious, why mention the vfxplaform? Also, why does picking a version released before the latest VFX platform year minimize changes?

As for the last statement, it might be just because I'm not a native English speaker, but I find it confusing. Is the intent to say that the head isn't yet stabilized and can't be relied on, ABI wise?

@darix
Copy link

darix commented Mar 29, 2025

target platform shouldnt have any impact on when to bump the soversion. the important bit is when you break the ABI.

that's why I suggest using tools like abigail over guessing. :)

@meshula
Copy link
Collaborator

meshula commented Apr 1, 2025

I'm curious, why mention the vfxplaform? Also, why does picking a version released before the latest VFX platform year minimize changes?

Distros that wish to minimize version changes are encouraged to pick the version of OpenTimelineIO that was released most recently before the last cut off date of the most recent vfxplatform year. Distros that wish to always be on head are advised that ABI version is considered carefully before a bump and subject to OpenTimelineIO project policy.

That's PTSD from OpenEXR/Imath and distros trying to slice and dice an old OpenEXR (2.x) with a new Imath (3.x) . Maybe we don't need the advice; if people run into problems with the Imath dependency they should use the interred version, and maybe we don't need to say anything about that.

As for the last statement, it might be just because I'm not a native English speaker, but I find it confusing. Is the intent to say that the head isn't yet stabilized and can't be relied on, ABI wise?

No, now that you've asked me to think more carefully about my comment, it's meant to say if you are building an old vfxplatform and you want to use system Imath, you should pick an OTIO from the vfxplatform year you care about, otherwise you might run into Imath2/3 problems.

Again, maybe Imath2 is gone by now, so maybe not worth caring about.

@darbyjohnston darbyjohnston added build issues building OTIO cmake issues with the cmake scripts and removed time calculations opentime labels Apr 1, 2025
Signed-off-by: Darby Johnston <darbyjohnston@yahoo.com>
@darbyjohnston
Copy link
Contributor Author

@meshula I updated the comments with your feedback, and also added some examples of release versions and their corresponding ABI versions. I left out the parts about the distros, hopefully moving to Imath3 will sort that out. When you have a chance take a look and see what you think.

darbyjohnston and others added 2 commits April 1, 2025 17:03
Co-authored-by: Nick Porcino <meshula@hotmail.com>
Signed-off-by: Darby Johnston <darbyjohnston@yahoo.com>
Signed-off-by: Darby Johnston <darbyjohnston@yahoo.com>
@darbyjohnston darbyjohnston marked this pull request as ready for review April 2, 2025 00:19
Copy link
Collaborator

@meshula meshula left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@darbyjohnston darbyjohnston added this to the Public Beta 18 milestone Apr 3, 2025
@darbyjohnston darbyjohnston merged commit 43de3e5 into AcademySoftwareFoundation:main Apr 3, 2025
62 checks passed
@darbyjohnston darbyjohnston deleted the soversion_cxx branch April 27, 2025 23:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build issues building OTIO cmake issues with the cmake scripts

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants