拒绝PR、不靠GitHub,凭啥活26年?SQLite之父谈自由软件世界

· 2026-09-07 07:15 · 7 阅读

原创 整理自 2026-09-07 07:15 广东

多年来,这种反常规模式不断有人试图推翻,Turso是最具代表性之一。

一个拒绝主流开源玩法、不接受外部贡献、用祝福替代许可证的“反常规”项目,却成了全世界部署最广的数据库,它就是SQLite

多年来,这种反常规模式不断有人试图推翻,Turso(用Rust重写SQLite的数据库)是最具代表性之一。他们还发布了一份宣言,主张软件开发必须遵循GitHub模式,使用特定的许可证。在近期一次对话中,SQLite的创始人Richard Hipp对此回应:我自己的软件,如何开发和维护,应该由我决定。

在这期访谈中,他还回应了那些长久以来的争议:为什么用祝福语代替许可证?为什么拒绝PR和开放贡献?除此之外,本次对话内容还涵盖:

一、SQLite的起点:“奥斯卡·奥斯汀号”合同

二、摩托罗拉、美国在线与第一批商业合作

三、Symbian竞标与联盟成立

四、为什么用祝福语替代许可证

五、对Turso、libSQL和宣言的反应

六、为什么pull request是“免费小狗”

七、为什么SQLite能持续26年之久

八、自己写工具(Fossil、Lemon)

九、自由意味着自己照顾好自己

十、拯救SQLite的航空航天测试标准

十一、Richard对AI和编码代理的看法

十二、给想fork SQLite的人的建议

以下为这场访谈的中文编译。

一、SQLite的起点:“奥斯卡·奥斯汀号”合同

Q:SQLite最早应该是从你在奥斯卡·奥斯汀号做合同工时开始的?

Richard:对,我当时是General Dynamics的合同工,而General Dynamics又分包给Bath Iron Works,Bath Iron Works当时正在建造DDG 79。舰上有一个为水手提供信息的系统,当舰船受损时,你需要能关掉阀门和断路器来隔离损害,同时开启其他设备,确保关键系统得到必要的支持。之前另一家公司接了开发这套系统的活,据说花了不知道几百万美元,但到头来基本没做出什么东西。

我进入通用动力后,被指派去解决那个问题。所以我必须设计出快速启发的算法,不保证最优,但保证足够好。最终我做到了。所有用于计算的数据都存储在Informix数据库中。我写的那个解决工具,他们双击打开它。如果Informix数据库的代理进程挂掉了,我就会弹出一个对话框,显示“不可用”,这种情况经常发生。然后他们就会打电话过来抱怨我的软件有问题。

这种情况不太好。我不想因为某个系统管理员把数据库代理停掉了,结果由我来背锅。我在想,为什么我需要一个单独的进程来存放这些数据?为什么我不能直接从磁盘读取?如果机器状态正常,用户能双击打开我的应用,那它就应该能读到数据。但当时并没有现成的SQL数据库引擎可以做到这一点。

Q:那时候还没有Google搜索之类的东西,不像现在,你可以直接上GitHub搜。

Richard:当时我对关系数据还一无所知,只能去当地的大学图书馆翻资料。后来我才知道,那些真正前沿的研究其实都在MIT、哈佛和伯克利。可我当时并不在波士顿或旧金山,如果我在那儿,反而可能找不到我想要的资料。所以我只能靠自己从头搞。最后做出SQLite,结果还传开了。

二、摩托罗拉、美国在线与第一批商业合作

Q:现在大公司经常用开源来推广自己的东西,先免费吸引人,然后再变现。但那时候完全不是这样,如果你做了免费软件,它就是真的免费,没有别的目的。所以你那时候的盈利方式,就是靠那些大合同。摩托罗拉算是你第一个大客户吗?

