Rewriting a famous library and using the same name: pros and cons
dons at galois.com
Tue Jun 8 11:08:29 EDT 2010
There have been a few cases of major API / rewrites to famous old
packages causing problems, including:
* QuickCheck 1 vs 2
* parsec 2 vs 3
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
* 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 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.
= Reasons to use the new 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.
= Reasons not to use the name =
* Code that depends on 'fgl' will break.
There are 23 direct and 25 indirect dependencies on fgl.
* 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.
Are there any other arguments I'm missing?
More information about the Libraries