[Fedora-packaging] Ruby guidelines draft - further discussion

Bohuslav Kabrda bkabrda at redhat.com
Wed Apr 4 05:45:56 UTC 2012


Hi Toshio,
thanks for your reply.

----- Original Message -----
> Thanks for sending this to get the ball rolling!
> 
> On Thu, Mar 29, 2012 at 06:53:21AM -0400, Bohuslav Kabrda wrote:
> > Hi,
> > as it was said on the fpc meeting, I'm writing to comment on the
> > section "Some Notes" in Toshio's draft of new Ruby packaging
> > guidelines [1].
> > 
> > [citing the lines from "Some Notes" one by one]
> > 
> > - "Need to move the rubygems library into the per-interpreter
> > directories as it is a non-gem library."
> > As we have said with Mo Morsi, Rubygems library should stay out of
> > Ruby directory structure.
> > Pros:
> > -- Prooves to Rubygems and JRuby upstreams that Rubygems library
> > can be unbundled from Ruby and it makes sense to work on merging
> > the JRuby changes in Rubygems upstream to make one general
> > Rubygems library (that should therefore be
> > implementation-independent).
> > -- As noted by Toshio on the fpc meeting, our system-wide Rubygems
> > are currently only used by MRI Ruby. But as I've said, we need to
> > take steps gradually to convince the upstreams of feasibility of
> > such changes and not to break anything. It is true, that JRuby
> > currently ships with it's own modified (non-compatible) version of
> > Rubygems, but we are working to merge their changes into Rubygems
> > upstream. So yes, currently in F17, there is only the MRI Ruby
> > using the system-wide Rubygems, but the support for JRuby is
> > comming (perhaps F18?). If we are discussing this only from F17
> > point of view, we still may want to package Rubinius there (it is
> > on our todo list, although not that high as JRuby) and Rubinius
> > _would_ be able to use the system-wide Rubygems - that is another
> > reason why Rubygems should stay where they are even in Fedora 17.
> > 
> > Cons:
> > -- Toshio says that he doesn't like special-casing and Rubygems
> > should ship inside each of the Ruby implementations, until we make
> > all the changes to have system-wide Rubygems, that work with all
> > Ruby implementations (I hope I am not misinterpreting you, if yes,
> > then please correct me). I'd like to add, that it is very hard to
> > convince Rubygems upstream to make any changes that we need and we
> > must have something to show them it's worth the work to merge the
> > JRuby changes in.
> > -- Any others?
> > 
> 
> So, this is pretty close to my reasoning.  I don't like
> special-casing
> things without a good reason.  It makes explanations longer and trips
> people
> up when they look at a particular well-known package as an example of
> how to
> do something.  (And meets resistance and causes extra work if that
> special-case is ever removed ;-).  That said, I'm not overly attached
> to
> this -- if there is a *good* reason for special casing, that's fine
> with me.
> 
> A good reason for special casing should:
> 
> * apply to the rubygem library but not to other non-gem libraries
> (this is
>   what makes it special)
> * help us achieve some goal (the goal in the times I can think of
> have been
>   to get a particular package into Fedora but this could be a
>   different goal)
> * differ as little from standard packaging guidelines and other,
> similar
>   special cases  as possible (to minimize the amount that packagers,
>   reviewers, and sysadmins have to learn to deal with this specific
>   special
>   case)
> 
> I think we have pieces of this but I'm not quite to the point where I
> think
> we have all of these reasons covered.
> 
> - Proving to rubygem upstream that we can have common code.  This
> seems to
>   be one goal that we're trying to achieve.
> - Working towards a single code-base for ruby and jruby (and
> rubinius).
>   Also seems to be a goal to achieve.
> 
> What we're not getting at with these two reasons is why the rubygem
> library
> is special compared to other non-gem libraries and whether a
> different way
> exists to do this that deviates less from the standard guidelines.
> 
> For the first question, the idea that the rubygem module is vastly
> more
> popular than other non-gem modules was advanced as a possibility.  In
> talking with vondruch on IRC, he pushed this idea even further to
> encompass
> the idea that non-gem ruby libraries are a legacy format.  rubygems
> should
> be considered the format for ruby libraries.  A few non-gem libraries
> will
> exist because no one exists upstream to port them over but by and
> large they
> have very little importance.  What sets the rubygem library itself
> apart
> here is the bootstrapping issue.  The rubygem library can't be
> packaged as
> a gem because it is needed in order to load libraries packaged as
> rubygems.
> 
> If we decide that that's the basis of why the rubygem library is
> special,
> that leaves us with the last question of whether we can package this
> better.
> I can think of two alternatives that seem more standard and still
> satisfy
> the goals.  I'll present them so we can either come up with new goals
> that
> will make them not work or we can see that the special-case in mind
> makes
> more sense:
> 
> 1)  As of ruby-1.9, the rubygem module is shipped as part of the ruby
>     standard library which is an acknowledgement by upstream that
>     rubygem
>     is needed to install almost any other ruby library.  We should
>     simply
>     patch the rubygem library in the ruby standard library with the
>     changes
>     to make it compatible across interpreters.

