MySQL 开源到商业(二):开源骇客沦为大厂社畜

server/2024/12/23 5:45:31/

前文提到,MySQL AB 接受了 Sun 公司的收购要约,开源骇客 Monty 也同时加入了 Sun 公司。双方对于 MySQL 的开源前景踌躇满志,准备大力投入新一代存储引擎 Maria 的开发,用于取代被 Oracle 收购的 InnoDB 引擎。作为一个芬兰人,Monty 从来没有为钱困扰过,也没有被大公司雇佣过。加入 Sun 公司后,Monty 初来乍到的新鲜感迅速消退,在经历一系列理念上的摩擦后选择了离职。

这篇博客展示了一个开源骇客被金钱“收买”之后的心路历程,多年以后 Monty 才意识到 Sun 的这笔钱也许是他这辈子最大的诅咒。

2008 年 6 月 30 日 Monty 发布了一篇名为“Bringing up the baby”的文章,表达了自己对 Maria 引擎的信心。自从 MySQL 支持 InnoDB 引擎之后,用户逐渐放弃了 Monty 开发的 MyISAM 引擎,变相投入了 Oracle 的怀抱。虽然 InnoDB 引擎的代码也是开源的,但是这让 Monty 如鲠在喉,研发 Maria 引擎来取代 InnoDB 迫在眉睫。在设计上,Maria 引擎修正了 MyISAM 的一系列问题,但是在事务支持和稳定性方面仍然落后于 InnoDB,这使得 Monty 加入 Sun 后继续加班加点。

最后,我们终于完成了 Maria 1.5 的代码,也就是所谓的 MyISAM 安全崩溃版本。请注意,代码完成意味着所有功能都已编码,而不是说代码 100% 没有错误!

代码很快就会出现在您附近的 bzr repo 中。我们还将在短期内(一旦通过所有构建测试)从这里发布 MySQL-5.1-Maria 的正常源代码和二进制版本。

据我们所知,MySQL-5.1-Maria 还存在一些小 Bug,我们将在短期内修复它们,但没有什么可以阻止你测试/使用 Maria。详情请参见源代码版本中的 KNOWN_BUGS.txt 文件。

MySQL-5.1-Maria 当前的发布计划如下:

当前版本将是 alpha 版本。(从技术上讲,它本可以是一个 beta 版本,但由于我们添加了大量新代码,因此我们希望通过发布另一个 alpha 版本来表明这一点)。

如果没有发现需要重新编写代码的重大错误,我们将在下一个版本中修复发现的错误,并发布测试版。希望能在 8 月份完成。

我们将继续每月发布一个测试版,直到不再需要重新设计,新的错误报告减少到最低限度。然后,我们将发布最终 RC 版和 GA 版(假设一切顺利)。

到目前为止,我们已经将 Maira 未解决的 Bug 降到了最低。这一点再加上一个相当大的测试套件,使我们,Maria 团队,有理由相信,在发布 RC 版和 GA 版之前,我们不需要太多的测试版。下载 Maria 进行测试和使用的人越多,它就会越快稳定。请报告您发现的任何错误,我们将尽力修复!

同时,我们正在将 MySQL-5.1-Maria 并入标准的 MySQL-6.0 代码树中,Maria 将成为服务端的核心部分。

下一步是跨入 MySQL-6.0-Maria 代码树,我们将开始努力使Maria完全事务化,并且更加并发。

影响 MySQL-5.1-Maria 的错误当然会在这个代码树中完成修复,然后合并到 MySQL-6.0 和 MySQL-6.0-Maria 代码树中。

有兴趣了解 Maria 现在和未来的更多信息的人,欢迎参加我的 Maria 讲座以及 7 月 24 日在 Oscon 举行的 Maria BOF。

在Oscon会议上,Tim O’Reilly 将对 Brian Aker 和我进行主题采访。我们将尽全力把这次活动办成一次有趣而难忘的盛会!

现在我该去度假了。(其实我早在上周一就计划去了,但我想在去之前完成我在 Maria 项目的那部分工作,现在已经是下周日了…)。至少在接下来的两周里,我可以远离电脑休息休息,因为我在瓦萨的避暑别墅里没有电。

在 2008 年,用户使用的 MySQL 发行版主要来自于三个团队。Monty 负责 Maria 分支,Perter 负责 Percona 分支,Brian 负责 Drizzle。因为这三个分支都能向 MySQL 主干推送代码,因此团队之间维持了很好的竞合关系,在一些重要场合也是相互站台,致力于将 MySQL 生态做大做强。Sun 公司的收购并没有影响这种合作关系。

