I asked on the private PAUSE admin list for other admins to add their
opinion.  A couple replied privately on that list or don't subscribe to
CPAN workers. I have their permission to repost their comments here:

>From Steffen Mueller:
> I just read the cpan workers thread. My stance on this was very well
> articulated by David's message at
>
> https://www.nntp.perl.org/group/perl.cpan.workers/2017/10/msg1581.html
>
> Maybe I feel a tad more strongly. I think overwriting other
> distribution's files on the file system is a very heavy-handed solution
> to a more general problem (multi-versioning where not all versions are
> controlled by the same author, here with the limitation of only allowing
> one at a time). Next to all the corner cases already pointed out, I
> think there will be lots more that will particularly bite the less
> experienced users and sysadmins. The cost here outweighs the benefit by
> a mile.
>
> As PAUSE admins with a published operating model, I think we should be
> clear in that with explicit and specific user consent, this behavior is
> technically acceptable, but from a point of view of a group of people
> who've seen a lot of bad solutions, we should nonetheless discourage
> that choice of solution.
>
> I'm not currently subscribed to cpan workers and don't have an nntp
> client handy, so thus here. But you're all more than welcome to quote me
> with the above.

>From Ron Savage:
> From David's post (copied into here, hence wrap) with replies in situ:
> >My personal thoughts:
> > - The reason for the safe harbor clause in the first place was to allow
> > this sort of thing while putting appropriate protections in place for
end
> > users -- so I think the intent is clearly protected by the safe harbor
and
> > questions should focus only on mechanisms and transparency.
>
> Agreed.
>
> > - Per the "explicit user confirmation", I think an explicit opt-in must
> > be present, not merely checking for overwriting via hashing.  If
prompting
> > during Makefile.PL, I would prefer the default to be "no", but I don't
>
> Agreed.
>
> > think the safe harbor is violated if the default is "yes" (people who
> > auto-accept prompts get what they deserve).
>
> > - I would prefer checking for the presence of an environment variable
> > over prompting as that similarly indicates explicit confirmation and is
> > kinder to many poor users who auto-accept prompts -- or whose cpan
client
> > does so on their behalf.
>
> Agreed.
>
> > - I'd be happy to see a convention established checking for a particular
> > environment variable like "PERL_ALLOW_ALT_MODULES=1" that could apply
> > across many Alt-style modules.  A Makefile.PL prompt could default to
"yes"
> > if the environment variable is true..
>
> Agreed.
>
> > - I have no objection to "DBIx::Class::Boring" as a name.  I don't think
> > we should mandate a convention of "Alt::*".
>
> It would help of the Alt name chosen clearly indicated the target name,
> to make searching MetaCPAN less painful.



On Tue, Oct 31, 2017 at 9:33 AM, David Golden <x...@xdg.me> wrote:

