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 hellis a thing
cabalgets 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)
stackis born in private
- April 2014:
freezecommand (release notes]
- January 2015: The
cabal new-buildplan is formulated
- June 2015:
stackis released, essentially solving cabal hell and dependency problems forever
cabalis slowly absorbing features from downstream projects, but the really important ones (
new-buildetc) 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/ )