在过去的两三年里,我和 Brian Aker 就如何重构 MySQL 进行了多次讨论。Brian 一直在推动这些讨论,他问为什么 MySQL 中的某些事情要以某种方式进行,并以一种真正的 "如果 "方式问如果我们以另一种方式做事会发生什么。

由于厌倦了无法在 MySQL 服务端中完成急需的重构工作,Brian 开始开发 Drizzle,以寻找这些问题的答案。

那么,Drizzle 是什么?

  • 如果社区能更多地参与软件本身的设计,并有针对性地进行网站部署,那么 Drizzle 就是 MySQL 的雏形。
  • Drizzle 是由 Brian 和社区推动的 MySQL 版本,试图解决大量 MySQL 用户面临的实际问题。
  • Drizzle 是一个更小、更轻、(希望)更快的 MySQL 版本;Drizzle 社区不想要或不需要的功能已被移除或正在移除(包括存储过程、视图、触发器、授权、某些非插拔存储引擎等)。
  • Drizzle 是 MySQL 服务端代码库的第三个分叉,但(目前)是拥有最多开发人员的分叉。其他两个分叉是:
    • ProvenScaling 在 mirror.provenscaling.com 上的分叉由 Jeremy Cole 提供。您应该阅读 Peter Zaitsev 的相关博客。
    • MySQL-5.1-maria 分叉,由我领导的 Maria 团队提供。(在开放树供外部开发方面,Brian 确实比我们更胜一筹;我们至少还有一个月的时间才能做到)。
  • 有关 Drizzle 的更多信息,请访问 Brian 的博客 http://krow.livejournal.com/。

为什么研究 Drizzle的人对 Drizzle 充满热情?

这是因为 Drizzle 解决了 MySQL 开发多年来遇到的许多问题:

  • 它为社区提供了更开放的 MySQL 开发环境;你不再需要等待数年才能将你的补丁和可行的扩展加入服务端。
  • 存在多年的关键漏洞终于可以得到修复,因为开发工作不再受制于不切实际的发布时间表,这些时间表人为地限制了可以修复的问题。
  • Drizzle 将对一些 MySQL 服务端差异化进行真正的测试;有点像 Fedora 对 RedHat 的测试。
  • Drizzle 在 MySQL 开发者社区中引发了新的兴奋点;很多人似乎都非常热衷于以真正的社区导向方式来开发它。
  • 开发 Drizzle 的开发人员正在对服务端进行大刀阔斧的重构,而这正是 MySQL 多年前就计划要做但从未实现的事情。
  • 开发决策再次由每天使用服务端的人员做出;这将确保 Drizzle 比当前的 MySQL 开发模式更快、更稳定。
  • Drizzle 将以 MySQL 核心用户(网络用户)为目标,这些用户的需求多年来一直被忽视,而 MySQL 核心开发人员却增加了他们不需要的功能。
  • 此外,Drizzle 还将包含最新的 InnoDB 代码;你不必等到 MySQL 6.0,也不必为了访问最新最快的 InnoDB 版本而每年从甲骨文公司下载安装 InnoDB 插件。

尽管如此,Drizzle 并不是来取代普通 MySQL 服务端的;Drizzle 瞄准的是一个有限但重要的市场,因此将帮助我们增强基于 MySQL 的产品。将 Drizzle 视为微内核服务端,围绕它可以开发其他产品/功能。

Drizzle没有发布计划或时间表,但将遵循真正的开源和敏捷方法,即尽早发布、经常发布;Brian 希望在 3-4 个月内推出可用的、相当稳定的 Drizzle 版本,但不做任何承诺。

Drizzle也将为"普通 "MySQL开发人员提供巨大帮助;通过观察 Drizzle 是如何解决问题的,以及不断与 Drizzle 进行基准比较,我们将更深入地了解当前代码库的弱点,并对需要修复的问题有更好的认识;友好的竞争是好事!

Drizzle 是 Sun 收购 MySQL 带来的好处之一。在 Sun 高层管理人员的支持和鼓励下,Brian 一直在开发 Drizzle。我们发现 Sun 是开放和鼓励创新的,这是收购的一个好的方面。

我个人对 Drizzle 的反应是,我对这个 MySQL 领域的新生力量充满热情。我并不完全同意 Drizzle 所做的一切,但大多数事情都很有意义。我期待着就 Drizzle 中的解决方案进行许多非常有趣的讨论,这将有助于改进两个 MySQL 版本。

很快,Monty 发现 Sun 公司的执行动作和自己想要的有很大冲突。多年以来,Monty 一直想要让 MySQL 的开发过程更加面向外部,而 Sun 公司在这方面的动作很慢。终于,在持续了几个月的“斗争”之后,Monty 以一种平和的方式宣布了退出,并表示将在开源领域与 Sun 公司保持良好的合作关系。在后继的博客中,Monty 感谢 Sun 为自己举办了一个盛大的告别晚宴。就像那篇博客的名字一样,Monty 对于 Sun 的认可更多是“thank for all the meat”上,而不是开源理念以及开发模式。

