Andersama / obs-asio

ASIO plugin for OBS-Studio
GNU General Public License v3.0
664 stars 43 forks source link

Plugin not working with version X.0.0 #133

Open Andersama opened 1 year ago

Andersama commented 1 year ago

This is for anyone confused as to why plugins stopped working with new versions of their software. I'm leaving this here because this repository is a prime example.

First to cover the basics, OBS (and many other software) follows the semantic versioning system, this provides a slight hint as to how significant changes have been made to the underlying code.

The pattern goes like this major.minor.patch where whenever a significant enough change occurs the lower digits are reset. This provides fairly straightforward way of determining if you're on the latest version of a piece of software as the numbers should be strictly increasing. It's an incredibly intuitive system, with one incredibly unintuitive catch.

If patch increases usually the change is pretty insignificant, perhaps a bug or several have been fixed but the underlying functionality is the same, for the most part hoping between patches should be seamless unless the code changed specifically impacted you already.

If minor has changed there's been a fair amount of change, a new feature likely has been added. In most cases a bump to a new minor version may be a good sign to update, as each new minor version may include new utilities which help you in some way. There are likely a number of patches along for the ride.

When major has been changed, as the name gives away a lot has changed. So far there's a relatively straightforward pattern, the bigger the number the better the software. It's got less bugs and more features (probably faster too etc etc...). But here is where the pattern breaks a major revision increase means (normally) that there may be breaking changes. Whatever fixes, new features (or removals) or patches could have been significant enough that the underlying code may not function the same way at all. Unlike minor and patch which are otherwise assumed to be backwards compatible with lower versions, major is not.

How does this impact plugins? Plugins like these are compiled against a particular version of their target application where target system has provided a specific API. An API here means a list of functions which must be provided for the plugin to work. When compiled there is an underlying ABI (how the function parameters are used and more complicated things) which the API will follow but for the sake of simplicity we'll say there's a specific API. In this case the plugin system has a small, but not exactly thorough check to verify that what appears to be a plugin appears to use the current version's API. If that check fails it simply ignores the plugin because if it were to continue there's no telling what could happen.

A breaking change to the plugin's system, whether to it's API or ABI will deserve a major version bump, because quite simply, NONE of the previously built plugins will work with the newer version (unless there's specifically code added to handle multiple APIs). In short a major version bump may mean that plugins stop functioning.

This is the counter intuitive aspect of semantic versioning, a change to the major part of the version number may mean things just don't work. That is of course until the code is recompiled against the new version.

Andersama commented 6 months ago

I realize I forgot to clarify a solution here, for anyone who skimmed or got lost, be sure to download the most relevant recent release. EG: For obs version 28.x.x, download a version of the plugin which mentions being compatible with 28.x.x. Some plugin versions may work for even later obs versions as the plugin abi may not have been modified.