Once again, I would like to rein this all in.

Employing a counter-factual, the WORST CASE is that p5p has to ship a single
110K file which they never have to touch themselves.

I am unable to get excited over the consequences.

Let's keep our heads.  The whole argument against TB2::Mouse is predicated on
the idea that shipping TB2::Mouse in the core MIGHT cause future maintenance
hassle for p5p.  If the alternatives will cause EVEN MORE maintenance hassle
for p5p and/or CPAN authors... we should just ship TB2::Mouse.


On 2011.11.25 5:07 PM, David Golden wrote:
> On Fri, Nov 25, 2011 at 4:02 PM, Michael G Schwern <schw...@pobox.com> wrote:
>> Keeping this all in perspective, TB2::Mouse is one 110K file (compressed down
>> to 25K) with no POD.  It's part of the Test-Simple distribution.  p5p has to
>> do NO EXTRA WORK AT ALL to include or maintain it.  It just comes with
>> Test-Simple like any other .pm file in Test-Simple.
>>
>> If I didn't bring it up, nobody would know it was there.  Think about that.
> 
> That sounds oddly like "security through obscurity" except it's
> "compatibility through obscurity".  :-)  Someone always finds these
> things out and then relies on them and then claims the need for
> ongoing existence in core.

Obscurity, documentation (or lack thereof) and social contract is how Perl
enforces encapsulation.  Whether we like it or not.

    Perl doesn't have an infatuation with enforced privacy. It would
    prefer that you stayed out of its living room because you weren't
    invited, not because it has a shotgun”
        ―- Larry Wall

People can (and do) rely on internal code and then want us to maintain
compatibility.  At some point, project willpower to enforce encapsulation has
to win out.  I quote Tom...

    You are wicked and wrong to have broken inside and peeked at the
    implementation and then relied upon it.
        -- tchrist in <31832.969261130@chthon>

Some careful and B<VERY LOUD> documentation in TB2::Mouse can make this point
even more clear.  At some point, users take responsibility for ignoring the
clearly marked warning signs.
https://twimg0-a.akamaihd.net/profile_images/63014578/Crocodiles.jpg


> As the current maintainer of Parse::CPAN::Meta -- which *is* an exact
> copy of YAML::Tiny with a quick paint job (*cough* DZP::Doppelgaenger
> *cough*), I'm sensitized to the issues, that's all.

Roger.


>> The real problem is how does Test::More depend on a non-core CPAN module
>> without having a dependency on a non-core CPAN module?  One which uses
>> Test::More.  That problem always remains.  Test::More has it.  MakeMaker has
>> it.  And the simple answer is bundling.
> 
> I don't follow.

I was speaking to the suggestions to use Role::Tiny or Object::Tiny or
Role::Basic instead of a copy of Mouse::Tiny.  They all present the same
problem as TB2::Mouse.

But you bring up some other scenarios while I'll address...


> The only things that need to be in core (or need to
> be bundled with a CPAN release) are modules sufficient to get a CPAN
> client to deal with build_requires (and eventually test_requires).

...and the modules CPAN clients depend on.  Very important.

...and the dependencies for everything else we currently ship in core.  I
would so love if the "only stuff for CPAN" policy was real and retroactive,
but it is not.


> Test::Hoopy can depend on Test::More 2 and core can have Test::More
> 0.99 and CPAN clients will deal.  You've already talked about a non
> Test-More framework to test TB2, so you've already eliminated that
> element of bootstrapping.

Here's an example I hope will clarify.

1. CPAN-Meta's tests rely on Test::More. (they do)
2. CPAN-Meta is shipped with the core. (it is)
3. The next version of CPAN-Meta (knowingly or not) relies on a Test::More
1.5.x feature or bug fix in its tests.

In order to ship CPAN-Meta, p5p has these options...

1. The core ships with Test::More 1.5.x.
2. CPAN-Meta is forced to downgrade their tests to only use 0.9x features.
3a. CPAN-Meta is forced to downgrade their tests to only use t/test.pl
   and copy t/test.pl into their CPAN distribution.
3b. Same as 3a, but we fork t/test.pl and make it available is an
    independent test library... and then ship it with the core.
4. p5p maintains a patched version of CPAN-Meta.
5. p5p stops running CPAN-Meta's tests as part of the build process.

I think you'll agree, upgrading Test::More and accepting a single extra file
that requires no extra maintenance is the approach with the most flexibility
and least hassle for p5p and dual-life modules.

This can happen to any module in cpan/ and dist/
http://cpansearch.perl.org/src/SHAY/perl-5.15.5/cpan/
http://cpansearch.perl.org/src/SHAY/perl-5.15.5/dist/


>> BTW  What are those downstream maintenance costs?
> 
> Someone ignores the "internal" nature of TB2::Mouse, sees that it's in
> corelist, and writes something that depends on it.  Later, you switch
> to something else, or TB2::Mouse is no longer used by Test::More, or
> you get hit by a bus and the next maintainer switches to TB2::Hamster.
>  Then someone complains "TB2::Mouse was in core!  You have to have a
> deprecation cycle", etc.
> 
> None of these are impossible to solve, but with the deprecation policy
> in flux, I'd be nervous to add anything that might have to be
> maintained for a long time by *someone* whether or not that is *you*.
>
> Personally, I'm a "tough love" person on p5p.  I'm relatively happier
> to break stuff and tell people to test their code and don't upgrade
> Perl if you don't like the new version.  But there are others who
> don't and the vision that Jesse laid out implies that "use v5.XX"
> might mean that it should be honored by v5.30.  Meaning "use v5.18"
> requires having the same copy of TB2::Mouse that was available in
> v5.18 years and years from now -- albeit with any security bug fixes
> that might appear.

