[mythtv-users] Latest MythTV with SD on Gentoo

Chad masterclc at gmail.com
Tue Aug 28 00:02:10 UTC 2007


> > What is "ABI"?
>
> Application Binary Interface
>
> The plug-ins depend on libmyth and whenever it's headers change in a
> way that may break plugins we update the MYTH_BINARY_VERSION define
> in "libs/libmyth/mythcontext.h" so as to avoid having people
> accidentally running old incompatible versions of the plugins with
> the a new MythTV release. I think what the Gentoo mask is doing is
> preventing you from upgrading to the latest MythTV until all the
> plugins are updated. They may be getting hung up on MythWeather.
> It's disabled in 0.20.2 because it's hopelessly broken due to changes
> on the weather information servers it references. We're working with
> a new MythWeather, based on a Google Summer of Code project, in the
> trunk, but it's incomplete.
>
> In the commercial world of the 1980's the ABI didn't change unless
> there was a major release, so when you went from MS-DOS 3.23.1 to
> 3.24.3 the ABI didn't change, but when you went from 3.23.1 to
> 4.01 it did change. So some people get upset when the ABI changes
> without the major version number changing. In the commercial world
> of the 1980's there was never any compatibility guarantee between
> 0.xx.yy versions, but since these were closed source programs the
> only people outside the company that experienced this were beta
> testers. Open Source programs like MythTV tend to stay at 0.xx.yy
> longer that their commercial equivalents, and they are public so many
> more people get their feathers ruffled by ABI changes and complain.
> There are also libraries like Qt that to this day keep their ABI
> compatible across all xx.yy.zz version changes where xx is greater
> than zero. This of course means that QStrings remain broken in all
> of Qt 3.x causing MythTV to SEGFAULT on occasion, but Qt has closed
> source customers who demand compatibility above functionality.
>
> In the Open Source world, where recompiling is an option anyone can
> take, we strive for API compatibility much more than ABI compatibility.
> API compatibility means that an old plug-in will recompile without
> a problem when there is a change.
>
> For instance, if we have a function:
>   order_up(string what);
> a plug-in can call:
>   other_up("hamburger");
> with API compatibility we can add a parameter with a default:
>   order_up(string what, string modification = "");
> So that the old plug-in can (after being recompiled) still call:
>   order_up("hamburger");
> But a new plug-in can now call:
>   order_up("hamburger", "hold the mayo");
>
> It's possible to implement this particular example with ABI
> compatibility in C, but using C++ to implement this with API
> compatibility results in much cleaner code. There are also
> many things that can't be done in an ABI compatible way, such
> as rearranging variables in a structure to save memory, but
> are trivial when just retaining API compatibility.
>
> -- Daniel
>
> _______________________________________________

Wow, thank you for the in-depth response!

-Chad


More information about the mythtv-users mailing list