That's not as easy as it sounds. In terms of sustainability, this may become a nightmare to support, because we are talking about a pretty decent amount of patches. That is why we are trying to make Rubygems upstream merge the JRuby modifications.

>     The various ruby
>     interpreters have to fork the standard library when they create
>     their
>     interpreters so the more we work with the standard library
>     versions to
>     make the standard library version of modules not need patches per
>     interpreter, the more everyone benefits.  We can do this work
>     without
>     pushing a third-party module for rubygems or installing into a
>     separate
>     location.
> 

I see your point here, but the standard library itself is not completely implemented in Ruby (in MRI Ruby, it has C extensions, in JRuby, it has jars). So we can put some effort into this, but it's not completely achievable, just considering the per-interpreter extensions. The Rubygems library is however 100 % Ruby and therefore can be adapted to work with all the interpreters (I took the time to go through all the JRuby modifications and it's obvious, that these can be merged with some amount of work). That is one of the reasons why it makes sense to take Rubygems out and make them interpreter-independent.

> 2) Ship a rubygem package that has separate subpackages for each
>    interpreter that places the code into the vendorlib for each
>    interpreter.
>    Apply patches to this as needed to get to the place where we have
>    common
>    code running on all interpreters.  This seems pretty close to what
>    we're
>    doing now -- it's just that we don't need to install into a
>    separate
>    location that all the ruby interpreters need to know about.
> 

Interpreter-dependent Rubygems were the case up to F16, but this whole idea is about not doing it this way. As I have already mentioned, applying interpreter-specific patches may become very hard to maintain (should we have one Rubygems package with subpackages), so I wouldn't see that as an option.

Really, having one Rubygems interpreter-independent package is the best direction that we can take this.

> > - "Need to rebuild ruby and rubygems package to use the new
> > location"
> > -- I think that depends on whether the Rubygems library is moved,
> > so let's put it aside for the moment and discuss it afterwards.
> > 
> > - "Need to rebuild rubygem packages to use the new
> > interpreter-neutral rubygem library location."
> > -- Same as above.
> > 
> > - "Should there be more information about jruby, etc in the
> > introductory portion (naming and" [unfinished]
> > -- I think it would be good to postpone this until we have better
> > integration with the other Ruby implementations. So far, no one
> > has requested any JRuby specific packages or anything connected
> > with JRuby, so I would leave that for a separate discussion/fpc
> > ticket.
> > 
> > - "gem2rpm and rpmdev-newrpmspec can be updated with the new
> > template"
> > -- Yes, we will do that once the guidelines are complete. I hope
> > that the gem2rpm part of guidelines will then be added back.
> > 
> yep,  all of these sound like reasonable answers.
> 
> -Toshio
> 
> --
> packaging mailing list
> packaging at lists.fedoraproject.org
> https://admin.fedoraproject.org/mailman/listinfo/packaging

-- 
Regards,
Bohuslav "Slavek" Kabrda.


More information about the packaging mailing list