I reject the "somebody might rely on it" argument wholly, especially if we
clearly post the terms in TB2::Mouse.  At some point we have to enforce
clearly marked encapsulation.

You might not have spotted it in my reply to chromatic, but part of those
terms is that you must depend on TB2::Mouse as you would any CPAN module.
Then it can be removed from the core and Test-Simple distribution and put on
CPAN in its own distribution, like Test-Harness-Straps.  This provides an
explicit means for people to rely on it AND for us to remove it from the core.
 People will ignore this advice as well, but their mistake is mitigated by
adding a simple dependency when the time comes to remove TB2::Mouse.

"use 5.xx" involves documented features and perhaps areas which are a bit
wibbly on the details.  I don't expect that it's supposed to be bug for bug
compatible, nor compatible with violations of big B<KEEP OUT> postings.

In short, I reject any argument predicated on "the user ignores the clearly
posted warnings".  p5p might not, but I'm happy to allow them to take on an
extra problem for themselves.


>> Anyhow, they would be in violation of the documentation (which would be
>> written in bold neon on the first page) and not supported.
> 
> I *would* include just enough Pod to get an abstract line that says
> "for internal use only".
> 
> I would also encourage you to call it something other than TB2::Mouse.
> TB2::Object or whatever.  For the same reasons that Parse::CPAN::Meta
> isn't Parse::YAML::Tiny or whatever else it could have been called.
> Just don't imply Mouse.  "It's just a black box.  Naughty user, please
> go away!" Etc.

If TB2::Mouse is for internal TB2 use only, I agree with caveats.  There's
problems with completely denying these are Mo[ou]se objects.  There's useful
meta things you can do if you know a class is Moose-based, and we'd be
throwing that away.  The existing TB2 documentation is predicated on the idea
that the user can reference the Moose docs to understand how accessors and
attributes work.  These can all be overcome, but that means more work and
maintenance and duplication... just the thing we're trying to avoid.

I would like it to be available for Test:: authors.  "You depend on Test::More
>= 1.5.x, you also get a free object system!"  This raises the bar of minimum
dependencies.  It's right there, we need to ship it anyway, we might as well
let people use it.


>> It won't work for the simple reason that if any dual-life CPAN module decides
>> to use a feature or bug fix of Test::More 1.5.0 then it can't be cored.  The
>> forward dependency march will drag it in.
> 
> We live in that world already, but with perl features.  Which is why
> toolchain development sometimes sucks.

"Make it suck more" isn't something I can get behind.

If this were Term::ANSIColor or Digest::MD5 or Parse::CPAN::Meta... something
only used in the core in a few places and fairly small... I'd understand.
This is a module that affects *every dual life module*.  Not upgrading makes
every dual life maintainer's job harder.  See argument at the top of this email.


>> It also means the perl core gets no bug fixes and no feature enhancements.
> 
>> Holding it back in the core is just YET ANOTHER immediate upgrade
>> that's necessary after a fresh perl install.
> 
> C.f. Task::Kensho.  The community has already decided that core Perl
> isn't enough for real tasks.  Ditto "Bundle::CPAN" for that matter.

See above, except it now makes every CPAN module maintainer's life harder, not
just the dual lifed ones.


>> If I didn't point it out, nobody would have known it was there.
> 
> I'd rather have the discussion up front and reach consensus than find
> something implemented that we regret later.

Point of order, this has been discussed and posted in public and presentations
several times for over two years.  I'm glad it's being discussed, and I fully
expected people to only pay attention once things stabilized, but I'm a little
miffed that it's come at this late stage after so much work has been done on
top of TB2::Mouse.


> Not a core example, but
> "PERL_CPANPLUS_IS_RUNNING" having to be set in CPAN.pm and cpanm is
> one of those examples of things where someone's bright idea has led to
> cruft that we'll be living with in every CPAN client for decades.  It
> was a bright idea that made things easier for Module::Install... but
> with hugely annoying downstream impacts.

I understand the concern, but I see nothing remotely like that possibility
here.  Do you?

I've gone through some pain to separate TB2::Mouse from Mouse, internally and
externally, to avoid a conflict.


> Net -- I'd run this explicitly past Rik (if he's not following along),
> but I'm supportive if the answer is "TB2::Object" (or similar generic
> name) with an explicit "internal use only" disclaimer.  Then anyone
> else who uses it knows the risk.

Him and Goro have been CC'd several times.  I'll ask directly for them to
weigh in.


-- 
31. Not allowed to let sock puppets take responsibility for any of my
    actions.
    -- The 213 Things Skippy Is No Longer Allowed To Do In The U.S. Army
           http://skippyslist.com/list/

Reply via email to