Richard:是的,那是第一个客户。我一开始根本没想过靠这个赚钱。过了好几年我突然接到摩托罗拉的电话。那时还是翻盖手机的时代,摩托罗拉是全球最大的手机制造商。他们说想把SQLite用在所有手机上,但需要一些增强功能,问我能不能做。我说当然可以,于是就签了个固定价格合同来做这件事。不久之后,美国在线也联系了我,他们说想把SQLite放到那些CD-ROM里作为安装包的一部分,但需要一些增强功能,问我能不能做,我说可以,又签了几份合同。

三、Symbian竞标与联盟成立

Q:摩托罗拉那份工作,是不是大概8万美元左右?

Richard:差不多,我多雇了三个人一起做。后来诺基亚也找到我,他们当时用的是Symbian系统,想把SQLite放进去。后来我才知道,诺基亚搞过一次竞标,有10个数据库引擎参加,7个闭源商业数据库,2个是开源,全都针对Symbian系统做了优化,就我一个人完全不知道这事。最后他们让我飞到伦敦开会,说愿意合作支持我,还建议我成立一个基金会来推广SQLite。你知道那是什么意思吧?

Q:如果你翻车了,不能继续维护SQLite,那这个项目怎么办?

诺基亚建议 Richard Hipp 成立一个基金会,目的是确保 SQLite 在创始人无法继续维护时仍然有人接手——这是开源项目常见的“bus factor”巴士系数概念。

Richard:巴士系数太低了。诺基亚建议成立联盟,帮忙牵线了一些公司。最初只有我,后来陆续有人加入。后来Mozilla的Mitchell Baker听说后主动联系我,说我的做法不对,并帮我起草了联盟协议。联盟成立后很多公司加入,从那时起这就成了我的全职工作。那已经是项目发布六七年之后的事了,具体时间记不清。从那以后,我一直能养活几个人全职做这件事,这也是我们全部的工作。

Q:你之前在采访里说过,承诺为SQLite提供支持直到2050年,这里的“支持”具体是指什么?

Richard:那件事其实没那么明确。2010年空客打来电话,他们正在开发A350,想在航电系统里用SQLite,问我能不能支持到机身寿命结束。我问那是多久,对方说40年。我说当然可以。他们确实买过几年服务,后来没出问题就停了。不过那件事算是一个里程碑。虽然法律上没有强制义务,但我说过要支持到A350退役,这本身是一个值得追求的目标。后来我选了从首次发布算起,再加50年作为我个人定下的支持截止日期,具体是2050年5月29日。

四、为什么用祝福语替代许可证

Q:SQLite用“祝福语”代替许可证在网上引起了一些争议,当时为什么这么做?

Richard:那段代码写于七月份,当时还只是一个SQL解析器,底层用的是gdbm。gdbm的许可证不是LGPL,而是纯GPL,所以它会“传染”整个项目。所以最初的SQLite是强GPL的,但当时也没有别的选择。不过gdbm是哈希存储,而我想做范围查询,那就需要B树之类的东西。所以我就想,换一个后端吧。

我翻了翻Berkeley DB的文档,发现光是理解它怎么工作,就得先写一堆测试程序。那我还不如自己写一个。既然都要写测试代码去搞懂别人的代码,为什么不直接写自己的?于是就做了SQLite 2.0。摆脱了gdbm的依赖之后,许可证的选择也就完全自由了。

当时许可证就那么几种:GPL、BSD、MIT,不像现在有几十上百种。我看了看MIT和BSD,确实很开放,也很好,但里面塞了一大堆法律术语。我就想,这些东西有什么意义?为什么要搞得这么复杂?为什么不能直接声明“公有领域”,然后完事?当时每一行代码都是我自己写的,那就直接叫公有领域吧。

SQLite后来被广泛使用,现在应该是全世界部署最广的数据库。那段“祝福语”也被认可为一种开源许可证,那些维护各类许可证分类的人甚至专门给它设了一个条目。如果当时知道现在这些情况,我可能会做不同的选择,但结果会怎样……谁知道呢?

五、对Turso、libSQL和宣言的反应

