There have been a few cases of major API changes / rewrites to famous old packages causing problems, including:
- QuickCheck 1 vs 2
- parsec 2 vs 3
- Haxml 1.13,1.19
a similar opportunity is present with 'fgl', where the new maintainers are seeking to improve the code.
Below I try to summarise the pros and cons of calling the new rewrite/api 'fgl', in the hope we can identify a path that minimizes disruption to users.
A group of developers is planning to write a new graph library for Haskell.
- They maintain an existing package called 'fgl'.
- 'fgl' has a long history: http://web.engr.oregonstate.edu/~erwig/fgl/
- The new library will have different authors and a different API.
- They would like to call the new library 'fgl'.
It is a controversial step to write a new library and give it the same name as an existing, famous library. Let's look at the arguments.
1 Reasons to use the old name
- The new code will be better, and should be preferred. Using the name 'fgl' will ensure adoption.
- Rewrites are effective if the name is preserved. E.g. QuickCheck 2.
- It is the maintainer's right to modify APIs as they see fit.
- Keeping the old fgl around as a separate package, there is then no real incentive to change/upgrade.
- Relatively few packages use fgl. So damage is limited.
- It makes development by new users simpler by not fracturing the
package-space (the "Which version of QuickCheck should I use?" problem).
- It decreases the maintainer workload as the same person or team will
often be responsible for both packages.
2 Reasons not to use the name
- Code that depends on 'fgl' will break. There are 23 direct and 25 indirect dependencies on fgl. http://bifunctor.homelinux.net/~roel/cgi-bin/hackage-scripts/revdeps/fgl-126.96.36.199#direct
- Doesn't matter if the old fgl is still around. If the new code is
better, it will be adopted on its own merits (see e.g. bytestrings vs packedstring, vector vs uvector) Let the market decide if it is better, rather than forcing us.
- The package has been stable for ~10 years -- why change a stable API? It is already "perfect"
- The new package really isn't the same package in any sense.
- Rewrites by new teams damage the brand of famous packages (e.g. parsec 3)
- No additional breakages are introduced.
- If you weren't maintainer of 'fgl' this rewrite wouldn't even be possible to call 'fgl' -- there's a conflict of interest.
- Maintaining Haskell98 compatability. Keep it simple. (See regex-posix's mistakes here)
- Distros that support the Haskell Platform will have to keep an old version of fgl around for a long time anyway.
- The original author might not approve of the use of the name.
- having tutorials not work for later revisions is more confusing than having various packages doing the same thing.
- separate names (both for the package name and module name-space) is that its easier to have both packages installed at the same time