Contribution vs quality, and a few notes on the Platform process

Folks, I'm going to change the naming of functions in the text API to match base within the next few days, but for me this has been a close-run decision: I've come very nearly as close to simply asking for the text proposal to be withdrawn. This has been the first time in my many years of participation in the Haskell community of finding the experience thoroughly and persistently unpleasant. My reason for choosing to change the names is in part a nod of respect to Ian and Ross, whose opinions and contributions I value. I continue to disagree with their conclusion about naming, but I understand their reasoning behind it. I also want to make the volunteering jobs of Duncan, Don, and the other HP folks less onerous, as the success of their work is very important to me, and we owe them a debt of gratitude for their work. I feel a strong sense of obligation to all of these people. Now why, with all that noble sentiment expressed, would I have so strongly considered walking away over such an apparently minor point as the names of a few functions? Put it down to a matter of pride and proportion. Tom's original text library was about 1,700 lines in length. When Duncan handed it over to me, it was 2,200. It's now 12,300 lines long. I also spent three months writing a random number generator, a statistics library, and a benchmarking library in order to ensure the code was fast. And then there are the ICU bindings, for all the extra Unicode work that's simply too much to reimplement in native Haskell. Together, those libraries amount to an additional 11,300 lines of code. So. 23,600 lines of code, six BSD-licensed libraries, and months of work later, to be told repeatedly that my taste in function naming for a small portion of the API, no matter how clearly articulated, wasn't good enough has, well, not sat well with me. Sad to say, it is only by a hair's breadth that I feel like enough of a bigger man to push ahead. It has at times been difficult not to feel like I've laboured mightily over a large gift, only to have it shoved back in my face because the ribbons simply don't capture quite the right curl. Now that I've gotten that off my chest, I have some specific proposals to fix aspects of the Platform inclusion process that I found most painful. I would be most grateful to see these receive consideration. To begin with, active participation, moderation, and collation of data is important. The text proposal spawned some huge threads, but I felt that the HP team was largely absent through the many discussions, and after a while I had to simply give up tracking stuff by eyeball. Maybe I missed some things as a result; I don't know. - There must be a place for people to record issues, so we know which ones matter enough to track. Trac would work perfectly well for this. The order of operations should probably be for objectors to record their thoughts there, then for a moderator or the proposer to sort them out after a discussion period. (Obviously, in the case of text, naming looked like the squeaky wheel, but Ian raised a number of issues with bits of the internals, and I'm not sure I caught them all amid the torrent of email. And those were the ones that were actually unequivocally valuable, too!) - A moderator should keep the discussion from wandering too far off track. Things that I'd like to see as off limits would include discussion of whether some third party library needs tweaking, or an attempt to revive a contentious topic of discussion that has been resolved and should stay that way. - An Apache-style vote system for resolving points of disagreement, so that we can move past them reasonably swiftly instead of going in endless morale-sapping circles. This is particularly important to me. I'd really have liked to be able to say "we discussed this, it's over" about naming, but instead I feel that objectors held, in effect, a veto. The current consensus system seems to require complete agreement from all parties, which seems perverse. I am sad to say that I feel somewhat ill done by and upset as a result of this process, and it's not an experience I would rush to repeat. I wish you the best in improving it.

I didn't take part in the discussions, but I'd like to thank you for the work you've done. I am almost certain this will not make you feel better, but there is no way that renaming some functions will change the (huge) respect I've got for your efforts. On the contrary, your move to change the name against your wish is probably going to solve what was looking like an impasse, for that my respect grows even bigger. Again, thanks. David.

On 08/11/2010 10:06, Bryan O'Sullivan wrote:
* An Apache-style vote system for resolving points of disagreement, so that we can move past them reasonably swiftly instead of going in endless morale-sapping circles. This is particularly important to me. I'd really have liked to be able to say "we discussed this, it's over" about naming, but instead I feel that objectors held, in effect, a veto. The current consensus system seems to require complete agreement from all parties, which seems perverse.