我现在已经离开 Sun,加入了自己的公司 Monty Program Ab。

去年八九月间,关于我辞职的传言甚嚣尘上。当时我并不想对这些传言发表评论,因为我还在努力与 Sun 解决一些问题。现在我终于可以描述一下当时的情况了。

在这种情况下,传言有一定的真实性。我曾告诉管理层,我将立即递交辞呈,因为我坚信 5.1 版本还没有准备好,需要在正式发布之前解决这些问题。这一举动加上其他人的努力,确实收到了预期的效果,我与 Sun 高层管理人员达成协议,不提出辞职,而是再留三个月,帮助 Sun 解决 MySQL 开发中的问题,同时也让 Sun 有机会为我在 Sun 内部创造一个最佳角色。

三个月的时间确实延长到了七个月,而我原本希望 Sun 公司能对 MySQL 数据库部门进行改革,以解决我们的开发和社区问题,但改革的速度不够快。

最后,我和 Sun 公司都认为,我在 Sun 公司之外实现目标的机会要大得多,所以最好还是吞下苦果,出去闯一闯。我们是在良好的条件下分手的,我们都希望能继续开展业务和合作。

离开的主要原因是我对 MySQL 服务端的开发方式不满意,这一点可以从我之前的博文中看出。我尤其希望服务端的开发能转移到一个真正开放的开发环境中,这样既能鼓励外部参与,又不需要对源代码进行区分。Sun 公司一直在考虑开放服务端开发,但步伐太慢。

我仍然认为,Sun 是 MySQL 的最佳买家,我对双方未能成功合作感到遗憾。Sun 有很多好事要做,我希望他们能继续走创建和推广开放源码的道路。我将帮助 Sun 实现开源领域的目标。

那么,我和 Monty Program Ab 将做些什么呢?

Monty Program Ab 将是一家真正的开源公司,其附加目标是成为一家小型的家庭型公司(10-30 名员工),在这里每个人都可以成为公司的主人,我们关心我们的员工,努力共同享受乐趣,分享我们创造的利润。欲了解更多信息,请访问:http://zak.greant.com/hacking-business-models。

Maria 团队的部分成员将跟随我,部分成员则将留在 Sun。我们的计划是,或多或少像以前一样继续开展 Maria 项目。与之前的主要区别是,Maria 项目及其邮件列表将转移到 launchpad,我们将开始使用 free-node 进行 IRC 通信(频道 #maria)。Maria 1.5(MyISAM 的崩溃安全版本)现已进入测试阶段,我们希望能尽快发布二进制文件。我们已经开始着手开发 Maria 2.0 功能(完整事务版本)和性能问题。从我的角度看,Maria 的开发工作将略有延迟(最终版本将延迟一到两个月),因为我必须将新公司完全准备好。

Monty Program Ab 将与 MySQL 社区积极合作,为 MySQL-5.1-Maria 代码树提供稳定的补丁,并围绕该代码树创建一个活跃的社区。我们还将对 MySQL 代码进行一些重组,使其更简单、更快速、错误更少。

我们不应该把 MySQL-Maria 代码树看作是一个分叉,而应该看作是一个分支,因为我们打算把官方树上的所有改动都拉到 MySQL-Maria 分支上;有些改动可能会被重新修改,但我们会尽最大努力确保最终用户看起来和感觉上都是一样的。

Monty Program Ab 还将在 MySQL 和 Maria 上为客户做 NRE(非经常性工程),并把这些工作放到 MySQL-Maria代码树中: 如果您希望在 MySQL 服务端中完成、修复或更改某些内容,请通过 "monty at askmonty.org "与我联系,以获取报价)。

此外,我将继续与从事开源和社区产品的颠覆性技术创业公司合作,并对其进行投资。(另一个无耻的宣传:如果你认为自己在开源领域有独特的商业想法,请通过 "monty at openoceancapital.com "与我联系!)。

我还在筹建一家新型餐厅,利用数据库为顾客提供更好的体验。(数据库开发人员可享受特别折扣!)。更多信息请稍后了解…

想要更了解我的工作内容,请访问 http://www.askmonty.org 或 http://www.openoceancapital.com

(请注意,上述网站在未来几周内将处于建设中)

