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 afreeze
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/ )