消失的测试用例,还是MySQL的另一部分刚刚变成闭源了?

大约一周前,我在查看 MySQL 5.5.27 版本时,注意到一件奇怪的事情。尽管新发布的 MySQL 版本包含了通常数量的 bug 修复,但没有一个修复伴随着测试用例。

现在,让我告诉你一些关于测试的事情。多年来,MySQL 一直使用自己的测试框架,称为 mysql-test。第一个版本早在 1999 年就已编写。多年来,它积累了大量的测试。有针对新功能的测试,也有回归测试——这些测试保证一个 bug 一旦被修复,就永远不会再出现。在 MySQL AB(以及后来的 Sun Microsystems),我们对此有相当严格的政策——每个新的 bug 修复总是必须伴随一个针对该 bug 的测试用例。而且由于这些测试在每次提交时(通过内部开发的持续集成工具 Pushbuild——由 Kristian Nielsen 开发)都会在许多平台上运行,我们有充分的信心,任何 bug 一旦被修复,就会永远保持修复状态。我现在不再是 MySQL 的员工了,但我仍然无法想象 Oracle 会削弱这条规则。所以,肯定不是这样。

5.5.27 版本带来的一个变化是扩展了 mysql-test-run 脚本——即 mysql-test 套件的驱动脚本——使其在新目录中查找测试用例。除了通常的位置(即源代码树中的 mysql-test/ 目录)之外,它现在还会在 internal/mysql-test/ 目录中查找测试用例。这是否意味着测试用例不再是开源的?Oracle 没有回复我的问题。但事实上,有证据表明这种猜测是正确的。例如,这封提交邮件显示,新的测试用例确实放在这个“内部”目录中,而该目录不包含在 MySQL 源代码分发包中。

MySQL 测试用例一直是 MySQL 源代码树的重要组成部分。它们对于存储引擎开发者以及其他扩展 MySQL 的人特别有用,例如 FacebookTwitter淘宝。 它们也对将补丁添加到基础 MySQL 中的 Linux 发行版有用,甚至对不修改源代码的用户也有用——他们仍然想确认某个 bug 已被修复或他们自己构建的二进制文件没有明显缺陷。

五月,在奥克兰举行的 Ubuntu 开发者峰会上,Oracle 有 7 位代表到场,他们承诺 Oracle 将对贡献者和分发版更加友好。令人遗憾的是,我们看到的是 MySQL 源代码树正在被关闭。

MySQL AB 在围绕产品构建开发者社区方面从来都不太擅长。MySQL AB 之外没有多少 MySQL 开发者或项目贡献者,公司也没有做太多工作来增加他们的数量。但现在 Oracle 注意到了他们——并且它正在有意地扼杀 MySQL 开发者社区仅存的一切。没有测试用例,MySQL 对外部开发者来说变得像任何闭源软件一样不透明,只有那些经验最丰富、对 MySQL 代码库最熟悉的人才能继续使用它。

更新: 对于外部开发者来说,很难找到比测试用例更有价值的东西了。但可以说版本历史同样有价值。它将这数百万行源代码的更改分组到 变更集 中,每个独立的特性或特定的 bug 修复对应一个变更集。它允许查看谁在何时因何原因更改了某行代码。而且看起来 Oracle 也将把这些信息据为己有。带有版本历史的公共 MySQL 树在 launchpad 上没有被更新

现在,有没有一个没有任何开发者社区的成功开源项目?

更新 2: 我们不是唯一受此问题影响的人。另见