#389 bundled bootstrap binary exception for sbt
Closed: Fixed None Opened 10 years ago by willb.

Hi, I'm [https://bugzilla.redhat.com/show_bug.cgi?id=sbt-package packaging sbt], the simple build tool for Scala, and it requires itself to compile. The upstream sbt binaries depend on other libraries that, in turn, depend on sbt to build. The upstream binaries also depend on Apache Ivy 2.3.0-rc1, which is source- and binary-incompatible with Apache Ivy 2.3.0 (as shipped in recent Fedoras).

I would like a bundling exception so that I could use the upstream sbt binaries (and their sbt-dependent or Fedora-incompatible dependencies) to build a sbt binary for Fedora. My build is patched to work with the current Ivy release and eliminate parts of the sbt build and test process that introduce circular dependencies. (All non-Fedora-specific patches are upstream, just not released yet. More details on sbt's build process as it relates to Fedora are available: https://fedoraproject.org/wiki/SIGs/bigdata/packaging/Scala and http://chapeau.freevariable.com/2013/08/making-fedora-a-better-place-for-scala.html .)

Such a bundling exception would be the most convenient way to proceed, but I could also use upstream binaries to produce a sbt binary with my modifications and bundle that in a bootstrap package if that would be more appropriate.

Thanks for your consideration!

Some clarifications after discussing this in the FPC meeting:

  1. The model that upstream sbt uses is that, in order to compile some version V of sbt, you'll need to use the most recent stable version of upstream sbt before V.
  2. As a consequence, a one-time bootstrap should be enough to get things going in Fedora, but it is possible that we will need to bootstrap again in the future if upstream changes this model (or if builds begin depending on features that we can't support for some reason in a Fedora package). Therefore, an ongoing exception (with the understanding that we'd only use bootstrap binaries when necessary) would be more flexible.
  3. In practice, we are unlikely to need to take full advantage of an ongoing exception for several reasons: we will need to package a version of sbt that works with every Scala package we'd like to install in Fedora (so it won't change often); we should, in general, be able to build newer sbt releases from those already in Fedora; and it seems possible (at least some of the time) to relax the version V-1 requirement and build with alternate versions.

I'll plan on using the upstream binaries (and not binaries bootstrapped from upstream binaries) as bootstrap binaries in order to get repeatable and auditable builds.

I think this is complete enough to vote in ticket.

+1 to an ongoing bootstrapping exception for me.

We generally allow one-time bootstrapping using: https://fedoraproject.org/wiki/Packaging:Guidelines#Exceptions

I believe we've occasionally allowed ongoing bootstrapping in the past (where the bootstrap phase is needed because of a new, incompatible, upstream release) but I didn't find any specific instances (those instances would have pre-dated approving the current policy). The clarifications in https://fedorahosted.org/fpc/ticket/389#comment:1 satisfy me that every effort will be made to do one-time bootstrapping but that ongoing bootstrapping when upstream updates to a new major version would be acceptable in cases where the package maintainer can't get the new version to build with the old one. The reporter understands that the packages that ship in the yum repos cannot contain the bootstrap binaries but must have been rebuilt once the bootstrap has completed.

Bootstrapping from upstream binaries would be turned on only when an incompatibility prevents rebuilding from previous Fedora packages.

+1 for an ongoing bootstrapping exception.

Is there anything else I need to do before I can build sbt, or is the fact that this was voted on in the FPC meeting (http://meetbot.fedoraproject.org/fedora-meeting-1/2014-02-13/fpc.2014-02-13-17.00.html) sufficient?

info Bootstrap bundling approved for sbt bundling itself. (+1:6, 0:0, -1:0)

As this is a bootstrapping exception, there won't be a need for a virtual Provide. You have been approved to go ahead with building this package using a bundled sbt for bootstrapping purposes.

Login to comment on this ticket.