Q:SQLite不是开放贡献的,基本上他们避免标准的Pull Request流程,更像是一种门控式管理。但Turso公司fork了它,叫libSQL。他们还发布了一份宣言,你最初的反应是什么?

Richard:每隔五六年就会有人带着风投资金出现,口号都是同一个:比SQLite快10倍。他们应该不是串通好的,但每次说法都如出一辙。十年前还有过一个,那是个行存储数据库。这种事情一直在发生,因为SQLite现在就是那个要被打倒的对象。每天早上醒来我都在想,今天也许有人会做出比SQLite更好的东西,可能明天大家就都转去Turso,一切就结束了,但至今还没有。但只要还能坚持,我就会继续做下去。

Q:从你的角度看,他们提出的那些抱怨,有没有一些是合理的?还是说,很多时候他们的动机其实没什么实际依据?

Richard:那份宣言的核心主张是:软件开发必须遵循GitHub模式,必须使用特定的许可证,行为准则也必须符合某种标准。如果你不照做,就是错的。如果你愿意采用那种方式,没问题,那是你的选择。但我不想那样做。我自己的软件,如何开发和维护,应该由我决定。我并不认为哪种方式更好,只是SQLite的方式已经被证明非常成功,至少对我个人而言如此。如果我当时遵循那种模式,可能走不到今天。我喜欢现在的工作,但如果每天都要处理Pull Request、维护别人的代码,那对我来说就不会是享受了。

六、为什么Pull Request是“免费小狗”

Richard:假设有人给SQLite提了一个PR,说:“我有个新功能,想合进去。”你说这是免费贡献吗?不,这根本不免费。实际上是在要求我替你维护这个功能,替你写文档、测试、维护,可能长达25年。

有句名言:免费分两种,一种是免费啤酒,一种是言论自由。但还有第三种:免费小狗。我送你一只免费小狗,你要吗?一个PR就是一只免费领养的小狗。你不能随便把它们丢掉,在道义上你有责任照顾它们,直到它们自然老去。我不想养任何免费的小狗。这背后也牵扯很多政治因素。如果他们觉得那样做更好,那也行,证明给我看,用结果告诉我我错了。我错过的次数多了去了,说不定这就是下一次转折点呢?但至少到现在,我们这种方式看起来还挺管用的。

七、为什么SQLite能持续26年之久

Q:那你觉得为什么SQLite能一直走到现在?

Richard:除了天意之外,我没有别的解释。为什么过去20年我有幸做这份工作?我做了什么才配得上这一切?当然,有一些因素可能促成这件事:我是个还不错的程序员,但不是全世界最好的,我能指出好几个人比我厉害,其中一些还在为我工作。但我很固执,做事有自己的方式,也愿意质疑那些公认的常识。这些是走到今天这个地步的前提条件。

但说到底,这真的是天意,不是我计划好的,只是长期坚持下来的结果,并且我乐在其中。我花了很多时间想,如果重来一次,我也许能做得更好。但最终无法回避的结论是:这件事能这么顺利,跟我没什么关系。它就是发生了,我很感恩。

Q:我第一次真正看到SQLite被用在某个场景里,好像是Palm Pilot上,对吗?

Richard:对,有人在线上论坛之类的地方说:我在Palm Pilot上跑SQL数据库。不是开玩笑,是真的。那件事让我很受鼓舞,继续往下做。这就是所谓的“极客声望”吧。我之前把其他开源项目放在网站上,每年只有五到十次下载。然后突然有人对这个感兴趣,那种被肯定的感觉很好,也鼓励我继续坚持下去。

Q:小团队是不是你成功的关键因素之一?能对很多事情说不,对某些事说是,这可能就是你走到今天的原因?

Richard:这确实是一个因素,但我也有自己的局限。我不擅长与人打交道。我更喜欢这种状态:房间里只有我和一台电脑,我自己解决问题,不要来打扰我。跟很多人打交道对我来说不是什么愉快的经历。

八、自己写工具(Fossil、Lemon)