As a spectator to this process, here are a few thoughts · Bryan deserves a huge vote of thanks for his work on the text library. Thank you Bryan! · The Haskell Platform group also deserve our thanks. Having a quality-controlled, consistent, easy-to-install bunch of libraries and tools is hugely important to the Haskell community. It’s also a bit of a thankless task, and we MUST NOT take their work for granted. Thank you HP team! · The fact that Bryan (and he is an easy-going man) feels bruised by the process is a clear sign that we need to fix something. We want library authors to feel affirmed, not hurt, by having their package in the HP · Happily, the something is quite fixable. It’s not as if there was a fundamental underlying divergence of goals. We all want the same thing – well-engineered libraries in the platform – and I think everyone involved in the discussion has been seeking that goal, even if it has not been experienced in that way. · As Don has said more than once, we don’t need perfection; indeed the best is the enemy of the good. We just need a process that reflects that belief. · We need to recognise and honour the fact that the author’s investment in the package (in terms of time and commitment) is two to four orders of magnitude larger than that of the reviewers. · Nevertheless, we also need a way in which people can make modest, constructive suggestions, such as naming issues, without that seeming trivial or critical, and without it derailing the whole exercise. So here are some suggestions. They are just my personal thoughts. I suggest dividing the process in two: · Step 1:is the package going in? And under what conditions? o The idea here is that the HP committee decides whether they want the package. But the decision should be of the form “Yes, if you change the exceptions to use the new exception API, no otherwise”. o That is, identify what concerns are sufficiently serious to keep the package out, and otherwise accept the package as-is, subject to Step 2. o This decision needs to be taken by a date that leaves enough time for Step 2 to take place. o In controversial cases this discussion might need a moderator, but I’m guessing that consensus would be the common case. · Step 2: refinement. o In Step 2 the HP committee, and anyone else, makes respectful suggestion to the author about things s/he might consider improving. o The author is in control of the debate. S/he may choose to adopt the suggestions or not. It’s a matter of honour that the author takes suggestions seriously, and responds thoughtfully even if s/he decides not to adopt them. o Moreover, the outcome of the discussion doesn’t affect the prior decision to accept. (Unless, I suppose, some major new issue comes to light.) o This provides a way for small constructive suggestions to be made, but still to have a way for the discussion to be brought to a conclusion, by the author. (Yes, that might lead to a package that not everyone is perfectly content with, because not all suggestions will be adopted. But it’s a million times better than no package. The best is the enemy of the good!) I think this kind of process would have made the text package much easier. As I read the discussion, Step 1 was slam-dunk (“yes, please”), and Bryan would have been happy to entertain suggestions. The bruising thing was, I believe, the element of conditionality -- unless we can agree on the name of this function, the package won’t be accepted – something no one really intended. Bryan: would this kind of two-step process have been easier for you? Simon From: libraries-bounces@haskell.org [mailto:libraries-bounces@haskell.org] On Behalf Of Bryan O'Sullivan Sent: 08 November 2010 08:07 To: libraries@haskell.org Subject: Contribution vs quality, and a few notes on the Platform process Folks, I'm going to change the naming of functions in the text API to match base within the next few days, but for me this has been a close-run decision: I've come very nearly as close to simply asking for the text proposal to be withdrawn. This has been the first time in my many years of participation in the Haskell community of finding the experience thoroughly and persistently unpleasant. My reason for choosing to change the names is in part a nod of respect to Ian and Ross, whose opinions and contributions I value. I continue to disagree with their conclusion about naming, but I understand their reasoning behind it. I also want to make the volunteering jobs of Duncan, Don, and the other HP folks less onerous, as the success of their work is very important to me, and we owe them a debt of gratitude for their work. I feel a strong sense of obligation to all of these people. Now why, with all that noble sentiment expressed, would I have so strongly considered walking away over such an apparently minor point as the names of a few functions? Put it down to a matter of pride and proportion. Tom's original text library was about 1,700 lines in length. When Duncan handed it over to me, it was 2,200. It's now 12,300 lines long. I also spent three months writing a random number generator, a statistics library, and a benchmarking library in order to ensure the code was fast. And then there are the ICU bindings, for all the extra Unicode work that's simply too much to reimplement in native Haskell. Together, those libraries amount to an additional 11,300 lines of code. So. 23,600 lines of code, six BSD-licensed libraries, and months of work later, to be told repeatedly that my taste in function naming for a small portion of the API, no matter how clearly articulated, wasn't good enough has, well, not sat well with me. Sad to say, it is only by a hair's breadth that I feel like enough of a bigger man to push ahead. It has at times been difficult not to feel like I've laboured mightily over a large gift, only to have it shoved back in my face because the ribbons simply don't capture quite the right curl. Now that I've gotten that off my chest, I have some specific proposals to fix aspects of the Platform inclusion process that I found most painful. I would be most grateful to see these receive consideration. To begin with, active participation, moderation, and collation of data is important. The text proposal spawned some huge threads, but I felt that the HP team was largely absent through the many discussions, and after a while I had to simply give up tracking stuff by eyeball. Maybe I missed some things as a result; I don't know. * There must be a place for people to record issues, so we know which ones matter enough to track. Trac would work perfectly well for this. The order of operations should probably be for objectors to record their thoughts there, then for a moderator or the proposer to sort them out after a discussion period. (Obviously, in the case of text, naming looked like the squeaky wheel, but Ian raised a number of issues with bits of the internals, and I'm not sure I caught them all amid the torrent of email. And those were the ones that were actually unequivocally valuable, too!) * A moderator should keep the discussion from wandering too far off track. Things that I'd like to see as off limits would include discussion of whether some third party library needs tweaking, or an attempt to revive a contentious topic of discussion that has been resolved and should stay that way. * An Apache-style vote system for resolving points of disagreement, so that we can move past them reasonably swiftly instead of going in endless morale-sapping circles. This is particularly important to me. I'd really have liked to be able to say "we discussed this, it's over" about naming, but instead I feel that objectors held, in effect, a veto. The current consensus system seems to require complete agreement from all parties, which seems perverse. I am sad to say that I feel somewhat ill done by and upset as a result of this process, and it's not an experience I would rush to repeat. I wish you the best in improving it.

I'm not sure what to put this thought in reply to, so I'll just put it here: One criticism that I feel I've seen a lot, about the standard libraries of many languages, is that they are inconsistent; e.g. this sort of thing, about Java: It’s also interesting to note that Hashtable, another important standard library class, does not have any final methods. As mentioned elsewhere in this book, it’s quite obvious that some classes were designed by completely different people than others. (Notice the brevity of the method names in Hashtable compared to those in Vector.) This is precisely the sort of thing that should not be obvious to consumers of a class library. When things are inconsistent it just makes more work for the user. Yet another paean to the value of design and code walkthroughs. (from the last paragraph of http://www.codeguru.com/java/tij/tij0071.shtml) My hope is that the Haskell Platform can avoid this, and therefore that we will use a process that helps us avoid it. Thanks Ian

On Mon, Nov 08, 2010 at 10:13:34PM +0000, Ian Lynagh wrote:
One criticism that I feel I've seen a lot, about the standard libraries of many languages, is that they are inconsistent; [...]
My hope is that the Haskell Platform can avoid this, and therefore that we will use a process that helps us avoid it.
That the process should address such concerns is a logical consequence of the current model of the Haskell Platform as a sort of standard, making choices on behalf of users. This model seems to be unworkable. An alternative model would be like a Linux distribution: a selection of package versions that have been tested to work together on different platforms. Packages would have to meet the package requirements listed on the AddingPackages page (all fairly objective), but would not have to have distinct functionality or meet any other subjective criterion. The test for inclusion (or retention) would be involve weighing the number of users of the package against its maintainance cost. That would be unlikely to produce consistency, but it seems more workable.

On 09/11/2010 01:16, Ross Paterson wrote:
On Mon, Nov 08, 2010 at 10:13:34PM +0000, Ian Lynagh wrote:
One criticism that I feel I've seen a lot, about the standard libraries of many languages, is that they are inconsistent; [...]
My hope is that the Haskell Platform can avoid this, and therefore that we will use a process that helps us avoid it.
That the process should address such concerns is a logical consequence of the current model of the Haskell Platform as a sort of standard, making choices on behalf of users. This model seems to be unworkable.
An alternative model would be like a Linux distribution: a selection of package versions that have been tested to work together on different platforms. Packages would have to meet the package requirements listed on the AddingPackages page (all fairly objective), but would not have to have distinct functionality or meet any other subjective criterion. The test for inclusion (or retention) would be involve weighing the number of users of the package against its maintainance cost.
That would be unlikely to produce consistency, but it seems more workable.
So the current situation is that anyone can nominate packages for inclusion in the platorm, which implies that the maintainer is not involved at all - the HP just decides whether or not to include the package in its current state. I'm wondering whether a better way to run the process is to have the maintainer more involed in the process of nomination. Instead of nominating a package for inclusion in the platform, a mainatiner would "donate" a package for inclusion. By doing so they would also be implicitly relinquishing some of the responsibilty for the design of the package to the community. This is the way I think the platform should work - it's not just a quality control on packages, but a process by which we build a sound baseline set of APIs for Haskell development. In order to do that, we need to have the community responsible for the whole of the platform, not just the entry bar. I admit that balancing the responsibilities of the maintainer with the demands of the community could be tricky. We don't want it to be a one-sided affair where the maintainer has to fix all the bugs while accommodating every demand from the community to change APIs. So presumably the expectation would be that the maintainer also devolves some of the responsibility for maintainership to the community too - there would be some benefit to being in the platform, more eyes on the code. This is moving in the opposite direction from what Ross suggests above - making the platform less of an aggregation mechanism and more of a single community project. Could it work? I'm not sure. Clearly Ross's model would "work", but it would produce something that's less like a platform. Cheers, Simon

Hi Simon The idea of "donation" and the author relinquishing some control would seem a good model for a "Secondary (Second?) Standard Library", but would it be rather onerous for the developers of something like HOpenGL? HOpenGL has value in the current Platform model as it can be difficult to build on certain platforms; but it is a very large work and quite domain-specific so it is not exemplary in API terms like a candidate for the Data.* or Control.* hierarchies should be. Best wishes Stephen

On Tue, Nov 09, 2010 at 11:45:51AM +0000, Stephen Tetley wrote:
HOpenGL has value in the current Platform model as it can be difficult to build on certain platforms; but it is a very large work and quite domain-specific so it is not exemplary in API terms like a candidate for the Data.* or Control.* hierarchies should be.
Based on this, it sounds like rather than HOpenGL being in the platform, there should be HOpenGL binary installers for certain platforms. Perhaps cabal-install would automatically use these installers rather than building from source. Although IIRC, the arguments for including HOpenGL were that it is widely useful and its API is exemplary. Thanks Ian

On 9 November 2010 19:41, Ian Lynagh
Based on this, it sounds like rather than HOpenGL being in the platform, there should be HOpenGL binary installers for certain platforms. Perhaps cabal-install would automatically use these installers rather than building from source.
Although IIRC, the arguments for including HOpenGL were that it is widely useful and its API is exemplary.
Apologies, I didn't mean HOpenGL wasn't "exemplary" in the sense of very high quality (I certainly regard it highly and used it as the model for the OpenVG binding). I was meaning that as a binding it naturally follows conventions of the library it binds to and so should be considered within that context. I'd be concerned that dropping HOpenGL from the platform would result in the Windows version getting out of the loop again, as it did when GHC stopped bundling it.

On Tue, Nov 09, 2010 at 11:18:37AM +0000, Simon Marlow wrote:
I'm wondering whether a better way to run the process is to have the maintainer more involed in the process of nomination. Instead of nominating a package for inclusion in the platform, a mainatiner would "donate" a package for inclusion. By doing so they would also be implicitly relinquishing some of the responsibilty for the design of the package to the community. This is the way I think the platform should work - it's not just a quality control on packages, but a process by which we build a sound baseline set of APIs for Haskell development. In order to do that, we need to have the community responsible for the whole of the platform, not just the entry bar.
What you're describing is approximately making packages subject to the libraries submission process. (Which is what I'm doing with the transformers package currently proposed for HP.) That could work to produce consistent APIs, but I can't see it being accepted as a condition for membership of the HP. Let's do both: - a set of packages under community control that we're trying to make consistent. - a set of package versions that are popular, meet objective standards and have been tested to build together. But let's not try to force these to be the same.

