chromatic's Second Law of Backwards Compatibility

chromatic on 2007-07-04T21:15:01

Anyone who says "Sure, it's obviously broken and we have A Better Way, but we can't fix it now because we have a dozen users" deserves a swift kick in the head.

When I get my time machine, the second thing I will do is to apply this principle to Unix development circa 1975, only a few Moore's Law doublings after the invention of the C programming language. I mean, seriously--predeclarations, type punning, null-terminated strings?

The amount of time wasted by stupid choices in a successful technology increases by an order of magnitude every eighteen months.

I can't prove it, but I do have a heavy set of boots lined up to make my point.


Message in a (Klein) bottle...

renodino on 2007-07-05T05:05:44

When I get my time machine, the second thing I will do is to apply this principle to Unix development circa 1975,...

Please, please, when you get there, will you give them a heart to heart talk about signals ? Take away their mushrooms and bongs, and explain, slowly, but carefully, that asynchonry just ain't that simple ?

Re:Message in a (Klein) bottle...

chromatic on 2007-07-05T08:58:42

Okay, that's on my list, but lower than the decision to keep x86 and BIOS around for so long.

I have another law

slanning on 2007-07-05T10:20:47

Those who don't take reality into account make up laws instead and then kick people in the head for not following them

Re:I have another law

chromatic on 2007-07-05T19:19:10

I'll put you on the "pro" side of literal tabs in Makefiles then, and five years of completely broken Scalar::Util in ActivePerl.

Re:I have another law

jand on 2007-07-05T21:46:15

How is Scalar::Util broken in ActivePerl it is (at least supposed to be) the same as in core Perl.

Re:I have another law

chromatic on 2007-07-05T23:29:26

As I understand it, it doesn't include (all of?) the XS components of the module, making reftype() unavailable for the ActivePerl 5.8.x releases.

The explanation I heard (and I don't remember where, though I'm pretty sure it wasn't from you) is that one goal of the ActivePerl releases for 5.8.x was to maintain binary compatibility back to 5.8.0, and thus there would be no reftype() available for Scalar::Util.

When I last looked at which of my distributions failed in the AS build and test farm, most of the failures looked related to that.

Again, I don't remember exactly who told me this and can't find a link to verify it, so I welcome corrections and clarifications!

Re:I have another law

Alias on 2007-07-06T02:18:35

You might have heard it from me, although I'm not sure it was (only) reftype()... might also have been weaken().

ActivePerl on Windows maintains binary compatibility, and it does so for business reasons.

As a result Scalar::Util, and hence all interesting packages (as in like 40% of all CPAN modules) are broken on ActivePerl, and can't be fixed for business reasons.

This is why I never got to demo PPI on my own laptop at the Perl Conference the year I want, which triggered off a year-long attempt to get them to fix it, at the end of which (when they said they intentionally wouldn't be fixing it for business reasons flat out) I gave up on ActivePerl and started the process that resulted in Strawberry Perl as a replacement for it.

But yes, I agree to some extent with chromatic on this one.

That said, I think you sometimes go too far in the other direction as well. It can be very tempting to say, "Screw the entire userbase, we're changing the way this works".

When the userbase is 12, who cares, when it's 12,000 or 12,000,000 that's an entirely different matter.

Re:I have another law

Aristotle on 2007-07-06T04:50:11

If you’re building something important, 12,000 is still not very big.

Of course it’s hard to assess ahead of time whether 12,000 is small or big in one’s particular case…

Re:I have another law

chromatic on 2007-07-06T06:22:01

When the userbase is 12, who cares, when it's 12,000 or 12,000,000 that's an entirely different matter.

My objection is when the best (and sometimes only) argument is "We can't change because people are already using it!" That argument was rubbish back when make had 12 users, and it's rubbish now when the proposed change improves the lives of many times more users.

In ten years, see if fervent adherence to backwards compatibility killed Perl 5 in 2002.

Re:I have another law

jand on 2007-07-06T22:40:43

12,000 is the number of downloads of ActivePerl for Windows every 2-3 days (downloads for other platforms are significantly lower). Which is why breaking backwards compatibility in the PPM repository is a big deal.

Of course all of these issues are really just pointing out faults in the original setup of the PPM and build farm infrastructure. Unfortunately it is a lot of work to get it cleaned up. We are currently testing adding additional repositories that are built with 5.8.8. We have already changed the default repository URL in ActivePerl 819 and later to be version specific, so we can redirect them to more up-to-date repositories once they are operational.

Re:I have another law

slanning on 2007-07-06T08:53:13

The explanation I heard [...] is that one goal of the ActivePerl releases for 5.8.x was to maintain binary compatibility back to 5.8.0, and thus there would be no reftype() available for Scalar::Util.

I think it's reasonable to try to maintain binary backwards compatibility, but the problem seems to come from them breaking compatibility with Perl!

Is the problem instead that we pretend that ActivePerl is Perl?

P.S. Why is `make` considered broken, anyway, instead of the editors that can't highlight/insert tabs? Maybe they just aren't appropriate for editing Makfiles.

Re:I have another law

chromatic on 2007-07-06T23:41:37

Invisible characters were much more difficult to see 30 years ago, but (so the story goes) a dozen people already used make, so the author both regretted the choice of literal tabs and couldn't fix the program.

Re:I have another law

jand on 2007-07-06T21:43:49

You are mixing 2 different issues:

ActivePerl contains the same or a later version of Scalar::Utils as the corresponding core release. ActivePerl should always contain a superset of the functionality of the corresponding core release; everything else would be a bug. In the spirit of the Artistic License, ActivePerl is a "Standard Version" of Perl.

The PPM build farm however does run with very old distributions for backwards compatibility, as the generated modules must work on any released version of ActivePerl.

I did a quick check, and even ActivePerl 5.8.0.806 contains Scalar::Util::reftype(), so I'm wondering why this isn't available on the build farm (the machines are supposed to be using build 806).

Just for reference, ActivePerl 5.8.0.806 contains Scalar::Utils version 1.07 and ActivePerl 5.8.8.820 contains Scalar::Utils 1.18.

Re:I have another law

chromatic on 2007-07-07T00:52:04

It may have been refaddr() instead; that's the conclusion I reach after looking at the PPM build farm failure for Test::MockObject on Linux.