Richard:Linus Torvalds很值得佩服,能坚持这么多年不容易。我很庆幸有他,因为我个人还是更喜欢用Linux。

Q:这也是你现在还在用Linux的原因吗?

Richard:我这里有台PowerPC机器,各种平台都有,但Linux绝对是我日常使用的最佳平台。说到Git,我其实不用它来管理SQLite,我自己写了一个版本控制系统叫Fossil。虽然Git现在已经是主流,我写Fossil的时候它就已经存在了。

Q:为什么总要自己造轮子?是因为你觉得最好的工具就是自己写的那个吗?

Richard:当初写Fossil时,只是想解决另外一些问题,没想到它后来成了一个巨大的助力,我没有那样的远见。没有Fossil,SQLite不可能走到今天这一步。原因之一是Fossil本身就是基于SQLite构建的,它也是我们的beta测试平台。当我在开发Fossil时,我是以应用开发者的视角来使用SQLite,站在接口的另一侧看问题,这让我更能理解用户可能遇到的困难,也帮助我把产品做得更好。

另外,Fossil还有了很多Git不做、但我管理项目又必须用到的功能。而且仔细看的话,Fossil的设计完全契合Linux内核那种开发方式,你找不到比它更合适的内核版本控制系统了。它甚至比Git更适合Linux内核。但不是每个项目都像Linux内核那样,对于一个相对封闭的小项目来说,Fossil要远远优于Git。

Q:所以你觉得很多时候需要的工具都得专门为自己定制,所以才会自己动手写对吧?

Richard:是的。所以当问题出现、需要新功能时,我就能自己去实现。另一个例子是解析器生成器。SQLite不用Yacc或Bison来生成SQL解析器,而是用我读研究生时写的一个叫Lemon的工具。除了SQLite,几乎没别人用。但没关系。如果当时我用的是Yacc或Bison,就会受限于它们。但用Lemon,我可以针对SQL语言中遇到的具体问题去增强解析器生成器本身。我能做到别人做不到的事,而且能自己改。但如果用的是别人的工具,那大概也就只能提个Pull Request了。

九、自由意味着自己照顾好自己

Q:如果不自己写,那就只能用一个不再更新的工具,卡住没法动。

Richard:归根结底是一个理念:自由。我们珍视自由。如果往深处一层想,自由意味着自己照顾自己。就像那些背包徒步的人,他们把全部家当背在身上,走进森林,睡在泥地里。你问他们为什么要这么做,他们会说:“就是为了那种在野外独自一人的自由。”意思就是他们自己照顾自己,不住酒店,什么都不依赖。那才是真正的自由。

Q:所以你的工具背后的理念也是这个,是吗?

Richard:自己写工具意味着更自由,你可以自己照顾自己。但由此也可以推出,没有人是完全自由的,我们都或多或少依赖别人,比如我就依赖Linus Torvalds的操作系统。我依赖的人很多,但能少依赖一点,就更好。

十、拯救SQLite的航空航天测试标准

Q:当你知道全世界都依赖SQLite时,你有什么感受?

Richard:说实话,我有点担心。但既然它完全是开源的,也只能这样了。我的设计准则之一就是尽可能把代码文档写清楚,代码里大概有三分之一是注释,而且不是那种模板式的废话,是真正解释我们在做什么、数据结构代表什么、为什么这样设计。你也可以做个练习:去把Turso的代码拉下来看看,随手挑一小段,然后告诉我它在做什么。

我的理念是:写出还没出生的人都能看懂的、比我活得更久的代码。要做到这一点,唯一的方法就是认真写文档、认真做测试。一定要测试、测试、再测试,永远不嫌多。SQLite能维护这么久,就是因为测试做得极其彻底。没有测试,SQLite根本撑不到今天。

据说每架现代客机上,机长和副驾驶都拿着平板电脑,Mac或iPad,用来做飞行计划。我敢肯定那些iPad上的软件并没有经过FAA的严格认证,飞行计划软件恐怕也不达标,但他们都在用。关于飞机上所有东西都必须经过严格测试的说法,其实是个美好的虚构,不过也挺好。