[Me late to the party as usual...]
On 9 November 2010 21:50, Ross Paterson
Let's do both: - a set of packages under community control that we're trying to make consistent. - a set of package versions that are popular, meet objective standards and have been tested to build together. But let's not try to force these to be the same.
I agree with Ross: and have been thinking the same lately that it would be really nice to have a midway between the strictness of HP and the fast flowing package stream of hackage. It would great to have a consistent large set of source packages brought together into one stable package repo - it would be big with 100s of packages but only one version of a package would be allowed and built on top of current HP which should be the base of course. Probably the main barrier to entry/updates would be not breaking or conflicting with any other package. Anyone interested in this? I think Linux distros and Haskell development would benefit greatly from such a large consistent collection of libraries, which could be updated in continuous rolling mode during the life-time of each HP release. There could also later be different streams (stable, testing, unstable, etc). Jens

On Tue, Nov 9, 2010 at 12:18 PM, Simon Marlow
I admit that balancing the responsibilities of the maintainer with the demands of the community could be tricky. We don't want it to be a one-sided affair where the maintainer has to fix all the bugs while accommodating every demand from the community to change APIs. So presumably the expectation would be that the maintainer also devolves some of the responsibility for maintainership to the community too - there would be some benefit to being in the platform, more eyes on the code.
Hi all,
Personally I would be fine with that, providing there was a plan towards a
community effort to improve the libraries we've *already approved*. To subject
maintainers of candidate libraries to the "scanning tunneling electron
microscope" while remaining oblivious to the huge usability/documentation
problems in our grandfathered libraries --- I'm looking at you, regex-*, HTTP,
old-*, QuickCheck, OpenGL, html, xhtml, pretty, etc --- isn't fair in the
slightest and is going to discourage people from submitting libraries in the
first place.
When a library is already several standard deviations above the average quality
level (like text clearly is), going over it with a fine-toothed comb and
engaging in endless rounds of proposals, counter-proposals, objections, +1s,
-1s, calls for consensus, etc. would be enough to cause even the most patient
of people to tear their hair out.
Re: improving those grandfathered libraries: I think we could probably agree
that we would like every platform library to have the following properties:
* continuous builds either with buildbot or something like hudson (a personal
fave)
* automated test suites with a high level of code coverage
* haddocks for every function, with clear examples, as well as some
"overview" text at the main haddock page as well as at the top of every
module containing:
- a description of what the library *does*
- clear and complete examples showing how it is intended to be used
"Check out this paper from 1997" doesn't cut it. Examples of this
phenomenon are easy to find, I found these in less than a minute of
searching:
- http://hackage.haskell.org/packages/archive/pretty/1.0.1.1/doc/html/Text-Pre...
- http://hackage.haskell.org/packages/archive/xhtml/3000.2.0.1/doc/html/Text-X...
- http://hackage.haskell.org/packages/archive/syb/0.1.0.2/doc/html/Data-Generi...
This is when libraries have any overview text *at all*. Examples of
libraries in the platform with *no* introductory documentation are easier
to find than those with good or even acceptable docs.
* sane APIs without gratuitous "typeclass abstraction explosion"
Maybe we should assemble a posse of volunteers, divide up the libraries, and
spend a few hours each adding this kind of documentary material to try to make
a real impact on the average quality level in the platform. The cynic in me,
however, suspects that the willingness to do this kind of grunt work is greatly
overshadowed by the appetite to engage in endless rounds of mailing list
bickering.
G.
--
Gregory Collins

