<div dir="ltr">I really love Qt versioning scheme when applied to compatibility [1].<div><br></div><div>Given version is Major.Minor.Patch:<br><div><br></div><div><div>Major releases may break backwards binary and source compatibility, although source compatibility may be maintained.</div><div>Minor releases are backwards binary and source compatible.</div><div>Patch releases are both backwards and forwards binary and source compatible.</div><div><br></div><div>So that you know your package will work with any Qt version that has the same major version and minor version is greater-equal to the one you developed your package with. It would be really great if everyone followed this scheme.</div><div><br></div><div>As a drawback I can note that this requires strict discipline from a library developer. It's also harder to get binary compatibility right for Haskell because of cross-module optimization GHC does.</div><div><br></div><div>[1] <a href="https://wiki.qt.io/Qt-Version-Compatibility">https://wiki.qt.io/Qt-Version-Compatibility</a></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Apr 9, 2015 at 7:44 PM, Patrick Redmond <span dir="ltr"><<a href="mailto:plredmond@gmail.com" target="_blank">plredmond@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Since learning Haskell I've had the pleasure of finding my way out of a cabal hell or two. I've developed some knowledge to cope with it [1], but mostly concluded that if I can avoid burdening my projects with dependencies that have many of their own dependencies, then cabal hell can be averted. This puts somewhat of a damper on the joy of haskell's composability.<div><br></div><div>With the new release of GHC I've observed a flurry of discussion on haskell mailing lists and from Linux distro maintainers about all the fixing and patching required to keep the haskell ecosystem going.</div><div><br></div><div>Meanwhile I've learned other languages and used other tools that don't seem to have this problem that haskell does. For example, in the elm-lang community the package management tool enforces strict api-versioning, and in the clojure ecosystem people talk about "repeatability" and achieve it by using mostly exact-version requirements, even including the language (the language version is a dependency of a project, rather than a constraint of the environment).</div><div></div><div><br></div><div>I guess I'm wondering why we don't try something simpler to solve the haskell cabal hell problem. How about using minimum version dependencies only, not ranges, since we can't accurately guess about the future compatibility of our projects. How about automatic api-versioning of our projects to give the version numbers some rigid semantics with regard to package compatibility?</div><div><div><br></div><div>[1] <a href="http://f06code.com/post/90205977959/cabal-usage-notes" target="_blank">http://f06code.com/post/90205977959/cabal-usage-notes</a></div></div>
<br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br></div>