> Let me be very clear that, to me, the issue at stake is about two (or
> more) distributions "fighting" over a particular path on the filesystem.
> My position -- consistent with that of the Operating Model -- is that this
> is not acceptable unless a user explicitly opts into such a situation in
> some way.  Period.
>
> There are other alt-module mechanisms that don't have that problem.
>
> Consider a Bar and Alt::Bar that install into their usual places in the
> filesystem.  Imagine a pragma "shadowing.pm" such that "use shadowing
> 'Bar' => 'Alt::Bar'" installs an @INC hook to replace the "Bar" prefix with
> "Alt::Bar".  I'd have no problem with such a runtime effect because Bar is
> still usable in it's ordinary form by anything that doesn't invoke the
> shadowing.
>
> I'd even be OK with a deep dependency invoking the shadowing -- a deep
> dependency could do anything, after all, and users are responsible for
> their full dependency tree (even if, in practice, people don't pay
> attention).
>
> From there, it's not hard to imagine that loading Alt::Bar *itself* does
> the shadowing, so that any subsequent loads of Bar::* are redirected to
> Alt::Bar::*.  As Bar is still usable independently, that doesn't run into
> the Operating Model prohibition.
>
> To justify why, recall that the prohibition is stated as "*installing* an
> indexed distribution.. should not change post-install module loading for
> any package that is not indexed to that distribution" [emphasis mine].
> Merely *installing* Alt::Bar does not change the loading of Bar.  The *use*
> of Alt::Bar does, but the Operating Model doesn't speak to that (nor do I
> think it should).
>
> There are other runtime mechanisms one could imagine along these lines.
> E.g. loading Alt::Bar could set $INC{"Bar.pm"}.  The design of such systems
> is left as an exercise for the reader.  :-)
>
> I'm curious what other PAUSE admins think, and I'm not telling Peter what
> he has to do -- only putting forward my view as one PAUSE admin.  In
> summary:
>
> * To qualify for the "safe harbor" protection when overwriting another
> indexed distributions files, I think an explicit user action to opt in is a
> requirement
> * I would prefer to see different approaches for Alt-* modules that don't
> involve battling over the filesystem in the first place
>
> David
>
>
> On Tue, Oct 31, 2017 at 5:40 AM, Sawyer X <xsawy...@gmail.com> wrote:
>
>> On 31 October 2017 at 05:39, Kent Fredric <kentfred...@gmail.com> wrote:
>> >
>> > On 31 October 2017 at 15:54, David Golden <x...@xdg.me> wrote:
>> > > On Mon, Oct 30, 2017 at 3:11 AM, Aristotle Pagaltzis <
>> pagalt...@gmx.de>
>> > > wrote:
>> > >>
>> > >> >    - Per the "explicit user confirmation", I think an explicit
>> opt-in
>> > >> >      must be present, not merely checking for overwriting via
>> hashing.
>> > >>
>> > >> I don’t think so, and think it’s fine to not require it. But you
>> didn’t
>> > >> state a reason why you think that so I don’t know whether I disagree
>> > >> with you.
>> > >
>> > >
>> > > Even if Peter's mechanism is in the spirit of the operating model, I
>> would
>> > > prefer the higher standard of "explicit confirmation" as the
>> operating model
>> > > call for.
>> > >
>> > > If you need a rationale -- practically speaking -- consider this
>> scenario:
>> > >
>> > > 1. User without DBIC or DBIC::Boring installs some module Foo that
>> depends
>> > > on DBIC::Boring; DBIC::Boring gets silently installed.
>> > > 2. User installs some module Bar that depends on DBIC; because DBIC
>> doesn't
>> > > check for conflicts with DBIC::Boring, it silently overwrites it.
>> > > 3. Foo is now broken.  User doesn't know why.
>> > >
>> > > Whereas if in #1, the user had to opt into DBIC::Boring, then they
>> would be
>> > > accepting the risk of future breakage from DBIC conflicts.
>> >
>> > I would expect based on the stability goals of DBIC::Boring, that this
>> > would mean the same kinds of breakages would be present for anyone who
>> > simply upgraded from an older version of DBIC to a newer version of
>> > DBIC
>> >
>> > And subsequently, that module Foo is broken with new version of DBIC
>> *anyway*
>> >
>> > Which means there is a logical problem in the ecosystem entirely
>> > independent of the existence of DBIC::Boring
>>
>>
>> I disagree for several reasons.
>>
>> Firstly, you *assume* that due to DBIC::Boring's goals, DBIC will
>> break by upgrading. DBIC might break future versions and might not.
>> This is an assumption on your behalf and ignored the problem itself.
>>
>> Additionally, this assumes that DBIC::Boring's goals (even if pursued
>> wholeheartedly and contain absolutely zero mistakes) would be the aim
>> (and success) of any other Alt::*, thus dismissing David's general
>> point, beyond DBIC::Boring.
>>
>> David gave a plausible situation in which package Foo could break due
>> to unknowingly depending on Alt::Bar instead of Bar, wherein Bar might
>> overwrite Alt::Bar. If you keep your position and assumptions on DBIC
>> or DBIC::Boring aside, this problem is quite clear. There is an
>> inherent problem for a user that does not explicitly know every
>> distribution in their application's chain of dependencies.
>>
>> Honestly, the only ways I can think of (off-hand) is either 1)
>> explicitly indicating "Yup, I know this. I'm okay with it. I'll take
>> care of it if it breaks," or 2) A mechanism that detects it and
>> reinstates Alt::Bar at the end; or 3) Bar knowing about Alt::Bar (and
>> Alt::Bar::ButBetter) and not overwrite them. The last is unlikely, the
>> first is more straightforward, and the second a long-term (but perhaps
>> fragile) possibility.
>>
>> You cannot dismiss this case, only figure out how to ease it.
>>
>
>
>
> --
> David Golden <x...@xdg.me> Twitter/IRC/GitHub: @xdg
>



-- 
David Golden <x...@xdg.me> Twitter/IRC/GitHub: @xdg

Reply via email to