[opam-devel] OPAM 1.1 backwards-compatibility

Louis Gesbert louis.gesbert at ocamlpro.com
Mon Jan 19 04:41:10 GMT 2015

Hi all,

A note on the continued compatibility of the main package repository with OPAM 1.1, following the github issue at [1]. Sorry for the length; there's a tl;dr at the start of each paragraph.

## Current situation of OPAM 1.1 support

  [TL;DR] it works for existing installations, but newcomers are greeted by lots of scary warnings and
          required to `opam update`.

* The base idea was to redirect OPAM 1.1 clients to a repo at https://opam.ocaml.org/1.1/ , which is automatically rewritten from the main (1.2) repo still hosted at https://opam.ocaml.org/ . This parts works quite well.

* Sadly, a bug in OPAM 1.1 prevents redirection on `opam init`. So OPAM 1.1 will try to load the default repository, in 1.2 format, until you run `opam update` the first time.

* The current consequence of this is frightening screens full of errors at `opam init` with OPAM 1.1, but mostly harmless. This is documented in the FAQ [2], but is likely to turn away new 1.1 users, e.g. on Ubuntu.

* Another OPAM 1.1 bug causes a _fatal_ parsing error on the `!=` comparator in package version constraints. The consequence is that, were we to start using it in the (1.2) repo, OPAM 1.1 will fail to `init` before getting the chance to be redirected, unless you explicitely direct it to the new repo with `opam init https://opam.ocaml.org/1.1`, as documented in the FAQ.

* A completely different issue, the OPAM package in Ubuntu "utopic" has a broken solver interface [3], it'll seem to work at first, until you try to upgrade.

## Where we want to go, and consequences

  [TL;DR] some 1.2 enhancements to the repo are blocked unless we accept to turn the scary warnings
          into a fatal error. Specific init command (workaround) and existing setups would be

* The `!=` limitation is annoying because it forces ugly workarounds in the current, main repository (detailed reasons in [1])

* It doesn't look like much but it actually blocks widespread usage of the new OPAM 1.2 features (new fields like `dev-repo`, etc.) that go through PR #3143 [1] for some sanitization prerequisites. In short, I could change #3143 not to use `!=` but that would become an issue on the longer term.

* If we accept `!=` in the repo, OPAM 1.1 will _fail_ to initialize rather than output lots of errors that get fixed by `opam update`. Existing installations, or `opam init https://opam.ocaml.org/1.1` will still work without problem.

* At some point we'll want to freeze 1.1 support anyway ; but stopping updates to opam.ocaml.org/1.1 won't solve this specific issue

## Remarks

  [TL;DR] some other solutions possible, but mostly: how important is OPAM 1.1 support at the moment ?

* An unpleasant, but reliable workaround could be to redirect the main repository to opam.ocaml.org/1.2 and serve a compatible repository at opam.ocaml.org/ . This may get misleading for users, and on the website.

* On a plus note, the "scary warnings" do mention upgrading OPAM.

* This raises the main question: how important is OPAM 1.1 support, how many users will encounter these issues, and when can we safely drop it ? I haven't heard many complaints, but the users hit by this aren't the most likely to give feedback (but maybe to turn around).

Sorry for this sad state of affairs, remarks welcome !


[1] https://github.com/ocaml/opam-repository/pull/3143
[2] http://opam.ocaml.org/doc/FAQ.html#Gaspopaminitgivesmescreensfullsoferrorsaboutupgrading
[3] http://opam.ocaml.org/doc/FAQ.html#OPAMfailstryingtoreinstallalreadyinstalledpackagesatfirstupgrade

More information about the opam-devel mailing list