[mythtv-users] Latest MythTV with SD on Gentoo

Daniel Kristjansson danielk at cuymedia.net
Mon Aug 27 14:21:35 UTC 2007


On Sun, 2007-08-26 at 19:48 -0700, Brad Fuller wrote:
> On 8/26/07, glen martin <lists at locutory.org> wrote:
> > David Snider wrote:
> > > Brad Fuller wrote:
> > >
> > >> Anyone know when the latest MythTV with the SD patch will be available
> > >> on gentoo? I did a search:
> > >>
> > >> # emerge --search mythtv
> > >>
> > >> and it tells me I have the latest version (which was some time ago.)
> > >>
> > > It appears to be hardmasked....  0.20.2 p14282 is the package.
> > There is a comment about an incompatible ABI change.
> >
> > # MythTV 0.20.2 pre-release, masked due to ABI
> > # change that requires plugin rebuild
> >
> > I also see that there are no 0.20.2 versioned plugin ebuilds yet, if
> > those would be required to meet the ABI needs.
> 
> 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



More information about the mythtv-users mailing list