Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@parsonsmatt
Last active January 27, 2018 19:44
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parsonsmatt/0d75877ea14974647621b21f8492fb43 to your computer and use it in GitHub Desktop.
Save parsonsmatt/0d75877ea14974647621b21f8492fb43 to your computer and use it in GitHub Desktop.
stack timeline

fpco decided to do their own thing instead of contributing to that effort.

Your timeline is way off. The initial announcement for what would become Stackage was posted in 2012, a full three years before the post you linked was authored (and a year before Cabal got sandboxes!). The proposal blog post doesn't even mention diverging from cabal at all, and the official way to use stackage was through cabal sandboxes. The first public beta of stack was announced in June 2015, and according to the blog post, FPCo had been working on stack internally for about a year before that. If these timelines are to be believed, then stack was six months into internal production use while the cabal team was considering Nix-style builds (a feature that has landed, but is not yet the default workflow).

So, as I understand it, Cabal Hell was a pretty massive problem, and had been since at least 2011 (first mention I can find of it on Google, and the post indicates that it's been a problem for some time). The "stable vetted Hackage" post references a project called GPS Haskell, which was supposed to be the Cabal/GHC/etc. blessed system. Where's GPS Haskell? It never materialized. Why not? Possibly because Stackage filled the void so well.

From my conversations with FPCo folks, they did try to get these things upstreamed into Cabal, but these features weren't accepted. I do not remember why or any details, to be honest. I can understand why cabal-install wouldn't want scope expansion to manage GHC versions, snapshots, etc., and the general GHC/Cabal/Haskell mindset of "let's wait for the Right Decision before making a potentially wrong one now" is a Good Mindset -- it's how we got here, after all! stack itself sits nicely on top of Cabal as a convenience/opinionated project layer, and, at the very least, a test bed for experimental new features that might be upstreamed into cabal when it's clear that everyone wants them.

So, to recap my understanding of the timeline:

  • the beginning of time - 2011: cabal hell is a thing
  • 2012: stackage is born
  • 2013: cabal gets sandboxes, which technically fixes cabal hell, but these are not the default, leading to continued terrible UX for beginners (raise your hand if you were bitten as a newbie with this)
  • 2014: stack is born in private
  • April 2014: cabal gets a freeze command (release notes]
  • January 2015: The cabal new-build plan is formulated
  • June 2015: stack is released, essentially solving cabal hell and dependency problems forever
  • 2015-2017: cabal is slowly absorbing features from downstream projects, but the really important ones (new-build etc) still aren't the default, so the bad default workflow UX is still a problem.

(Copied from a reddit thread, with discussion: https://www.reddit.com/r/haskell/comments/7jlfi2/a_call_for_respect_by_spj/dr86y2z/ )

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment