I have read most of the draft documents, and one overall idea bothers me. I feel like, as a library author, including my library in the Platform would be like abandoning it in the hands of a community, losing control over it. After thinking quite a lot about this today and this evening, I think most of my feeling boils down to C4.
Honestly, I do not like C4. C4 basically forbids code review by design. Yes, you have to provide a “correct” patch, and that implies adhering to coding style, passing tests, etc. But it gives no room for deep reviews to discuss and improve the design of a patch. According to C4, if a patch satisfies its mathematical criteria, it SHALL be merged, and rapidly to boot. Quoting from Section 2.4:
.15. Maintainers SHALL NOT make value judgments on correct patches.
.16. Maintainers SHALL merge correct patches from other Contributors rapidly.
These two bullets, by definition, go against deep reviews.
C4 also overall removes any notion of a library author, which leads to the feeling that you are abandoning your library to the system. And C4 effectively removes all control from the hands of a library author. Instead, it puts the control in the hands of contributors (not even maintainers).
C4 might work for ZeroMQ. It might even work for lots of different projects. I do not think it will work for most Scala libraries. Why? Because API design in Scala is hard. We can achieve amazing library APIs in Scala thanks to its power, but this requires careful thought. Not uncontrolled patch “wars”. Design is hard precisely because we have so much power and so many ways to address a concern; finding the right one takes thought and discussion. Moreover, binary compatibility is hard; designing an API addition in a way that it will be able to evolve in source and binary compatible ways later is hard. If something is merged without thinking it through, there is a risk that we are stuck with designs we cannot evolve.
To be completely honest, if C4 is imposed on my library the minute it enters the Platform, I will be more than happy to keep my libraries out of it. Maybe I’m the only one who feels that way, and then it doesn’t matter. But if several library authors voice the same concern, there might be something to change.
How to fix?
I strongly suggest that the Process not impose C4 on all libraries of the platform. Library “founders” (authors) should have the choice regarding the kind of development process they want for their libraries. If they have made it so far, there’s a good chance they know what they’re doing and want to keep it that way. The Process could suggest C4 as a default choice for authors without a strong opinion.
None of what I have read in the draft documents suggests that C4 is necessary for high-level goals of the Platform, so dropping this restriction should be fine, AFAICT. I think this would make the Platform Process much more friendly to library authors.