在这个时候,Monty 依旧认为将 MySQL AB 卖给 Sun 公司是一个正确的决定,自己能够从外部公司的角度帮助 MySQL 继续发展。然而,他并没有意识到将 MySQL 的知识产权转交给 Sun 公司会有什么样的后果。Sun 公司的财务状况在持续恶化,很快就要做出一个意料之外的决定。这个决定直接影响了整个 MySQL 生态的走向,并导致了 Monty 开源理念的“黑化”

后面发生了什么?请关注:MySQL 开源到商业(三):霸道总裁强抢民女

博客原文链接:

https://monty-says.blogspot.com/2008/06/bringing-up-baby.html

https://monty-says.blogspot.com/2008/07/what-if.html

https://monty-says.blogspot.com/2009/02/time-to-move-on.html

End

KubeBlocks 已发布 v0.8.0(KubeBlocks v0.8.0 发布!Component API 让数据库引擎组装更简单!)!KubeBlocks v0.8.0 推出了 Component API,让数据库引擎的组装变得更加简单。Addon 机制也有了重大改进,数据库引擎的 helm chart 从 KubeBlocks repo 中拆分出去,从此数据库引擎或者版本的变动已与 KubeBlocks 发版解绑。v0.8.0 还支持多版本的数据库引擎定义。Pika、ClickHouse、OceanBase、MySQL、PostgreSQL、Redis 等均有功能更新,快来试试看!

小猿姐诚邀各位体验 KubeBlocks,也欢迎您成为产品的使用者和项目的贡献者。跟我们一起构建云原生数据基础设施吧!

💻 官网: www.kubeblocks.io

🌟 GitHub: https://github.com/apecloud/kubeblocks

🚀 Get started: https://kubeblocks.io/docs/preview/user_docs/try-out-on-playground/try-kubeblocks-on-your-laptop

关注小猿姐,一起学习更多云原生技术干货。


http://www.ppmy.cn/server/16484.html

相关文章

服务器镜像是什么

服务器镜像是什么 镜像是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像,RAID 1和RAID 10使用的就是镜像。数据库镜像是DBMS根据DBA的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上,每…

【Linux系统化学习】死锁 | 线程同步

目录 死锁 死锁的必要条件 避免死锁 线程同步 条件变量 同步概念和竞态条件 条件变量接口 创建和初始化条件变量 等待条件满足 唤醒等待 毁条件变量 为什么 pthread_cond_wait 需要互斥量? 条件变量使用规范 等待条件代码 给条件发送信号代码 死锁 死锁是指在一…

c++初阶——类和对象(中)

大家好,我是小锋,我们今天继续来学习类和对象。 类的6个默认成员函数 我们想一想如果一个类什么都没有那它就是一个空类,但是空类真的什么都没有吗? 其实并不是,任何类在什么都不写时,编译器会自动生成以…

AI 重写人类DNA,开源基因编辑器问世;安卓版Gemini新增多项功能

🦉 AI新闻 🚀 AI 重写人类DNA,开源基因编辑器问世 摘要:初创公司 Profluent 最新宣布,开发出世界首个完全由 AI 设计的基因编辑器,并成功应用于人类细胞 DNA,这一技术可谓是分子生物学的一大突…

【UE C++】重写基类中的BeginPlay、Tick函数

前言 为了让游戏场景中的各种继承于“Actor”的游戏对象在生命周期中执行自定义逻辑和行为,我们通常需要重写“Actor”类及其派生类中的BeginPlay、Tick函数。 那么如何用C重写BeginPlay、Tick函数呢,可参考如下步骤。 步骤 1. 在头文件中添加如下代码…

封装一个antd的Table操作项中的一个展开与收起通用功能

第一种方法,不使用任何插件和库 import React, { useState, useEffect, SetStateAction, Dispatch } from react; // 定义expandedKeys的类型 type ExpandedKeysType Set<string>; // 自定义Hook&#xff1a;useExpandedKeys function useExpandedKeys(initialK…

【RAG 论文】Adaptive-RAG:自适应地根据 query 难度来选择合适的 RAG 模型

论文&#xff1a;Adaptive-RAG: Learning to Adapt Retrieval-Augmented Large Language Models through Question Complexity ⭐⭐⭐⭐ Code&#xff1a;github.com/starsuzi/Adaptive-RAG NAACL 2024&#xff0c;arXiv:2403.14403 文章目录 一、论文速读二、实现细节2.1 三种…

从 MySQL 到 ClickHouse 实时数据同步 —— Debezium + Kafka 表引擎

目录 一、总体架构 二、安装配置 MySQL 主从复制 三、安装配置 ClickHouse 集群 四、安装 JDK 五、安装配置 Zookeeper 集群 六、安装配置 Kafaka 集群 七、安装配置 Debezium-Connector-MySQL 插件 1. 创建插件目录 2. 解压文件到插件目录 3. 配置 Kafka Connector …