[Fedora-packaging] purpose of ruby(abi), python(abi), etc

Bohuslav Kabrda bkabrda at redhat.com
Fri Dec 21 07:12:43 UTC 2012


----- Original Message -----
> On Thu, Dec 20, 2012 at 04:40:17PM +0100, Vít Ondruch wrote:
> > Dne 20.12.2012 15:46, Rex Dieter napsal(a):
> > >On 12/20/2012 02:40 AM, Vít Ondruch wrote:
> > >>Dne 20.12.2012 01:43, Garrett Holmstrom napsal(a):
> > >>>On 2012-12-19 5:12, Bill Nottingham wrote:
> > >>>>Vít Ondruch (vondruch at redhat.com) said:
> > >>>>>Can somebody enlighten me, what is the purpose of ruby(abi)
> > >>>>>(replace
> > >>>>>by python(abi) if you wish) virtual provide? Especially, why
> > >>>>>Ruby
> > >>>>>packaging guidelines mandate "Requires: ruby(abi) = 1.9.1",
> > >>>>>i.e.
> > >>>>>versioned require? And why in Python packages, python(abi) is
> > >>>>>automatically generated?
> > >>>>
> > >>>>In the python case, it's because that python extension modules
> > >>>>install in a version-specific directory ($libdir/python2.7, for
> > >>>>example.)
> > >>>>This makes them explicitly tied to that version of python.
> > >>>
> > >>>There's also the fact that the ABI for the bytecode that gets
> > >>>generated at build time is specific to each x.y series of python
> > >>>releases.
> > >>
> > >>For that, you could have "Require: python-libs = 2.7" instead.
> > >
> > >What's the practical difference?
> > 
> > You follow general practices? You don't have to think if
> > {ruby,python}(abi) makes any sense for {JRuby,Jython} and what
> > version it should provide in comparison to {ruby,python}. You don't
> > force people to ask why Ruby 1.9.3 has ruby(abi) = 1.9.1. You don't
> > have to answer such question as what is {ruby,python}(abi) good
> > for?
> > 
> I don't think I follow your reasoning here:
> 
> 1) If there is no python(abi) and no automatic dependency checking,
> then the
> packager assumes the burden of adding Requires: python-libs = VERSION
> in all
> of their packages.  They also assume the responsibility of figuring
> out what
> VERSION needs to be.  This is creating more work that should be done
> centrally.
> 
> 2) If there is no python(abi) but the automatic dep checking creates
> the
> Provides and Requires on python-libs = VERSION, then there doesn't
> seem to be
> any difference in terms of the work done.  Someone who maintains the
> central
> dep checking still has to figure out what VERSION should be in either
> case.
> (And, assuming that your question about Ruby 1.9.3 having ruby(abi) =
> 1.9.1
> was more than hypothetical, it sounds like there might just be a lack
> of
> someone performing this duty for Ruby).
> 
> -Toshio

I think that one of the questions here is "why 'abi' and not something else?"
We currently enforce every Ruby package to have "Requires: ruby(abi)", but JRuby doesn't in fact provide any ABI (I don't think the Java API can be called ABI). Therefore it doesn't make sense for the pure-Ruby packages to require ruby(abi). It'd be better to have something that would explain that all they need is _anything_ that can interpret Ruby, e.g. "ruby(interpreter)". Packages requiring ruby(abi) should IMHO be only these that have C extension or are otherwise bound to cRuby. Similarly, JRuby-only packages should depend on jruby (or its virtual provide, if we choose to create one).

-- 
Regards,
Bohuslav "Slavek" Kabrda.


More information about the packaging mailing list