SQLite的作者谈软件开发中的自由
SQLite的作者D. Richard Hipp好像一名自给自足的“末日准备者”,从文本编辑器到语法分析器,从大名鼎鼎的数据库引擎SQLite到鲜为人知的版本控制系统Fossil,凡事都要亲力亲为,牢牢地把握住了他在软件世界的命运。
有意思的是,SQLite使用Fossil来管理其源代码,而Fossil又用SQLite来存储代码仓库的信息。
以下内容节选自他在一次名为The Untold Story of SQLite With Richard Hipp的访谈节目中,与主持人Adam的对话,略有修改。
SQLite的作者D. Richard Hipp(美国 1961-04-09~)
Adam: ……除了C编译器和libc中的一些东西之外,SQLite基本上只依赖Richard自己构建的软件。他甚至构建了自己的版本控制系统和自己的Bug跟踪系统。这正是Richard所要的自由。
Richard: 你有没有想过“自由”这个词意味着什么?自由就意味着自己照顾自己。人们徒步去长途旅行,他们背着旅途中需要的一切,这就是自由,因为他们自己照顾自己。软件开发也是如此,自己编写的组件越多,自由的元素就越多,因为你不再受别人的束缚。
假设我使用Berkeley DB作为SQLite第二版的存储引擎,当时Berkeley DB确实是开源的,但后来卖给了Oracle,那么好了,不支付许可费就拿不到后续版本的源代码,这就突然成了一种束缚。SQLite中的语法解析器叫做Lemon也是我自己编写的,这样我就没有必要使用Yacc或Bison。人们可能会感到不解,“你为什么要放着现成的工具不用?”但事实证明,当我需要一些Yacc或Bison中不支持的功能时,我可以随时调整、升级我自己的语法解析器。SQLite的版本控制系统也是如此,SQLite一开始使用的也是CVS,因为早在2000年,几乎所有项目都在使用CVS,CVS是当时占主导地位的版本控制系统。但进入到2000年代中期,我们需要更好用的系统,于是我们自己实现了一个分布式的版本控制系统。
我试过Git,也试过Mercurial,但我感觉只有自己写一个版本控制系统,才能满足自己的需求,于是我创造了自己的版本控制系统——Fossil。现在Fossil本身就是一个项目,而且非常好用。Linus Torvalds编写了Git来支持Linux内核的开发,Git能够充分满足Linux内核开发社区的需求。所以,如果你正在研究Linux内核,那Git绝对是完美的版本控制系统。
但对于其他项目而言,Git可能并不合适。至少对于SQLite来说,Git非常糟糕,所以Fossil才是真正适合SQLite的版本控制系统。我自己编写版本控制系统就是为了满足自己的所有需求,而Fossil完美地解决了我们的问题。所以只有自给自足才能掌控自己的命运,越少依赖第三方,就越自由。
Richard: 这是一次追求自由的经历。我感觉自己属于……你可能在YouTube上看到过这种人,他们的生活完全靠自给自足,他们有一小块土地,然后自己种植食物,甚至不使用水、电、气等公共设施,他们这样的人叫什么来着?
Adam: 你是说生存主义者(survivalist),还是末日准备者(preppers)?
Richard: ……我身上可能也有末日准备者的元素,虽然还没有到那种连超市都不去的程度,但我确实很欣赏人们想要掌控自己的命运和事必躬亲的态度。我眼下使用Gmail时就遇到了一些问题。咱们在准备这次采访时,你可能也注意到了,通过Gmail联系我的邮件有时候发不过去(bounce back),我一直在努力想办法解决这个问题。所以我最近又想要编写一个自己的邮件服务器,甚至在咱俩谈话期间我还在把自己的想法记录下来。这是一个大问题,虽然解决起来至少与编写数据库引擎一样困难,甚至更困难,但我不想受制于Gmail,我不想让他们控制我的命运,我不想让他们控制我所有的交谈记录。我要掌握自己的命运,纵使我会经历很多痛苦、很多工作和很多努力。我可以出去租用云中的虚拟机来自己运维邮件服务器,而不需要依赖第三方,避免电子邮件受控制。
问题云上的主机不也是第三方吗
Adam: 我很喜欢你刚刚举的背包的例子。我从中得到的一个启示是自由会带来不适或痛苦。你不得不肩负这一切。
Richard: 是的,如果你想要自由,就得自己做事情。如果有人跟你说“让我们为你解决问题”,那你就要有所警惕,因为他们真正想说的是,我们将会剥夺你的一些自由。
Adam: 不过这也需要权衡吧,比如我就希望有人帮我割草,这样就能享受更多的闲暇时光。
Richard: 我也是。
Adam: 但我就因此失去了修剪方式或其他方面的自由。
Richard: 但我还是会在车库里放上一台割草机,万一雇不到人来修建草坪,至少我还可以自己干。
Adam: 换做我那就麻烦了,因为我的手推式割草机坏了。