[Haskell-cafe] Rewriting a famous library and using the same name: pros and cons

Don Stewart 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
    * OpenGL 

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 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.
       http://bifunctor.homelinux.net/~roel/cgi-bin/hackage-scripts/revdeps/fgl-5.4.2.2#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.


Are there any other arguments I'm missing?

-- Don


More information about the Haskell-Cafe mailing list