On Nov 9, 2010, at 7:02 AM, Gregory Collins wrote:
Hi all,
Personally I would be fine with that, providing there was a plan towards a community effort to improve the libraries we've *already approved*. To subject maintainers of candidate libraries to the "scanning tunneling electron microscope" while remaining oblivious to the huge usability/documentation problems in our grandfathered libraries --- I'm looking at you, regex-*, HTTP, old-*, QuickCheck, OpenGL, html, xhtml, pretty, etc --- isn't fair in the slightest and is going to discourage people from submitting libraries in the first place.
...
Maybe we should assemble a posse of volunteers, divide up the libraries, and spend a few hours each adding this kind of documentary material to try to make a real impact on the average quality level in the platform. The cynic in me, however, suspects that the willingness to do this kind of grunt work is greatly overshadowed by the appetite to engage in endless rounds of mailing list bickering.
That sounds like a great idea! A weeklong(ish?) "documentation strike force". Step one, a good strong motivation, like here, but a bit more fleshed out, and sent to -cafe, via reddit as well, etc. Step two, clearance from maintainers of various packages for their willingness to accept and review significant documentation patches. (I'm sure it will be forthcoming, but it should help momentum to say that authors x, y, and z all give approval and support.) Step three, temporarily clone all the repos over to patch-tag, github, etc. Step four, a sign-up sheet/central wiki location for co-ordination. And then that should cover it? If something like this takes place, I'm definitely up for pitching in. Cheers, Sterl.

Sterling Clover wrote:
On Nov 9, 2010, at 7:02 AM, Gregory Collins wrote:
Hi all,
Personally I would be fine with that, providing there was a plan towards a community effort to improve the libraries we've *already approved*. To subject maintainers of candidate libraries to the "scanning tunneling electron microscope" while remaining oblivious to the huge usability/documentation problems in our grandfathered libraries --- I'm looking at you, regex-*, HTTP, old-*, QuickCheck, OpenGL, html, xhtml, pretty, etc --- isn't fair in the slightest and is going to discourage people from submitting libraries in the first place.
...
Maybe we should assemble a posse of volunteers, divide up the libraries, and spend a few hours each adding this kind of documentary material to try to make a real impact on the average quality level in the platform. The cynic in me, however, suspects that the willingness to do this kind of grunt work is greatly overshadowed by the appetite to engage in endless rounds of mailing list bickering.
That sounds like a great idea! A weeklong(ish?) "documentation strike force".
Step one, a good strong motivation, like here, but a bit more fleshed out, and sent to -cafe, via reddit as well, etc.
Step two, clearance from maintainers of various packages for their willingness to accept and review significant documentation patches. (I'm sure it will be forthcoming, but it should help momentum to say that authors x, y, and z all give approval and support.)
I'm the current maintainer of HTTP essentially by accident (previous maintainer dropped it, urgent changes needed for GHC compatibility), and I would like to get rid of it if anyone with more time and interest comes along. As such, I can't commit to properly reviewing documentation patches, but I would be happy to accept them without review in that case. However it seems to me that with all these grandfathered packages, the API is potentially rather more of an issue than the documentation, and updating that could be rather more disruptive and painful. Ganesh =============================================================================== Please access the attached hyperlink for an important electronic communications disclaimer: http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html ===============================================================================

On 9 November 2010 12:02, Gregory Collins
On Tue, Nov 9, 2010 at 12:18 PM, Simon Marlow
wrote: I admit that balancing the responsibilities of the maintainer with the demands of the community could be tricky. We don't want it to be a one-sided affair where the maintainer has to fix all the bugs while accommodating every demand from the community to change APIs. So presumably the expectation would be that the maintainer also devolves some of the responsibility for maintainership to the community too - there would be some benefit to being in the platform, more eyes on the code.
Hi all,
Personally I would be fine with that, providing there was a plan towards a community effort to improve the libraries we've *already approved*.
Absolutely. We need to work on how to do this, checking what areas are not up to scratch, defining what "up to scratch" means.
To subject maintainers of candidate libraries to the "scanning tunneling electron microscope" while remaining oblivious to the huge usability/documentation problems in our grandfathered libraries --- I'm looking at you, regex-*, HTTP, old-*, QuickCheck, OpenGL, html, xhtml, pretty, etc --- isn't fair in the slightest and is going to discourage people from submitting libraries in the first place.
Yes. It is a fair criticism and the solution is to improve the existing libs. A combination of individual package maintainers and teams that work across multiple packages might work.
When a library is already several standard deviations above the average quality level (like text clearly is), going over it with a fine-toothed comb and engaging in endless rounds of proposals, counter-proposals, objections, +1s, -1s, calls for consensus, etc. would be enough to cause even the most patient of people to tear their hair out.
Though one outcome of these discussions is to establish what standards and principles the community thinks are important. It should also embarrass us into applying the same standards to the existing libs. We deliberately avoided having a long abstract discussion about standards before getting on with the first proposals, which had the downside that we've been working on both simultaneously for the first reviews. The steering committee has also been a bit derelict (mea culpa). Hopefully with some tweaks things will be smoother in future.
Re: improving those grandfathered libraries: I think we could probably agree that we would like every platform library to have the following properties:
* continuous builds either with buildbot or something like hudson (a personal fave)
Yep, or if the hackage-server / cabal-install build bot system works soon enough then we can use that. We were working on that at the hackathon the other day. We could use this system before we do the switchover of the main hackage.haskell.org site, indeed we want to use a separate testing server instance anyway.
* automated test suites with a high level of code coverage
Cabal-1.10 now has support for testsuites. We need to add hackage reporting and an HPC coverage feature.
* haddocks for every function, with clear examples, as well as some "overview" text at the main haddock page as well as at the top of every module containing:
[snip] Agreed.
* sane APIs without gratuitous "typeclass abstraction explosion"
Maybe we should assemble a posse of volunteers, divide up the libraries, and spend a few hours each adding this kind of documentary material to try to make a real impact on the average quality level in the platform.
Yep. It helps enormously to know you're working in a team on this kind of thing.
The cynic in me, however, suspects that the willingness to do this kind of grunt work is greatly overshadowed by the appetite to engage in endless rounds of mailing list bickering.
Don started on it the other day at the hackathon. Duncan

On 11/9/10 7:02 AM, Gregory Collins wrote:
Maybe we should assemble a posse of volunteers, divide up the libraries, and spend a few hours each adding this kind of documentary material to try to make a real impact on the average quality level in the platform.
Perhaps we could make use of the haskellers.com SIG model to set this up and popularize it.
The cynic in me, however, suspects that the willingness to do this kind of grunt work is greatly overshadowed by the appetite to engage in endless rounds of mailing list bickering.
Methinks going with a SIG (with an associated hackathon) would help overcome the intertia. Because, really, that's what it is. With large community projects I've found that whatever the level of documentation and testing is, people tend to roll along with it (with some energy lost to friction :) Which means that things only really become a problem when there gets to be little/no documentation. Bodies at rest; bodies in motion. Certainly I've felt that packages like containers are effectively static rather than under _active_ maintenance and open to user contributions (the recent optimizations being the exception to prove the rule). -- Live well, ~wren

On Tue, Nov 9, 2010 at 1:18 PM, Simon Marlow
So the current situation is that anyone can nominate packages for inclusion in the platorm, which implies that the maintainer is not involved at all - the HP just decides whether or not to include the package in its current state.
Trac is not working at the moment but I believe we require the maintainer's approval before submission. Johan

On Tue, Nov 09, 2010 at 11:18:37AM +0000, Simon Marlow wrote:
This is moving in the opposite direction from what Ross suggests above - making the platform less of an aggregation mechanism and more of a single community project. Could it work? I'm not sure. Clearly Ross's model would "work", but it would produce something that's less like a platform.
Steering committee, I think we need to resolve this question before we can make progress. How should we proceed? Also, is there a better list than haskell-platform@projects for communicating with the steering committee? I don't see any addresses on the committee list page: http://trac.haskell.org/haskell-platform/wiki/Members By the way, I see Don Stewart is now listed as a steering committee member; was that announced somewhere? Thanks Ian

igloo:
On Tue, Nov 09, 2010 at 11:18:37AM +0000, Simon Marlow wrote:
This is moving in the opposite direction from what Ross suggests above - making the platform less of an aggregation mechanism and more of a single community project. Could it work? I'm not sure. Clearly Ross's model would "work", but it would produce something that's less like a platform.
Steering committee, I think we need to resolve this question before we can make progress. How should we proceed?
Also, is there a better list than haskell-platform@projects for communicating with the steering committee? I don't see any addresses on the committee list page: http://trac.haskell.org/haskell-platform/wiki/Members
What is the question? I don't think libraries@ has a mandate to change the current HP goals or process, for example, so I'm unclear what exactly is being proposed. -- Don

On Thu, Nov 11, 2010 at 08:35:29AM -0800, Donald Bruce Stewart wrote:
igloo:
On Tue, Nov 09, 2010 at 11:18:37AM +0000, Simon Marlow wrote:
This is moving in the opposite direction from what Ross suggests above - making the platform less of an aggregation mechanism and more of a single community project. Could it work? I'm not sure. Clearly Ross's model would "work", but it would produce something that's less like a platform.
Steering committee, I think we need to resolve this question before we can make progress. How should we proceed?
What is the question?
Should the HP attempt to provide: A set of packages that are popular and meet certain quality standards or: A set of packages that are popular, meet certain quality standards and have a consistent API ?
I don't think libraries@ has a mandate to change the current HP goals
Surely someone must have a mandate to change them? Also, what is the current goal? I thought it was the second one, but I don't know whether or not I am in a minority. Thanks Ian

igloo:
Steering committee, I think we need to resolve this question before we can make progress. How should we proceed?
What is the question?
Should the HP attempt to provide:
A set of packages that are popular and meet certain quality standards
or:
A set of packages that are popular, meet certain quality standards and have a consistent API
?
I don't think libraries@ has a mandate to change the current HP goals
Surely someone must have a mandate to change them?
It was unclear to me what goals of the HP were being suggested to change. It appears that the mission of the HP is not in question here, which was my concern.
Also, what is the current goal? I thought it was the second one, but I don't know whether or not I am in a minority.
The goals are, as stated in the original position statement by me and Duncan: "a complete Haskell development environment, batteries included." More specifically (from "Haskell: Batteries Included"), the project should produce: * high quality libraries. * commonly-needed functionality * convenient packaging for many operating systems * a set of clear criteria for when packages are accepted So this proposal would be to determine to what extent a "consistent API" is one of the criteria. Now, "consistent APIs" seems desirable, although maintainers have full rights to modify the APIs as they see fit, as long as they follow the PVP (once their package is included). That suggests to me that we may only recommend APIs guidelines -- not require them. -- Don

On 11 November 2010 17:40, Ian Lynagh
Should the HP attempt to provide:
A set of packages that are popular and meet certain quality standards
or:
A set of packages that are popular, meet certain quality standards and have a consistent API
?
"has a consistent API" is a level of detail of package requirements that is not specified in the overall HP goals. When the HP steering committee set up the procedure for adding packages we discussed how we would agree what standards should be required. We discussed trying to work them out in detail beforehand so that reviewers would just go through a checklist. We decided just to set up a list of what we felt were minimal and non-controversial requirements. For more detailed requirements we decided to take the approach of doing some actual reviews to help us work out what these standards ought to be (we feared that discussing standards in a vacuum would not necessarily lead to good decisions and would block proposals in the mean time). http://trac.haskell.org/haskell-platform/wiki/AddingPackages#Packagerequirem... Note in particular that the section says: It is expected that the list of requirements will be adjusted over time by further agreement of the libraries list. So certainly, the libraries list can and should discuss and agree on standards / guidelines for HP packages. The HP steering committee probably ought to take the initiative and kick off such discussions about specific proposed standards/guidelines, but in principle anyone can do it (we've had some good suggestions in these recent threads about documentation standards). We can then record the decisions in the page above and package authors/proposers can take them into account when preparing packages and proposals for inclusion. BTW, as for whether they are requirements or guidelines, the policy page above states: Every package should fulfil the following requirements. Any requirements that are not met must be clearly explained and justified in the proposal. It is then left up to the reviewers. Duncan

On 11 November 2010 16:21, Ian Lynagh
Also, is there a better list than haskell-platform@projects for communicating with the steering committee? I don't see any addresses on the committee list page: http://trac.haskell.org/haskell-platform/wiki/Members
We could do with setting up some sensible email alias for the group. Perhaps you can help us with that Ian. Re the idea of a committee chair, I'm happy to suggest that to the committee. Duncan

On Thu, Nov 11, 2010 at 10:15:46PM +0000, Duncan Coutts wrote:
On 11 November 2010 16:21, Ian Lynagh
wrote: Also, is there a better list than haskell-platform@projects for communicating with the steering committee? I don't see any addresses on the committee list page: http://trac.haskell.org/haskell-platform/wiki/Members
We could do with setting up some sensible email alias for the group. Perhaps you can help us with that Ian.
This should go to the steering committee now: haskell-platform@community.haskell.org Thanks Ian

On 11/12/10 18:57, Ian Lynagh wrote:
On Thu, Nov 11, 2010 at 10:15:46PM +0000, Duncan Coutts wrote:
On 11 November 2010 16:21, Ian Lynagh
wrote: Also, is there a better list than haskell-platform@projects for communicating with the steering committee? I don't see any addresses on the committee list page: http://trac.haskell.org/haskell-platform/wiki/Members
We could do with setting up some sensible email alias for the group. Perhaps you can help us with that Ian.
This should go to the steering committee now: haskell-platform@community.haskell.org
Is mail that goes to that address publicly archived? If not, it should be an intentional choice, not accidental (I currently lean towards everything public/archived by default). -Isaac

On 09/11/2010 00:13, Ian Lynagh wrote:
I'm not sure what to put this thought in reply to, so I'll just put it here:
One criticism that I feel I've seen a lot, about the standard libraries of many languages, is that they are inconsistent; e.g. this sort of thing, about Java:
It’s also interesting to note that Hashtable, another important standard library class, does not have any final methods. As mentioned elsewhere in this book, it’s quite obvious that some classes were designed by completely different people than others. (Notice the brevity of the method names in Hashtable compared to those in Vector.) This is precisely the sort of thing that should not be obvious to consumers of a class library. When things are inconsistent it just makes more work for the user. Yet another paean to the value of design and code walkthroughs.
Haskell is much better in this regard. We do not need to compare different classes to find inconsistencies; the Monoid class was named by category theorists, but its functions were named by people who consider all data to be lists.

On the process points...
On 8 November 2010 08:06, Bryan O'Sullivan
Now that I've gotten that off my chest, I have some specific proposals to fix aspects of the Platform inclusion process that I found most painful. I would be most grateful to see these receive consideration.
To begin with, active participation, moderation, and collation of data is important. The text proposal spawned some huge threads, but I felt that the HP team was largely absent through the many discussions, and after a while I had to simply give up tracking stuff by eyeball. Maybe I missed some things as a result; I don't know.
There must be a place for people to record issues, so we know which ones matter enough to track. Trac would work perfectly well for this. The order of operations should probably be for objectors to record their thoughts there, then for a moderator or the proposer to sort them out after a discussion period. (Obviously, in the case of text, naming looked like the squeaky wheel, but Ian raised a number of issues with bits of the internals, and I'm not sure I caught them all amid the torrent of email. And those were the ones that were actually unequivocally valuable, too!)
A moderator should keep the discussion from wandering too far off track. Things that I'd like to see as off limits would include discussion of whether some third party library needs tweaking, or an attempt to revive a contentious topic of discussion that has been resolved and should stay that way.
On the first two, I'm going to propose to the other steering committee members that for future proposals, a steering committee member is assigned for each proposal when it is first made. The purpose is to make clear which individual member is responsible for guiding each proposal and to stop us all from hiding behind "oh I thought you were going to do it" and "ah sorry I've been a bit busy". We would assign in a round-robin fashion (with the ability to skip over if someone is temporarily very busy or if the person is actually one of the proposers).
An Apache-style vote system for resolving points of disagreement, so that we can move past them reasonably swiftly instead of going in endless morale-sapping circles. This is particularly important to me. I'd really have liked to be able to say "we discussed this, it's over" about naming, but instead I feel that objectors held, in effect, a veto. The current consensus system seems to require complete agreement from all parties, which seems perverse.
I'll raise this with the steering committee. Voting is something we tried to avoid in the process when we first designed it, but the intention was always to see how things went and review. Voting may be a useful thing to bring in at some points if there's a clear case that some decision is better than no decision. If we decide to add this to the process my view would be that it should be only used occasionally for specific issues, perhaps issues of general principle rather than specific issues in a proposal (obviously Text brought up a couple of those). Duncan

On Mon, Nov 08, 2010 at 03:04:29PM +0000, Duncan Coutts wrote:
On the first two, I'm going to propose to the other steering committee members that for future proposals, a steering committee member is assigned for each proposal when it is first made.
I think this is a good idea. As they are more familiar with the process, and less involved in the issues, maybe they would also be better than the proposer at some of the things the proposer currently is meant to do, e.g. updating the proposal to record open issues.
I'll raise this with the steering committee. Voting is something we tried to avoid in the process when we first designed it, but the intention was always to see how things went and review. Voting may be a useful thing to bring in at some points if there's a clear case that some decision is better than no decision.
The call for censensus seemed to be more asking whether there was unanimous agreement, than whether consensus existed. I'm not sure an actual vote is a good idea, but we do need to get a number of opinions in order to determine what the censensus is when there is disagreement. Thanks Ian

On 11/8/10 10:04 AM, Duncan Coutts wrote:
On 8 November 2010 08:06, Bryan O'Sullivan
wrote: An Apache-style vote system for resolving points of disagreement, so that we can move past them reasonably swiftly instead of going in endless morale-sapping circles. This is particularly important to me. I'd really have liked to be able to say "we discussed this, it's over" about naming, but instead I feel that objectors held, in effect, a veto. The current consensus system seems to require complete agreement from all parties, which seems perverse.
I'll raise this with the steering committee. Voting is something we tried to avoid in the process when we first designed it, but the intention was always to see how things went and review. Voting may be a useful thing to bring in at some points if there's a clear case that some decision is better than no decision. If we decide to add this to the process my view would be that it should be only used occasionally for specific issues, perhaps issues of general principle rather than specific issues in a proposal (obviously Text brought up a couple of those).
I don't know much about Apache's system, but I think it would be good to have something like this considered as an informal show of hands, rather than as voting per se. (Perhaps my idea belongs more to the previous bullet point than this one.) There are good reasons to want to avoid voting, but I think a good deal of the repetition in discussing things was due to a lack of some more permanent means of people just specifying how they feel about some given topic. -- Live well, ~wren

On Mon, Nov 08, 2010 at 03:04:29PM +0000, Duncan Coutts wrote:
and to stop us all from hiding behind "oh I thought you were going to do it" and "ah sorry I've been a bit busy".
Someone asked me the other day what the role of the haskell.org committee chair is, and it struck me that what I see as the chair's roles (making sure things keep moving, and ensuring that all issues raised get resolved) are what was missing from the HP steering committee. What you've proposed is essentially that each addition proposal gets its own chair, and maybe that is enough, but I wonder if the HP SC should have a general chair too. The chair would ensure that someone realises that they're responsible for a particular issue, perhaps encourage people to make more proposals, start discussions like the Great Licence Debate, and so on. Thanks Ian

On 11/11/10 11:08, Ian Lynagh wrote:
On Mon, Nov 08, 2010 at 03:04:29PM +0000, Duncan Coutts wrote:
and to stop us all from hiding behind "oh I thought you were going to do it" and "ah sorry I've been a bit busy".
Someone asked me the other day what the role of the haskell.org committee chair is, and it struck me that what I see as the chair's roles (making sure things keep moving, and ensuring that all issues raised get resolved) are what was missing from the HP steering committee.
What you've proposed is essentially that each addition proposal gets its own chair, and maybe that is enough, but I wonder if the HP SC should have a general chair too. The chair would ensure that someone realises that they're responsible for a particular issue, perhaps encourage people to make more proposals, start discussions like the Great Licence Debate, and so on.
Yes, I think we should at least have a dispatcher who notices when a discussion is starting that needs a committee-member assigned to it, and enlists a committee-member (normally the next person on the queue). I'm indifferent whether the same person gets more responsibilities (it may depend on whether someone wants to volunteer to do that outreach). -Isaac
participants (17)
-
Bryan O'Sullivan
-
David Virebayre
-
Don Stewart
-
Duncan Coutts
-
Gregory Collins
-
Ian Lynagh
-
Isaac Dupree
-
Jens Petersen
-
Johan Tibell
-
John Smith
-
Ross Paterson
-
Simon Marlow
-
Simon Peyton-Jones
-
Sittampalam, Ganesh
-
Stephen Tetley
-
Sterling Clover
-
wren ng thornton