后来我了解到了DO-178B标准,决定试一试。当时我想的是:按照DO-178B的标准做测试,然后靠卖测试结果来赚钱。但事情并没有按那个方向走,我们并没有从中赚到钱。不过我发现,当我按照DO-178B级别做测试时,bug基本上就消失了。那是在Android开发期间。我当时在做测试的同时,Android也在开发中。我们和他们签了一些合同,他们几乎每天都会提交bug报告。我给他做到了100%的MC/DC测试覆盖率,达到了标准。之后Android那边的bug报告率就大幅下降了。

Q:大概有多少?从最开始到后来,数量变化有多大?

Richard:我没有确切数字,但后来几乎没再收到他们的消息。后来当AFL(American Fuzzy Lop,美国模糊测试工具)出现时,又冒出了一大批新bug。一旦模糊测试工具进入视野,我们就遇到了一整轮新的bug,那是另一个完全不同的情况。因为DO-178B级别的测试并不能发现模糊测试能发现的那种类型的bug。所以我们也不得不处理那方面的问题。等到我们把那批问题也解决之后,情况就好转了。现在又出现了一个新的bug来源:AI。

十一、Richard对AI和编码代理的看法

Q:对你这种“自己写工具”的理念来说,讽刺的是:AI能帮你写工具,但你却搞不清AI写的代码在做什么。你怎么看?

Richard:我对AI的看法可能每天都在变,因为我们还不太了解它。但我经常用,跟它聊天很有用。有次我问ChatGPT关于SQL表达式短路求值的问题,它给了一篇很详细的回答,涵盖了各大数据库的做法,包括SQLite。但让我觉得有点诡异的是,它似乎知道我就是SQLite的作者。

我对AI的体验是,它们在帮你查找信息方面确实非常出色,但你不能完全相信它们说的话。很多时候它们完全错了,但却说得理直气壮。有人曾跟我说,人类其实早就有AI了,只不过我们一直叫它诡辩术。这个说法挺精辟的。至于未来一个月或一年内会不会有变化,我不知道。

最近,我们的论坛上收到了一份bug报告,问题确实存在,而且还没有对外发布过。事情的起因是,我在做优化时犯了个错误,引入了一个bug。报告者的邮件地址是非公开的,只有我能看到。发件人来自某家公司,姓名让我怀疑整封邮件是AI生成的。它发现了bug,写好了报告,直接发到了论坛上。后来我们确实找到了一个同名的人,所以也许真的是他发的。但我也在琢磨,AI是不是已经进化到可以自主登录论坛、提交它自己发现的bug了?而且我根本分辨不出那到底是真人还是AI。

Q:那你有用过写代码的代理工具吗?

Richard:我没有用那种专门写代码的代理工具,就是那种“帮我写个程序”的。但我确实会用聊天功能问问题,比如“我需要一段代码做某件事,请告诉我怎么写才能在某个平台上做128位无符号整数乘法”,这比自己琢磨快得多。不过有意思的是,你必须自己去验证正确与否。

十二、给想fork SQLite的人的建议

Q:如果一名年轻开发者说想要fork SQLite并构建更好的东西,你有什么建议?

Richard:如果你真想尝试,欢迎。很多人都试过,我不拦你。但我觉得那个时机已经过了。这种事需要花25年,投入大量的精力,不是周末在卧室里就能做出来的,不过你大概也能从中学到点东西。

以前有人试过,会在Twitter上发帖讨论。我当年能在那个时间点做这个项目,确实很幸运。我觉得今天很难再复制类似的事了。我不知道软件开发的未来会走向哪里,尤其是AI出现之后。它不会消失,但也许会变成一种更像手艺活的东西?我不确定。

整理丨dbaplus社群

来源丨网址:

https://www.youtube.com/watch?v=x8_ZZhRL3YU&t=1733s

dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn

跳转微信打开