[Dbix-class] 2/5 Where I saw (and where I hope) the project going

Peter Rabbitson rabbit+dbic at rabbit.us
Tue Oct 11 17:22:49 GMT 2016


On 10/07/2016 08:40 PM, David Golden wrote:
>
> In particular, whether part of the plan or not, I think the community
> would benefit from hearing more detail on your thoughts for what a
> stable "freeze" would look like – what kinds of things should be allowed
> or not allowed to change, how to do QA, etc.

As I already mentioned in the "1/5 ..." email, what I was speaking of 
was an API freeze. This does not mean "no new features ever", instead it 
means "only features with no obvious downsides / obvious half-baked 
status". I do not see how could we possibly expend huge amount of energy 
on /usr/bin/perl remaining coherent across the board, yet be so eager to 
accept introduction and deletion of experiments in CPAN "crown jewels".

On what should and should not be allowed: if there was a way for me to 
distill this kind of "common sense" into a flowchart, we would not be 
having this conversation. The general rule of thumb is that "whatever 
can be done outside should be done outside". DBIC is a ridiculously 
flexible framework. And during my ownership of the project I stopped at 
nothing to preserve and enhance this flexibility. The calls to start 
merging ::Helpers and other pieces back into the DBIC core seem at best 
misguided to me, given the original point of the project was to be an 
"ORM building toolkit". Combined with the obvious deficiencies of parts 
of the core already (the entire ::Row/::RsrcProxy subsystem is a joke, 
as described in [1]), I quite frankly do not understand where many of 
the "moar features" and "moar API surface" voices in this thread are 
coming from.

It is true that *some* features require internal work to take place. 
This kind of internal work must be weighted against the risk to the 
existing user-base (to which user-base the project is forever beholden, 
first and foremost).

This kind of work also can not happen on a schedule, nor can it fall 
prey to "consensus", nor can be led by an "enthusiast" developer. As 
long as it remains in the same widely-used namespace, it can only be 
ready when it is ready, and nothing short of "the best we can do based 
on our state of the art knowledge".

As an example here is the evolution of the new (hopefully) upcoming 
resolve_relationship_condition() public method:

https://github.com/dbsrgits/dbix-class/commit/03f6d1f7b
https://github.com/dbsrgits/dbix-class/commit/a446d7f8f
https://github.com/dbsrgits/dbix-class/commit/1adbd3fc4
https://github.com/dbsrgits/dbix-class/commit/c2abfbbeb
https://github.com/dbsrgits/dbix-class/commit/5592d6332
https://github.com/dbsrgits/dbix-class/commit/83a6b2443
https://github.com/dbsrgits/dbix-class/commit/209a20649
https://github.com/dbsrgits/dbix-class/commit/350e8d57b
https://github.com/dbsrgits/dbix-class/commit/c19ca6e80
https://github.com/dbsrgits/dbix-class/commit/7cb7914bc
https://github.com/dbsrgits/dbix-class/commit/98def3efb
https://github.com/dbsrgits/dbix-class/commit/e884e5d9d
https://github.com/dbsrgits/dbix-class/commit/7967dcecd
https://github.com/dbsrgits/dbix-class/commit/c0f445097
https://github.com/dbsrgits/dbix-class/commit/e65228c03
https://github.com/dbsrgits/dbix-class/commit/7e5a0e7c2
https://github.com/dbsrgits/dbix-class/commit/7df2b5df3
https://github.com/dbsrgits/dbix-class/commit/21621fe45
https://github.com/dbsrgits/dbix-class/commit/c200d9497
https://github.com/dbsrgits/dbix-class/commit/e084cb2bc
https://github.com/dbsrgits/dbix-class/commit/4f8c96780
https://github.com/dbsrgits/dbix-class/commit/65abdb857
https://github.com/dbsrgits/dbix-class/commit/de54e8bd6
https://github.com/dbsrgits/dbix-class/commit/d8516e922
https://github.com/dbsrgits/dbix-class/commit/3aac91f35
https://github.com/dbsrgits/dbix-class/commit/786c1cdde
https://github.com/dbsrgits/dbix-class/commit/ea3ee77d2
https://github.com/dbsrgits/dbix-class/commit/a3ae79ed1
https://github.com/dbsrgits/dbix-class/commit/86be9bcb9
https://github.com/dbsrgits/dbix-class/commit/1bd54f3d4
https://github.com/dbsrgits/dbix-class/commit/e5c638290
https://github.com/dbsrgits/dbix-class/commit/7293955e1

The above is a *single* method being developed over ~2 years, with only 
the final commit being an invitation for others to "please try to use 
this thing". All of the changes were made based on self-feedback due to 
dogfooding and on smoking downstreams and performing some alpha-testing 
with select darkpan codebases.

This is the price of cohesion.

I strongly believe the attitudes of the 200x-era "throw it on CPAN and 
iterate until users stop complaining" are no longer an option today.

I hope that whoever (hopefully single person) takes the reins will 
continue this vision of not turning the project into an npm-distributed 
systemd-implementation.

> Particularly if there is a
> possibility of the namespace branching into "stable" and "ongoing
> development" parts (regardless of which side stays "DBIx::Class"), I
> think your views on how the stable branch ought to be managed would be
> valuable insight to whoever winds up managing it.

There is always a possibility. You (David) yourself advocated exactly 
this 6 month ago [2] for another project that subsequently drove off a 
cliff under very similar circumstances.

On whether one such "stable branch" would be needed: it would be strange 
for me to be educating the PAUSE admins on the fact that forks and 
index-pins do not work within the current CPAN infrastructure. You guys 
already know all of this, and what is at stake.

On how such a branch would be managed - I do not have a simple answer to 
this question. However see my other replies.

[1] 
https://blog.afoolishmanifesto.com/posts/open-source-infrastructure-and-dbix-class-diagnostics-improvements/#background:50782e73c9797a6438b7d24dbf6c56b7
[2] 
http://blogs.perl.org/users/chad_exodist_granum/2016/04/test2testbuilder-update-from-the-qah.html#comment-1702913



More information about the DBIx-Class mailing list