Commit 09ed13ab authored by Raja Boujbel's avatar Raja Boujbel
Browse files

opam import

parent 65b0fa9e
title=OPAM 1.0.0 released
authors=Thomas Gazagnaire
date=2013-03-15
category=Tooling
tags=opam
I am *very* happy to announce the first official release of OPAM!
Many of you already know and use OPAM so I won't be long. Please read
[http://www.ocamlpro.com/blog/2013/01/17/opam-beta.html][opam-beta] for a
longer description.
1.0.0 fixes many bugs and add few new features to the previously announced
beta-release.
The most visible new feature, which should be useful for beginners with
OCaml and OPAM, is an auto-configuration tool. This tool easily enables all
the features of OPAM (auto-completion, fix the loading of scripts for the
toplevel, opam-switch-eval alias, etc). This tool runs interactively on each
`opam init` invocation. If you don't like OPAM to change your configuration
files, use `opam init --no-setup`. If you trust the tool blindly, use
`opam init --auto-setup`. You can later review the setup by doing
`opam config setup --list` and call the tool again using `opam config setup`
(and you can of course manually edit your ~/.profile (or ~/.zshrc for zsh
users), ~/.ocamlinit and ~/.opam/opam-init/*).
Please report:
- Bug reports and feature requests for the OPAM tool: http://github.com/OCamlPro/opam/issues
- Packaging issues or requests for a new packages: http://github.com/OCamlPro/opam-repository/issues
- General queries to: http://lists.ocaml.org/listinfo/platform
- More specific queries about the internals of OPAM to: http://lists.ocaml.org/listinfo/opam-devel
## Install ##
Packages for Debian and OSX (at least homebrew) should follow shortly and
I'm looking for volunteers to create and maintain rpm packages. The binary
installer is up-to-date for Linux and Darwin 64-bit architectures, the
32-bit version for Linux should arrive shortly.
If you want to build from sources, the full archive (including dependencies)
is available here:
http://www.ocamlpro.com/pub/opam-full-latest.tar.gz
### Upgrade ###
If you are upgrading from 0.9.* you won't have anything special to do apart
installing the new binary. You can then update your package metadata by
running `opam update`. If you want to use the auto-setup feature, remove the
"eval `opam config env` line you have previously added in your ~/.profile
and run `opam config setup --all`.
So everything should be fine. But you never know ... so if something goes
horribly wrong in the upgrade process (of if your are upgrading from an old
version of OPAM) you can still trash your ~/.opam, manually remove what OPAM
added in your ~/.profile (~/.zshrc for zsh users) and ~/.ocamlinit, and
start again from scratch.
### Random stats ###
Great success on github. Thanks everybody for the great contributions!
https://github.com/OCamlPro/opam: +2000 commits, 26 contributors
https://github.com/OCamlPro/opam-repository: +1700 commits, 75 contributors, 370+ packages
on http://opam.ocamlpro.com/
+400 unique visitor per week, 15k 'opam update' per week
+1300 unique visitor per month, 55k 'opam update' per month
3815 unique visitor since the alpha release
### Changelog ###
The full change-log since the beta release in January:
1.0.0 \[Mar 2013\]
* Improve the lexer performance (thx to @oandrieu)
* Fix various typos (thx to @chaudhuri)
* Fix build issue (thx to @avsm)
0.9.6 \[Mar 2013\]
* Fix installation of pinned packages on BSD (thx to @smondet)
* Fix configuration for zsh users (thx to @AltGr)
* Fix loading of `~/.profile` when using dash (eg. in Debian/Ubuntu)
* Fix installation of packages with symbolic links (regression introduced in 0.9.5)
0.9.5 \[Mar 2013\]
* If necessary, apply patches and substitute files before removing a package
* Fix `opam remove <pkg> --keep-build-dir` keeps the folder if a source archive is extracted
* Add build and install rules using ocamlbuild to help distro packagers
* Support arbitrary level of nested subdirectories in packages repositories
* Add `opam config exec "CMD ARG1 ... ARGn" --switch=SWITCH` to execute a command in a subshell
* Improve the behaviour of `opam update` wrt. pinned packages
* Change the default external solver criteria (only useful if you have aspcud installed on your machine)
* Add support for global and user configuration for OPAM (`opam config setup`)
* Stop yelling when OPAM is not up-to-date
* Update or generate `~/.ocamlinit` when running `opam init`
* Fix tests on *BSD (thx Arnaud Degroote)
* Fix compilation for the source archive
0.9.4 \[Feb 2013\]
* Disable auto-removal of unused dependencies. This can now be enabled on-demand using `-a`
* Fix compilation and basic usage on Cygwin
* Fix BSD support (use `type` instead of `which` to detect existing commands)
* Add a way to tag external dependencies in OPAM files
* Better error messages when trying to upgrade pinned packages
* Display `depends` and `depopts` fields in `opam info`
* `opam info pkg.version` shows the metadata for this given package version
* Add missing `doc` fields in `.install` files
* `opam list` now only shows installable packages
0.9.3 \[Feb 2013\]
* Add system compiler constraints in OPAM files
* Better error messages in case of conflicts
* Cleaner API to install/uninstall packages
* On upgrade, OPAM now perform all the remove action first
* Use a cache for main storing OPAM metadata: this greatly speed-up OPAM invocations
* after an upgrade, propose to reinstall a pinned package only if there were some changes
* improvements to the solver heuristics
* better error messages on cyclic dependencies
0.9.2 \[Jan 2013\]
* Install all the API files
* Fix `opam repo remove repo-name`
* speed-up `opam config env`
* support for `opam-foo` scripts (which can be called using `opam foo`)
* 'opam update pinned-package' works
* Fix 'opam-mk-repo -a'
* Fix 'opam-mk-repo -i'
* clean-up pinned cache dir when a pinned package fails to install
0.9.1 \[Jan 2013\]
* Use ocaml-re 1.2.0
[opam-beta]: http://www.ocamlpro.com/blog/2013/01/17/opam-beta.html
title=OPAM 1.1.0 beta released
authors=Thomas Gazagnaire
date=2013-09-20
category=Tooling
tags=opam
We are very happy to announce the **beta release** of OPAM version 1.1.0!
OPAM is a source-based package manager for OCaml. It supports multiple
simultaneous compiler installations, flexible package constraints, and
a Git-friendly development workflow which. OPAM is edited and
maintained by OCamlPro, with continuous support from OCamlLabs and the
community at large (including its main industrial users such as
Jane-Street and Citrix).
Since its first official release [last March][1], we have fixed many
bugs and added lots of [new features and stability improvements][2]. New
features go from more metadata to the package and compiler
descriptions, to improved package pin workflow, through a much faster
update algorithm. The full changeset is included below.
We are also delighted to see the growing number of contributions from
the community to both OPAM itself (35 contributors) and to its
metadata repository (100+ contributors, 500+ unique packages, 1500+
packages). It is really great to also see alternative metadata
repositories appearing in the wild (see for instance the repositories
for [Android][3], [Windows][4] and [so on][5]). To be sure that the
community efforts will continue to benefit to everyone and to
underline our committment to OPAM, we are rehousing it at
`http://opam.ocaml.org` and switching the license to CC0 (see [issue #955][6],
where 85 people are commenting on the thread).
The binary installer has been updated for OSX and x86_64:
- http://www.ocamlpro.com/pub/opam_installer.sh
You can also get the new version either from Anil's unstable PPA:
add-apt-repository ppa:avsm/ppa-testing
apt-get update
sudo apt-get install opam
or build it from sources at :
- http://www.ocamlpro.com/pub/opam-full-1.1.0-beta.tar.gz
- https://github.com/OCamlPro/opam/releases/tag/1.1.0-beta
NOTE: If you upgrade from OPAM 1.0, the first time you will run the
new `opam` binary it will upgrade its internal state in an incompatible
way: THIS PROCESS CANNOT BE REVERTED. We have tried hard to make this
process fault-resistant, but failures might happen. In case you have
precious data in your `~/.opam` folder, it is advised to **backup that
folder before you upgrade to 1.1**.
[1]: http://www.ocamlpro.com/blog/2013/03/14/opam-1.0.0.html
[2]: https://github.com/OCamlPro/opam/issues?milestone=17&page=1&state=closed
[3]: https://github.com/vouillon/opam-android-repository
[4]: https://github.com/vouillon/opam-windows-repository
[5]: https://github.com/search?q=opam-repo&type=Repositories&ref=searchresults
[6]: https://github.com/OCamlPro/opam-repository/issues/955
## Changes ##
* Automatic backup before any operation which might alter the list of installed packages
* Support for arbitrary sub-directories for metadata repositories
* Lots of colors
* New option `opam update -u` equivalent to `opam update && opam upgrade --yes`
* New `opam-admin` tool, bundling the features of `opam-mk-repo` and
`opam-repo-check` + new 'opam-admin stats' tool
* New `available`: field in opam files, superseding `ocaml-version` and `os` fields
* Package names specified on the command-line are now understood
case-insensitively (#705)
* Fixed parsing of malformed opam files (#696)
* Fixed recompilation of a package when uninstalling its optional dependencies (#692)
* Added conditional post-messages support, to help users when a package fails to
install for a known reason (#662)
* Rewrite the code which updates pin et dev packages to be quicker and more reliable
* Add {opam,url,desc,files/} overlay for all packages
* `opam config env` now detects the current shell and outputs a sensible default if
no override is provided.
* Improve `opam pin` stability and start display information about dev revisions
* Add a new `man` field in `.install` files
* Support hierarchical installation in `.install` files
* Add a new `stublibs` field in `.install` files
* OPAM works even when the current directory has been deleted
* speed-up invocation of `opam config var VARIABLE` when variable is simple
(eg. `prefix`, `lib`, ...)
* `opam list` now display only the installed packages. Use `opam list -a` to get
the previous behavior.
* Inverse the depext tag selection (useful for `ocamlot`)
* Add a `--sexp` option to `opam config env` to load the configuration under emacs
* Purge `~/.opam/log` on each invocation of OPAM
* System compiler with versions such as `version+patches` are now handled as if this
was simply `version`
* New `OpamVCS` functor to generate OPAM backends
* More efficient `opam update`
* Switch license to LGPL with linking exception
* `opam search` now also searches through the tags
* minor API changes for `API.list` and `API.SWITCH.list`
* Improve the syntax of filters
* Add a `messages` field
* Add a `--jobs` command line option and add `%{jobs}%` to be used in OPAM files
* Various improvements in the solver heuristics
* By default, turn-on checking of certificates for downloaded dependency archives
* Check the md5sum of downloaded archives when compiling OPAM
* Improved `opam info` command (more information, non-zero error code when no patterns match)
* Display OS and OPAM version on internal errors to ease error reporting
* Fix `opam reinstall` when reinstalling a package wich is a dependency of installed packages
* Export and read `OPAMSWITCH` to be able to call OPAM in different switches
* `opam-client` can now be used in a toplevel
* `-n` now means `--no-setup` and not `--no-checksums` anymore
* Fix support of FreeBSD
* Fix installation of local compilers with local paths endings with `../ocaml/`
* Fix the contents of `~/.opam/opam-init/variable.sh` after a switch
title=OPAM 1.1.0 release candidate out
authors=Louis Gesbert
date=2013-10-14
category=Tooling
tags=opam
**OPAM 1.1.0 is ready**, and we are shipping a release candidate for
packagers and all interested to try it out.
This version features several bug-fixes over the September beta release, and
quite a few stability and usability improvements. Thanks to all beta-testers
who have taken the time to file reports, and helped a lot tackling the
remaining issues.
## Repository change to opam.ocaml.org
This release is synchronized with the migration of the main repository from
ocamlpro.com to ocaml.org. A redirection has been put in place, so that all
up-to-date installation of OPAM should be redirected seamlessly.
OPAM 1.0 instances will stay on the old repository, so that they won't be
broken by incompatible package updates.
We are very happy to see the impressive amount of contributions to the OPAM
repository, and this change, together with the licensing of all metadata under
CC0 (almost pubic domain), guarantees that these efforts belong to the
community.
# If you are upgrading from 1.0
The internal state will need to be upgraded at the first run of OPAM 1.1.0.
THIS PROCESS CANNOT BE REVERTED. We have tried hard to make it fault-
resistant, but failures might happen. In case you have precious data in your
`~/.opam folder`, it is advised to **backup that folder before you upgrade to 1.1.0**.
## Installing
Using the binary installer:
- download and run http://www.ocamlpro.com/pub/opam_installer.sh
You can also get the new version either from Anil's unstable PPA:
add-apt-repository ppa:avsm/ppa-testing
apt-get update
sudo apt-get install opam
or build it from sources at :
- http://www.ocamlpro.com/pub/opam-full-1.1.0.tar.gz
- https://github.com/OCamlPro/opam/releases/tag/1.1.0-RC
## Changes
Too many to list here, see
[https://raw.github.com/OCamlPro/opam/1.1.0-RC/CHANGES](https://raw.github.com/OCamlPro/opam/1.1.0-RC/CHANGES)
For packagers, some new fields have appeared in the OPAM description format:
- `depexts` provides facilities for dealing with system (non ocaml)
dependencies
- `messages`, `post-messages` can be used to notify the user or help her troubleshoot at package installation.
- `available` supersedes `ocaml-version` and `os` constraints, and can contain
more expressive formulas
title=OPAM 1.1.0 released
authors=Thomas Gazagnaire
date=2013-11-08
category=Tooling
tags=opam
After a while staged as RC, we are proud to announce the final release of
*OPAM 1.1.0*!
Thanks again to those who have helped testing and fixing the last few issues.
## Important note ##
The repository format has been improved with incompatible new features; to
account for this, the *new* repository is now hosted at [opam.ocaml.org][],
and the legacy repository at [opam.ocamlpro.com][] is kept to support OPAM
1.0 installations, but is unlikely to benefit from many package updates.
Migration to [opam.ocaml.org][] will be done automatically as soon as you
upgrade your OPAM version.
You're still free, of course, to use any third-party repositories instead or
in addition.
## Installing ##
NOTE: When switching from 1.0, the internal state will need to be upgraded.
THIS PROCESS CANNOT BE REVERTED. We have tried hard to make it fault-
resistant, but failures might happen. In case you have precious data in your
`~/.opam` folder, it is advised to **backup that folder before you upgrade
to 1.1.0**.
Using the binary installer:
- download and run http://www.ocamlpro.com/pub/opam_installer.sh
Using the .deb packages from Anil's PPA (binaries are [currently syncing][1]):
add-apt-repository ppa:avsm/ppa
apt-get update
sudo apt-get install opam
For OSX users, the homebrew package will be updated shortly.
or build it from sources at :
- http://www.ocamlpro.com/pub/opam-full-1.1.0.tar.gz
- https://github.com/ocaml/opam/releases/tag/1.1.0
## For those who haven't been paying attention ##
OPAM is a source-based package manager for OCaml. It supports multiple
simultaneous compiler installations, flexible package constraints, and
a Git-friendly development workflow. OPAM is edited and
maintained by OCamlPro, with continuous support from OCamlLabs and the
community at large (including its main industrial users such as
Jane-Street and Citrix).
The 'official' package repository is now hosted at [opam.ocaml.org][],
synchronised with the Git repository at
[http://github.com/ocaml/opam-repository][repo], where you can contribute
new packages descriptions. Those are under a CC0 license, a.k.a. public
domain, to ensure they will always belong to the community.
Thanks to all of you who have helped build this repository and made OPAM
such a success.
## Changes ##
Too many to list here, see
[https://raw.github.com/OCamlPro/opam/1.1.0/CHANGES](https://raw.github.com/OCamlPro/opam/1.1.0/CHANGES)
For packagers, some new fields have appeared in the OPAM description format:
- `depexts` provides facilities for dealing with system (non ocaml) dependencies
- `messages`, `post-messages` can be used to notify the user eg. of licensing information,
or help her troobleshoot at package installation.
- `available` supersedes `ocaml-version` and `os` constraints, and can contain
more expressive formulas
Also, we have integrated the main package repository with Travis, which will
help us to improve the quality of contributions (see [Anil's post][2]).
[opam.ocaml.org]: https://opam.ocaml.org
[opam.ocamlpro.com]: http://opam.ocamlpro.com
[repo]: http://github.com/ocaml/opam-repository
[1]: https://launchpad.net/~avsm/+archive/ppa/+builds?build_state=pending
[2]: http://anil.recoil.org/2013/09/30/travis-and-ocaml.html
title=OPAM 1.1.1 released
authors=Louis Gesbert
date=2014-01-29
category=Tooling
tags=opam
We are proud to announce that *OPAM 1.1.1* has just been released.
This minor release features mostly stability and UI/doc improvements over
OPAM 1.1.0, but also focuses on improving the API and tools to be a better
base for the platform (functions for `opam-doc`, interface with tools like
`opamfu` and `opam-installer`). Lots of bigger changes are in the works, and
will be merged progressively after this release.
## Installing ##
Installation instructions are available
[on the wiki](http://opam.ocaml.org/doc/Quick_Install.html).
Note that some packages may take a few days until they get out of the
pipeline. If you're eager to get 1.1.1, either use our
[binary installer](https://raw.github.com/ocaml/opam/master/shell/opam_installer.sh) or
[compile from source](https://github.com/ocaml/opam/releases/tag/1.1.1).
The 'official' package repository is now hosted at [opam.ocaml.org][],
synchronised with the Git repository at
[http://github.com/ocaml/opam-repository][repo],
where you can contribute new packages descriptions. Those are under a CC0
license, a.k.a. public domain, to ensure they will always belong to the
community.
Thanks to all of you who have helped build this repository and made OPAM
such a success.
## Changes ##
From the changelog:
* Fix `opam-admin make <packages> -r` (#990)
* Explicitly prettyprint list of lists, to fix `opam-admin depexts` (#997)
* Tell the user which fields is invalid in a configuration file (#1016)
* Add `OpamSolver.empty_universe` for flexible universe instantiation (#1033)
* Add `OpamFormula.eval_relop` and `OpamFormula.check_relop` (#1042)
* Change `OpamCompiler.compare` to match `Pervasives.compare` (#1042)
* Add `OpamCompiler.eval_relop` (#1042)
* Add `OpamPackage.Name.compare` (#1046)
* Add types `version_constraint` and `version_formula` to `OpamFormula` (#1046)
* Clearer command aliases. Made `info` an alias for `show` and added the alias
`uninstall` (#944)
* Fixed `opam init --root=<relative path>` (#1047)
* Display OS constraints in `opam info` (#1052)
* Add a new 'opam-installer' script to make `.install` files usable outside of opam (#1026)
* Add a `--resolve` option to `opam-admin make` that builds just the archives you need for a specific installation (#1031)
* Fixed handling of spaces in filenames in internal files (#1014)
* Replace calls to `which` by a more portable call (#1061)
* Fixed generation of the init scripts in some cases (#1011)
* Better reports on package patch errors (#987, #988)
* More accurate warnings for unknown package dependencies (#1079)
* Added `opam config report` to help with bug reports (#1034)
* Do not reinstall dev packages with `opam upgrade <pkg>` (#1001)
* Be more careful with `opam init` to a non-empty root directory (#974)
* Cleanup build-dir after successful compiler installation to save on space (#1006)
* Improved OSX compatibility in the external solver tools (#1074)
* Fixed messages printed on update that were plain wrong (#1030)
* Improved detection of meaningful changes from upstream packages to trigger recompilation
[opam.ocaml.org]: https://opam.ocaml.org
[repo]: http://github.com/ocaml/opam-repository
title=OPAM 1.2.0 public beta released
authors=OCaml Platform Team
date=2014-08-14
category=Tooling
tags=opam
It has only been 18 months since the first release of OPAM, but it is already
difficult to remember a time when we did OCaml development without it. OPAM
has helped bring together much of the open-source code in the OCaml community
under a single umbrella, making it easier to discover, depend on, and maintain
OCaml applications and libraries. We have seen steady growth in the number
of new packages, updates to existing code, and a diverse group of contributors.
<img src="img/graph_opam1.2_packages.png"/>
OPAM has turned out to be more than just another package manager. It is also
increasingly central to the demanding workflow of industrial OCaml development,
since it supports multiple simultaneous (patched) compiler installations,
sophisticated package version constraints that ensure statically-typed code can
be recompiled without conflict, and a distributed workflow that integrates
seamlessly with Git, Mercurial or Darcs version control. OPAM tracks multiple
revisions of a single package, thereby letting packages rely on older
interfaces if they need to for long-term support. It also supports multiple
package repositories, letting users blend the global stable package set with
their internal revisions, or building completely isolated package universes for
closed-source products.
Since its initial release, we have been learning from the extensive feedback
from our users about how they use these features as part of their day-to-day
workflows. Larger projects like [XenAPI][xapi], the [Ocsigen][] web suite,
and the [Mirage OS][mir-www] publish OPAM [remotes][opam-remote] that build
their particular software suites.
Complex applications such as the [Pfff][] static analysis tool and [Hack][]
language from Facebook, the [Frenetic][] SDN language and the [Arakoon][]
distributed key store have all appeared alongside these libraries.
[Jane Street](https://www.janestreet.com) pushes regular releases of their
production [Core/Async](http://janestreet.github.io/) suite every couple
of weeks.
One pleasant side-effect of the growing package database has been the
contribution of tools from the community that make the day-to-day use of OCaml
easier. These include the [utop][] interactive toplevel, the [IOCaml][]
browser notebook, and the [Merlin][] IDE extension. While these tools are an
essential first step, there's still some distance to go to make the OCaml
development experience feel fully integrated and polished.
Today, we are kicking off the next phase of evolution of OPAM and starting the
journey towards building an *OCaml Platform* that combines the OCaml compiler
toolchain with a coherent workflow for build, documentation, testing and IDE
integration. As always with OPAM, this effort has been a collaborative effort,
coordinated by the [OCaml Labs][ocl-www] group in Cambridge and
[OCamlPro][ocp-www] in France.
The OCaml Platform builds heavily on OPAM, since it forms the substrate that
pulls together the tools and facilitates a consistent development workflow.
We've therefore created this blog on [opam.ocaml.org][] to chart its progress,
announce major milestones, and eventually become a community repository of all
significant activity.
Major points:
* **OPAM 1.2 beta available**:
Firstly, we're announcing **the availability of the OPAM 1.2 beta**,
which includes a number of new features, hundreds of bug fixes, and pretty
new colours in the CLI. We really need your feedback to ensure a polished
release, so please do read the release notes below.
* In the coming weeks, we will provide an overview of what the OCaml Platform is
(and is not), and describe an example workflow that the Platform can enable.
* **Feedback**: If you have questions or comments as you read these posts,
then please do join the [platform@lists.ocaml.org][platform-list] and make
them known to us.
[xapi]: http://wiki.xen.org/wiki/XAPI
[Ocsigen]: http://ocsigen.org
[mir-www]: http://openmirage.org
[opam-remote]: https://opam.ocaml.org/doc/Advanced_Usage.html#Handlingofrepositories
[bunzli-remote]: http://erratique.ch/software/opam/unreleased/
[mottl-sw]: http://www.ocaml.info/software.html
[Pfff]: https://github.com/facebook/pfff/wiki/Main
[Hack]: https://code.facebook.com/posts/264544830379293/hack-a-new-programming-language-for-hhvm/
[Frenetic]: https://github.com/frenetic-lang/frenetic
[Arakoon]: http://arakoon.org
[utop]: https://github.com/diml/utop
[IOCaml]: https://github.com/andrewray/iocaml
[Merlin]: https://github.com/the-lambda-church/merlin
[ocl-www]: http://www.cl.cam.ac.uk/projects/ocamllabs/
[ocp-www]: http://www.ocamlpro.com
[opam.ocaml.org]: https://opam.ocaml.org
[platform-list]: http://lists.ocaml.org/listinfo/platform
## Releasing the OPAM 1.2 beta4
We are proud to announce the latest beta of OPAM 1.2. It comes packed with
[new features][gh-features-12], stability and usability improvements. Here the
highlights.
### Binary RPMs and DEBs!
We now have binary packages available for Fedora 19/20, CentOS 6/7, RHEL7,
Debian Wheezy and Ubuntu! You can see the full set at the [OpenSUSE Builder][suse] site and
[download instructions][suse-dl] for your particular platform.
An OPAM binary installation doesn't need OCaml to be installed on the system, so you
can initialize a fresh, modern version of OCaml on older systems without needing it
to be packaged there.
On CentOS 6 for example:
```
cd /etc/yum.repos.d/
wget http://download.opensuse.org/repositories/home:ocaml/CentOS_6/home:ocaml.repo
yum install opam
opam init --comp=4.01.0
```
[suse]: https://build.opensuse.org/package/show/home:ocaml/opam#
[suse-dl]: http://software.opensuse.org/download.html?project=home:ocaml&package=opam
### Simpler user workflow
For this version, we focused on improving the user interface and workflow. OPAM
is a complex piece of software that needs to handle complex development
situations. This implies things might go wrong, which is precisely when good
support and error messages are essential. OPAM 1.2 has much improved stability
and error handling: fewer errors and more helpful messages plus better state backups
when they happen.
In particular, a clear and meaningful explanation is extracted from the solver
whenever you are attempting an impossible action (unavailable package,
conflicts, etc.):
```
$ opam install mirage-www=0.3.0
The following dependencies couldn't be met:
- mirage-www -> cstruct < 0.6.0
- mirage-www -> mirage-fs >= 0.4.0 -> cstruct >= 0.6.0
Your request can't be satisfied:
- Conflicting version constraints for cstruct
```
This sets OPAM ahead of many other package managers in terms of