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?
If the package is noarch, there is very high chance, that it would work
with Ruby 1.8 as good as with Ruby 1.9 or even Ruby 2.0. If the package
is arch dependent, it has automatically generated dependency on
libruby.so.1.9. So there is no chance to install it or run it with other
version of Ruby.
Now why I am asking? We would like to have in F19 Ruby 2.0 accompanied
by JRuby 1.7 and in the future, we would love to see these interpreters
interchangeable, i.e. it doesn't matter which interpreter is on your
system, since it will be able to run the gem/application shipped in
Fedora. However, while Ruby 2.0 should provide "ruby(abi) = 2.0", JRuby
are not yet fully 2.0 ready, so they should not provide "ruby(abi) =
2.0". Moreover, the term ABI with JRuby is a bit misleading.
So how we can make every noarch ruby package compatible with both
interpreters in terms of requires? One possibility would be to drop the
abi version unless it is explicitly needed. However, it renders
ruby(abi) as not the best virtual provide name for this goal.