On 2017-09-12 6:45 PM, Patrick M. Galbraith wrote:
Darren,
I agree with this as well, with the exception of 4 and 5, keeping 5.0 "pure" to
the new way of doing things.
I very much agree, pure is best. I only suggested 4 and 5 as half-hearted
options because I knew some projects in our community liked to do things like that.
For releases, I think I want to understand what this will mean. Sooner or later,
a release shows up in as a distribution package, installed on the OS, and I want
to know what the way of communicating that to the users and vendors so
expectations are met. That's another question of "how do we handle that?" and
"how do we inform an OS packager/vendor, what to do?
Thank you for the great discussion!
Based on my experience, the fact the major version number is being changed from
4 to 5 will communicate a lot by itself.
Many software projects use semantic versioning, see http://semver.org for a
formal definition adopted by SQLite among other projects, and all the common
package managers and package repositories understand it.
Generally speaking, if the first number in a dot-separated version number is
incremented, it is treated as being a major version, and then any version
numbers having that first part in common are considered minor versions of the
same major.
Given the default behavior of package managers, any users performing a generic
"keep me up to date with all the patches and bug fixes" should receive the
latest version sharing the major version they already have, and going to a new
major version would require a more explicit "install this separate thing" on the
user's behalf.
Tangentially to this, this DBD::mysql is a CPAN module, CPAN conventions can
also be followed by the package managers.
As for giving explicit communication to repository maintainers eg Debian and
CentOS and whatever, I think that's a matter of direct human communication.
Perhaps have the person managing the packages for MySQL itself handle it.
This all being said, for people using the CPAN clients, I believe their rules
are simpler and they simply always get the highest numbers, ignoring major/minor
stuff, except for Perl itself.
For the sake of CPAN clients, another possible alternative is to fork the
namespace. The current DBD::mysql name either means the old legacy version or
the new better version, and then you pick a new name for the complement.
A semi-relevant example of this is DBD::SQLite back in 2003 when SQLite 3 came
out. In that case, SQLite 3 was a complete break from 2, neither could read the
others' files. They renamed the old DBD::SQLite to DBD::SQLite2 (or some such)
which was the one for SQLite 2, and the plain DBD::SQLite name then meant SQLite
3. That being said, all the SQLite 2 ones were 0.x versions, and then version
1.0 was the first SQLite 3 version. So the fact that prior to the break the 0.x
semantics of (anything might break) made the decision easier.
I think the decision then of which MySQL client keeps the old name depends on
what you want to happen when users simply "get the latest" without testing. If
the latest features and fixes stay with the old name, then the name for the
legacy fork could be DBD::mysql::LegacyUnicode 4.044 AND DBD::mysql jumps to
5.0. If the latest features go to a new name, then you could have eg
DBD::mysql2 version 1.0; it would be like a fork, but its official. The former
approach will mean users with broken code will have to update their code to the
new module name but won't have to fix their Unicode. The latter approach means
people wanting the new stuff change the driver name they call.
Another option that lets you keep the same name for both but requires other
parts of the ecosystem to at least update some code, is you stick with the
originally discussed 4-5 move, and other middleware modules add explicit
internal code paths for "if DBD::mysql version >= 5 then expect correct Unicode
behavior and otherwise expect and compensate for broken Unicode"; I expect
DBIx::Class and friends will all add such checks anyway, short of hard requiring
the new version.
Basically, its all about tradeoffs, who you want to do what work and who you
want to be able to do zero work.
-- Darren Duncan