E17·通则与例外:关于 Bitcoin Core 的闲聊
曾汨: 听众朋友们大家好,欢迎收听播客《亿聪哲史》第 17 期,我是主播曾汨。
阿剑: 我是主播阿剑。
曾汨: Bitcoin Core 是比特币网络的主流客户端实现,关于它的开发在整个网络中的角色也一直是众说纷纭,今天我们想围绕这个话题来展开一些讨论和思考,然后我们请来了老朋友 YY 和 Jeffrey,先和大家打个招呼吧。
YY: 大家好,我是来自 Lightning Labs 的 YY,主要负责 LND 的开发。
Jeffrey Hu: 大家好,我是 Jeffrey,来自 HashKey,主要负责投资方面的研究。
阿剑: 让我们感到开心的事情是时隔一年,《亿聪哲史》又一次得到机会。在一个线下的空间当中,聚集我们的主持人和我们的嘉宾。并且具有特殊意义的是这一天也是披萨节,我们非常高兴能够在这一天跟老朋友见面,聊一聊关于比特币的话题。
曾汨: 好的,那我先来说一说为什么想来聊比特币这个话题吧。是因为在 2025 年年初的时候,Bitcoin Core 的一位开发者 Antoine Poinsot 在他的个人博客上连续发布了几篇文章,提出了他对 Core 这个项目的定位和开发方向的一些想法。然后这几篇文章呢,也在 Delving Bitcoin 这个论坛上引发了进一步的讨论。不同的开发者之间对这个文章的观点存在比较大的分歧。当然呢,我想可能绝大多数听众朋友并没有阅读过 Antoine 这几篇文章以及社区相关的讨论。因此,我想先在这一期播客的开头给大家简单介绍一下这几篇文章的大致内容和它的一些观点。首先,Antoine 提出了他对 Bitcoin Core 开发现状的一些观察。在他看来,现在的 Bitcoin Core 的开发当中,每个开发者都有自己的兴趣和小目标,但大家的方向各不相同。有一些开发者想为 Core 加更多的钱包相关的功能,也有一些开发者想让节点变得更加高效,还有一些开发者更关注在协议本身的安全。但由于现阶段缺乏一个统一的标准来决定我们应该支持什么样的特性,应该拒绝什么样的特性?所以不断的有人在提出新的功能,但现有的很多功能又缺乏人来维护,最后导致的结果就是 Bitcoin Core 的功能越来越多,代码越来越复杂,项目的范围越来越分散,每年都有新的接口新的特性加入,但是,实际上,负责审查代码和保障 Core 的安全的核心开发者数量并没有变多。那么这里就带来了一个问题,那就是开发的资源是有限的,我们没有办法为每一个功能都分配足够多的精力,这样就一定会带来取舍,因为你每增加一个新的功能都会带来新的代码,
也就意味着潜在的维护的负担,潜在的 bug 都会变得更多。在有限的开发资源下,你一味的去追求新的功能,就会牺牲现有的代码的质量。所以呢,Bitcoin Core 需要在安全性和新的功能之间找到一个恰当的平衡点,来决定应该做什么,不应该做什么。那么 Bitcoin Core 的核心使命是什么呢?在 Antoine 看来,Core 的用户不仅仅是使用这款软件的用户,实际上它更是所有比特币网络的用户。因为历史原因决定了绝大部分人使用比特币钱包服务,包括交易所,最终都会依赖于 Core 节点的代码来保障安全和共识。所以作为比特币网络的守门人,他的首要任务是确保其作为比特币网络的强大稳定和安全的支柱。这就意味着 Bitcoin Core 的可靠性安全性是最重要的。他认为应该用这个作为标准来决定开发任务的优先级。基于这些思考,Antoine 提出了一个思路,就是说与其让所有的开发者困在一个庞大的难以协调的项目里面,不如我们把 Bitcoin Core 拆成三个独立的部分。第一个是 Bitcoin Node,就是专注在节点本身,也就是最核心的验证、网络和安全的功能。第二个是 Bitcoin Wallet,专注于钱包的功能。第三个是 Bitcoin GUI,专注于图形用户界面。将这三个模块单独发布,然后让它们之间通过一些定义比较良好、稳定的接口来进行通讯。在这样的情况下,我们可以让 Bitcoin Node 更专注于它在网络关键基础设施的核心使命,而不用受到钱包和图形用户界面开发周期的影响。而钱包和 GUI 的开发可以更加的独立和灵活,不用遵循 Core 的发布节奏,
这样就可以吸引更多专注于这些领域的开发者参与进来,像现在的 BDK、rust-bitcoin 这些新的钱包项目一样实现快速的迭代。当然了,这样的拆分也会带来很多开发上的挑战。所以呢,在 Antoine 的文章发出来之后,社区里面讨论非常激烈,分歧也很大。大家多多少少都表达了对 Core 的开发现状的一些不满,但同时呢,在具体的细节上,大家的看法又各不相同。所以我们呢,今天其实就是想围绕着 Antoine 的这些文章,以及大家的一些讨论,来展开今天的一些思考。那么我今天想到的第一个问题其实是关于 Bitcoin Core 这个软件本身。在 Antoine 这个文章发布出来之后,然后社区里面大家对 Antoine 定义的这个 Bitcoin Core 的用户画像也有一些分歧。像 Antoine 他认为 Core 的用户是所有比特币网络的用户,但是也有一些人认为 Core 的用户就是使用 Core 这个软件的用户本身。所以前者认为就是我们要照顾所有用户的感受,但后者认为说我们要优先考虑 Core 这个软件本身的用户,只有这个软件本身足够好用的时候,才会有更多的人来使用 Core 这个软件,才会让比特币节点越来越多,让网络更加去中心化。所以我今天想到的第一个问题就是,先想问一下大家,你们平时是怎么使用 Bitcoin Core 这个软件的?要不 Jeffrey 先来吧。
Jeffrey Hu: 好呀好呀。对,这个问题其实是一个挺好的问题,因为我平常也是在运行那个 Bitcoin Core 的这个节点的。然后,其实我运行的方式还是比较简单的,就是在一个服务器上面去运行这个节点,同时可能还会搭配其他一些应用,比如说闪电网络的节点,以及相关的一些配套的监控,以及比如说便于自己去运维的这种前端界面等等相关的一些软件。所以对我来看,Bitcoin Core 其实是一个我去进一步使用比特币网络上面的一个比较基础设施的一个组件。除了运行,比如说我在运行自己的闪电网络节点之外,那我可能平常我自己的,如果需要用到钱包,比如说 Sparrow 的钱包,我也会优先去连我自己的节点。这样的话我可以去对于整个的一个是隐私性有更好的保护,再一个是对于比如说一些数据可能我能有一个更好的一种掌控,所以这个是我目前使用的一种方式。那回到这个问题,其实对于我来说,就比特币更像是一个我去接触到整个比特币网络上面的一个比较基础的一个组件,或者是一种基础设施吧。所以这个是对于我来说的一个最直观的一种体验。那么回到刚才曾老师的另外一个问题,就是 Bitcoin Core 到底是面向于比如说这款软件的自己的用户,还是说整个网络的用户?其实我自己感觉可能会。更偏向于整个网络上面的用户,它并不局限于就是 Core 本身软件使用者本身,因为可以看到整个 Bitcoin Core 的使用者或者采用率,其实在整个网络上面是非常高的。前段时间应该是在 95% 以上,最近可能会稍微下降一些,当然也可是和另外一个话题,跟 OP_RETURN 的这个一些争议是有关系的,
可能最近掉到 90% 左右,我看有人还在发推特说是采用率是近期的一个新低了,对,所以在这么高的一个采用率下,它其实已经肯定不可能只是局限于它自己本身用户,它的一些相关的,比如说转发的策略,或者其他的一些新的功能,就势必还是会对其他网络上的其他人都会有影响的。也或者说我们可以说 Bitcoin Core 是比特币现在一个事实上的一个标准的一种制定者。或者说一种推行者。有这么一种角色在这块的。就我们在看比特币这个阶段的时候,也可能需要从两个方面来看。一个是从比如说作为我个人运行节点的这种用户角色来看。另外一个可能就是要从比如对于整个网络的影响来看。
YY: OK,呃,我的话。用 bitcoind 也是自己有个节点。然后主要就是三个方面吧。第一个是因为我开发 LND 嘛,所以开发的时候就需要去测试跟 bitcoind 的兼容的怎么样。比如说有时候它发新版本,它有可能会把我的 LND 里面的一些功能给那个 broke 掉,所以我就需要去时不时的去开发。然后第二个就主要是测试。测试的意思是说之前可能为了理解一些新型的针对闪电网络的攻击,比如说很多是针对 mempool,或者是怎样的话,这个就需要自己 local 去搭一个类似的 mempool 的环境,然后在里面去测试一些什么 fee bumping 之类的,它会有怎样的表现。最后一个也是比较重要的一点,就是主要是学习和对比。因为除了维护 LND 之外,我们包括我自己也是在维护那个 btcwallet 和 btcd,然后 BTC 的开发是相对落后很多的,所以有很多地方并不知道应该怎么去实现一个功能的时候,会去看一下 Bitcoin Core 是怎么实现的。这个我们是用的比较多的。
阿剑: 这个 btcd 也是一个比特币的节点实现是吗?
YY: 对的。既然说到这里的话,像 LND 它其实背后是支持 bitcoind,然后支持 Neutrino,然后支持 btcd。然后 btcd 是存在于一个叫 btcsuite,就一系列基于 Go 的这个语言上。很早就开发出来的一套比特币的客户端和比特币的钱包。所以我是,这个可能后面详细聊,但是我是非常喜欢 AP 提供的这个方向,就是开始分开来做,因为确实在这边,至少在 Go 这个生态里面,我们就是很早就开始分开了,就是节点就是节点,钱包就是钱包,这样开发起来确实也会更好一点。
阿剑: 我不知道我算不算一个 Bitcoin Core 的用户,因为实际上我运行的软件是叫 Bitcoin Knots,它实际上是一个 Bitcoin Core 的 Fork。是复刻了一部分的 Bitcoin Core 的这个软件,然后它也有一些额外的这个特性,但在使用的用法上其实跟 Jeffrey 说的差不多,一方面是它作为一个比特币的节点,验证比特币的整个网络的这个运行,然后另外一方面就是自己会使用包括闪电节点,包括个人的钱包,会使用它来作为跟比特币网络通信的手段,作为获取数据的这个方法,大概是这样。
曾汨: 我现在我的那个运行比特币分成两部分。一个是我有一个树莓派在上面跑一个节点。这个节点的作用,第一个就是我的电脑本地的 Sparrow 或者相关的钱包会连它来发交易。第二个就是我查那个 mempool 里面查交易,我会通过自己的节点去查。它起到这两个部分的作用。当然我电脑本地也会跑一个 Bitcoin Core 的一个客户端,但那个客户端我自己是修剪过的,因为我不想让它占太多空间。它更多是一个就测试的作用,因为很多那种比较前沿的或者一些新的那种钱包,它只能让你连自己的节点用,所以你需要电脑上本地跑全节点来做这个测试。
阿剑: 你要说这个的话,那我也会用比特币来连接比特币的测试网,去测试一些钱包的功能。确实是。
曾汨: 所以就是 Core 这个软件本身好不好用,会不会影响你们决定跑不跑 Core?
YY: 对于我来说肯定会影响。这是一个鸡生蛋的问题。它不好用的话,它也不会有这么高的市场占有率。虽然老胡刚刚说它已经跌到 89% 了现在,但是确实就是必须要跑它。因为既然大家都在跑这个节点的话,你就必须要知道你的一个新的功能跟上去之后,在别人的节点上会产生什么样的结果?这就是你也不得不去跑它。
阿剑: 我自己的想法是这个问题可能还得细分,因为在蛮长一段时间来,确实是 Bitcoin Core,就是说它面向普通用户的这部分功能。也就是它的钱包的这个功能,它的特性怎么样其实说实在的不太会影响我到底用不用它。但是我的确知道有一些人他们会很希望就是用 Bitcoin Core 的原生的这个钱包。他们会觉得这个 Bitcoin Core 的他的这个一体化的这个东西是最值得他信任的。就是哪怕你跟他说 Bitcoin Core 的这个 wallet 的部分体验,其实跟现在主流的面向消费者的这个钱包的特性有一些区别。他们依然会觉得我不我就用 Bitcoin Core。对。
YY: 确实就是这个也没办法,就是它确实是一个非常值得人信任的一个,可以说是品牌吧,就一个一个 label 在那,你就会觉得会做的很好。
阿剑: 对,但是这里面就是说如果你的这个好不仅仅局限在它的某一个模块的好不好的话。就是说它的整个实现它的一些变动是不是你会非常关心的话,那我的答案是是的,因为我原来也运行 Bitcoin Core,但是也是因为某一些原因,使得我转向了另外一个它的这个复刻的这个客户端。也就是说,它能不能在某一些方面,如我的心愿确实是会影响,我要不要去使用它。
Jeffrey Hu: 对,刚才阿剑的回答倒是提醒了我一点,就是确实有很多用户会用那个 Bitcoin 的这个自带的这个界面去操作他自己的钱包。因为比如说我们看就经常在 Twitter 或者其他地方社交媒体上会看到,就有人会晒出来以前很早他自己的比特币的余额或者地址。或者他说我很高兴我找回来了原来我很久以前的比特币。然后他 po 出来的照片可能都是会是当时的那个界面,就 Bitcoin-Qt 的这个界面,然后去上面显示的。然后我最早接触比特币,其实也是接触通过这个就在运行在 Windows 环境上面的这个。当时可能还不叫这个 Bitcoin Core 的这么一个名字的这么一个客户端,然后去一方面你可以去参与到网络,另外一方面你还可以选择性去进行挖矿,但是最重要的方式,或者是最跟用户,最直接的可能还是保管自己的比特币。或者是收发比特币。所以这也是一个在目前可能大家用户来看的话,可能是比较少见的一个功能。其实在很长一段时间内可能是一个主流的功能,但大家可能现在用的不是特别多。
阿剑: 好,那么我们就顺着这个问题往下问,那基于这个现状的话,你们是否会支持这个 Antoine 他提出的这种分切比特币项目的这种办法,因为刚刚 YY 其实蛮支持的,因为他他自己觉得他们也有一些在使用其他语言开发的经验,基于这些经验,他们认为这种分切也会取得一些不错的这个效果,我想知道你的倾向是什么样的呢?
Jeffrey Hu: 对,我也会倾向于这种方式,可能会进行更好的一个拆分。这样的话,他们之间的这种耦合性也会更小一点,然后对于用户的这种困惑也会相对更少。然后我在这里可以再补充一个信息吧,就是在 Bitcoin Core 这个 29.0 的这个版本里面,其实它总共会发布 7 种的就是你最终要运行的这种进程在这块。当然你可以选择这个是不是运行这个其中的某一些,比如说 Bitcoin Wallet 或者是 Bitcoin GUI 等等这个二进制的这个文件,去产生一个独立的一个进程。对,所以这个也是对于用户可能比如说一开始你要去维护的话,我认为是会造成一些困惑的。所以可以看到就是在上一期的那个 Bitcoin Optech 里面,其实会提到目前也有一些解决方案。比如说添加一个这个 Bitcoin 启动的一个封装器,就是我不用运行那么多,我只要运行这个封装器,那我可以选择性去把这么各种二进制进程,可能都可以去进行启停或者维护。然后相应的话那可能也会需要一些进程之间的通信协同的一些步骤。所以这个也是在现有如果不改变架构的这种情况下,可能一种妥协的这种方式吧。那么如果能够把这种就二进制之间的这种功能,或者是说这个整个在一个项目里面的这个各个 feature,如果能拆的可能更独立一些的话。我认为对于这种软件维护可能还是一个比较好的一种方式。
YY: 我比较好奇,就看你们谁知不知道就是比特币现在就是用他的钱包的人多吗?直接用他原生钱包。
阿剑: 据说不那么多。但是这个使用的话,你得给它一个定义,为什么呢?因为严格意义上来说,Sparrow 用的也是 Bitcoin Core 的钱包模块。就是它也必须在 Bitcoin Core 里面去做一个这个钱包的这个账户,然后让这个 Bitcoin Core 的进程来监控这个钱包这个东西。
YY: 哦,那就是使用了。
阿剑: 对,然后 Sparrow 再把它拉过来作为一个界面。
曾汨: OK,可以具体解释一下吗?
阿剑: 是这样的,就是说当你使用比如说举一个最典型的 Sparrow 的这个钱包来说的话,在你创建你的这个钱包的时候,它会将这些你创建的,比如说它的这个公钥的这个信息,放到 Bitcoin Core 的这个节点里面去生成一个新的这个钱包。并且就使用 Bitcoin Core 的这个钱包模块,让 Bitcoin Core 的这个整个进程来去监控跟这个钱包相关的这些交易。实际上也就是说他在 Bitcoin Core 的里面是新建了一个观察钱包,然后把公钥信息填进去,然后让 Bitcoin Core 来去监控这个钱包的这个包括交易的信息,包括你收发交易的这个方法,然后当 Bitcoin Core 这个软件的内部有了这些信息之后,Sparrow 再把这些信息拿过来给用户做一个 UI 上的这个呈现。也就是说,尽管构造交易的这部分的确是 Sparrow 完成的,但是跟网络的这个包括余额监控,包括收发交易的状态的监控,这一部分的确是由 Bitcoin Core 作为它的数据的后端来完成的。所以在这个意义上,你可以说 Sparrow 我依然使用了 Bitcoin Core 的钱包模块。
曾汨: 但这个使用跟我们理解的使用不太一样。
阿剑: 对。
曾汨: 比如说我作为一个普通用户,我电脑上没有装比特币,但我一样可以用 Sparrow。
阿剑: 可以,对。就是说如果你使用一些公开的服务器来给 Sparrow 提供这个数据的话,我不清楚它的背后的实现会怎么样。但是如果你用的是本地节点的话,它的实现方式就是像我刚刚说的那样。曾老师你会支持分切的方法吗?
曾汨: 我倾向于支持,首先因为我自己不是开发者,我不太懂,因为论坛里面有些人说分开之后其实它的复杂度并不会降低,可能要维护的功能量会更大,但我对这方面不了解,我仅从我用户视角的角度来看。Antoine 的这些理由是能够说服我的。因为比如说我作为一个节点用户,我最常用的一种场景是我的节点装在树莓派里面,我的钱包在本地。如果我的 Bitcoin Core 的节点,我只需要它的 Node 这一部分功能就行了,其他的部分交给我别的地方来实现。那这样的话,如果它把它几个部分解耦掉,如果每个部分能有更好的效果呈现,我是愿意支持的。包括他提到的有一个好处是说,比如说我们把钱包独立出来,那这些单纯对钱包感兴趣的开发者,我可以只去开发这一部分。我不需要去了解网络其他更复杂的世界。整个代码仓库我不需要完全去了解,我只需要专注钱包这一部分就好了。这样会让 Bitcoin Core 里面钱包部分的功能开发得更快,开发得更完整。因为他们当时提到有个例子是那个 PSBT v2,这个标准已经出来很久了,支持的钱包有很多,但是 Bitcoin Core 出于种种原因吧,到现在还没有支持。像这种例子还有很多。如果说把这几个部分独立出来之后,能够让钱包也好,GUI 也好,他们的开发加快,让更多新的对某一个部分的感兴趣的开发者加入进来,我觉得这个从整体上来讲是一个好的事情。
阿剑: 那么我在这边顺着刚刚 Jeffrey 的叙述,再提供多一些背景信息。实际上 Jeffrey 提到的这个在 Bitcoin Core 的软件发行版中会提供很多个二进制文件,其实这个就是 Bitcoin Core 这个项目过去一段时间来做的一个子项目叫做 Multiprocess,也就是多进程这个项目的具体的这个成果。而这个成果也恰好是 Antoine 这个文章,他的落脚的一个起点,就是他认为我们已经有了这个 Multiprocess,已经有了这个成果之后的话,可以帮助我们去做这个分切,但是在 Delving Bitcoin 的论坛里面也有另外一位开发者,就是 Anthony Towns,他是提出两部分质疑,一个质疑是 Multiprocess 是否真的能够帮助我们形成这样的分切,但他的另一个疑问是更加直接的,他是认为很有可能即使在分切的情况下,比如说你的代码的标准。或者是其他的一些方面不改变的话,可能并不会起到太多的这种降低相互影响,或者说能够加速开发的这个效果。所以他自己个人对这一点是抱有怀疑的。那么与此同时,包括他在内,他和另外一位非常活跃的论坛参与者 David Harding,他也是 Mastering Bitcoin 第三版的作者,表达了一个相同的担忧,就是说如果我们真的实现了这样的这个分切,它是否会真的会给用户带来好处呢?还是说这意味着某一部分开发者,他们其实可以名正言顺地、堂而皇之地不再理会比特币。它本身作为一个项目,它希望做到的事情。也就是一个免信任的能够抗审查的货币。
在 Anthony Towns 和 David Harding 看来,保留 Bitcoin Core 的这个钱包模块并且去参与它的开发,实际上是保证我们这些开发者能够不要跟用户割裂,不要跟用户隔离,能够参与到他们,能够保持跟他们的联系,并且保持对 Bitcoin 这个项目本身的愿景的诚实的一个重要的方式。那么我在这边实际上会更倾向于他们的立场,不管是 Antoine 还是 David Harding,他们其实都提到了 Bitcoin Core 的钱包模块和 GUI 图形界面模块。在开发的过程当中,现在面临着一个非常严峻的情形。比如说 Antoine 他说 GUI 模块就是图形界面模块,已经有整整一年的时间没有合并任何 PR 了。就是你没有任何合并任何新的这个代码。而那个 David Harding 也指出,他说,比特币的这个钱包模块在过去的有一段时间,曾经移除了很多的这个 RPC 的这个接口。并且在近 10 年间,据他自己了解,没有添加任何就是以 Bitcoin Core 作为这个数据后端的,没有给这些钱包增设任何有用的这个接口。所以整个状况实际上是大家可以得到一个基本上的一致意见,就是其实是比较严峻的。可能正是因为这个原因,David Harding 他倾向认为,Antoine 他现在的这个方法是不太合理的,因为你看到的这个现状实际上是一个被破坏的现状。如果你基于这个现状就说,Bitcoin Core 的钱包模块已经不太有人用了,没什么人用,然后我们干脆给他来个切分,这个在他看来是不合理的,因为在他看来并不是一个理想的情形。
YY: 具体的争论我没有看。确实如果只是因为说现在钱包没人用,然后又把它切分出去,这个理由照我看来也不是很充分。但我也不觉得这是一个理由。我详细说一下为什么觉得那个切分会更好吧。可能想说的东西有点多啊。首先,我想说一下刚才说的所谓的复杂度,到底是切分复杂度高,还是合在一起复杂度高?我的开发经验告诉我,肯定是分开之后,你的复杂度在各自的切开之后的独立的项目里面的复杂度肯定是会降低的。但是对同一个公司或同一个团队来讲,你的整体的复杂度肯定是上升的。所以这就意味着一个问题就是 Bitcoin Core 它怎么去看待它切分之后的这三个子项目。它是觉得要自己一定要我们自己 Bitcoin Core 来做这个事情,还是说有不断的其他的团队可以加入做这个事情。我觉得这是它们需要考虑的问题。在这里我会觉得,你切分开之后,你反倒可以更好地去分配你的任务。这样的话,你可以让更多的团队参与进来,然后更多的测试,更多的功能开发。这个在我看来是一个非常好的事情。再说到一个加速开发,特别是提到效率,就是在工程上你要提效率,你说的是什么的效率?这个可能它在原来的文章里也没有讲清楚,但这里说的效率是,比如说,是整体的一个 bitcoind 的那个 release 的那个周期变更快了,这个叫效率提升,还是说它的代码变得更安全,还是说有更多人参与进来,所以这个也是一个开放的问题。还有一个很重要的问题就是到底谁才是用户。像我们自己 LND,我们就是感觉是一个很大的用户。因为我们是强烈的需要使用关于节点这部分的功能。关于钱包这部分功能,我们从一开始就没有使用。
一部分原因是因为我们更好地契合我们自己的语言,因为我们用 btcwallet。还有一个很重要的语言是,Taproot 升级之后,Bitcoin Core 那边的开发特别落后,我们需要做一些极端 customized 那种定制化的脚本的话,在它的钱包里面它是不提供这样的功能的。所以这个就是一个很大的一个点,就是大家为什么会 turn away,就不会去用他的钱包。再到后面再聊的话就是,如果你想把三个都绑在一起的话,那用户是不是,刚才老胡也提到,用户现在是有了这样的选择。但是我觉得整体上来说,我是非常倾向甚至是坚定支持把它分开的。一个是从工程开发的角度讲,从架构的角度讲,你把三件本来就不是那么强相关的事情分开做的话,得到的最后的效果肯定是更高,因为这个可能就是现在社会发展就是这样,就大家是越来越分化,越来越高度集中的 specialized 的领域。另外一个就是很现实的问题,就是我们自己现在非常非常头疼的一个问题,就是刚才我提到那个 release cycle。我们每发一个新版本,用户要升级,但用户不愿意升级。实际上到了现在,就是我们发现还是可以看到用户在用一个很老的一个不是很安全的版本。但我相信大家去看 Bitcoin Core 的话也是有一部分用户就是选择不升级。你不升级的话就说明如果你把三个项目都放到一个项目里去做,每一次升级,比如说今天说我的钱包提供了一个很 fancy 的新功能,我是等着说一年升级两次这种每次搞一个很大的升级但是很慢,还是说我一个月升级两次,这种可以让一些很新的功能,实行这种小而快的 release 的方式。两种方式都会有各自的问题。
比如说现在如果比特币里面有一个关于安全的漏洞,它又不想公开来说,我们的一般做法就是说藏到某一个 feature 里,然后把它藏在里面,然后可能过一年之后告诉大家 OK 这个安全漏洞。现在夹上一个情形就是 OK 我的 wallet 更新了一个新的功能,我想把它加进去,但因为用户抗拒升级,所以我就会选择说等到我的其他比如说在那个 node 里面也加了一些功能,然后最后都合并到一起,搞一个半年一次的升级。但这样的情况就是如果在这期间你发现了一个安全漏洞,你要怎么办呢?用户没有办法很快的去得到你的那个 patch。所以这是一个很大的问题。这也是为什么从 release 的那个就是版本更新的那个角度来讲的话,你分开去做肯定是最好的。对。
Jeffrey Hu: 对,其实这个提到了一个很好的一个话题,就是其实也是在那个 Antoine 在另外一篇文章里面,我看应该他也是提到的,就是 Bitcoin Core 项目的方向。这篇文章里他提出来的一个问题吧,就是说 Bitcoin Core 其实比较缺乏可能明确的项目范围,就导致开发者可能会对他可能认为比较优先的这个需求可能会更重点去开发。然后可能另外一些功能可能就会忽略,那这样的话也会造成整体项目可能会缺乏一个统一的方向,那在我看来,其实可能还会就刚才 YY 说的另外一个问题,就是对于比如说安全漏洞跟我的新 feature 之间我怎么去统一。那么其实回到就是 Antoine 那个对于 Bitcoin Core 项目方向这块来说的话,我认为可能这个项目整个是在各个需求之间会不断的要去做平衡。就除了是不是拆分之外,实际上可能更广义的一个问题是在于整个的这个功能之间怎么去做一个更好的这种协调。一方面是安全的漏洞,对吧?就比如说有一个新的安全漏洞,那我是不是要升级?因为理论上,Bitcoin Core,你其实可以运行一个非常老的一个版本。就前段时间我还看了一下,可能你现在还可以运行大概可能十几年前的一个 0.7,0.8 左右的版本都还是可以运行的。如果你去完全不 care 一些工程上的漏洞的话,你是可以去跑的。但是如果有一些安全的这种风险的话,你肯定还是建议要升级。那么这些安全升级的东西呢,是不是都跟一些新的功能,比如说非共识规则方面的一些,像 mempool policy,就是叫我们叫交易池的这种策略方面,是不是有一些比较强的一个绑定。因为就我们刚才聊的那个话题,
就 Bitcoin Core 其实一直以来是都在占有 90% 以上的这种网络的节点的份额。那么它无论修改怎么样的一种交易池的这种策略,都是可能会对网络有很大的这种影响的。所以比如说我在某一个版本里面既加上了这个安全的漏洞的修订,然后又加上了这个一些 mempool policy,那么是不是我就相当于是对于这个版本里面,我绑定了两个不太相关的一些东西。那么这可能是一个不同需求上的一个要去平衡的一个事情。那还不要说可能我们还会有一些更大范围的一个新的功能,比如说涉及到协议层面共识上的升级,比如说我要新增什么样的一些 opcode,那可能就是一个更大的一个话题。所以相当于是 Bitcoin Core 的开发者,可能需要在起码这三个范围内,可能会要不断地做平衡跟修改。那么这可能是一个比较困难的事情。对,所以就抛开我们刚才说到的这个具体软件工程上面如何拆分,可能如何合并更加高效,更加有利于整个维护之外的可能更大的一个话题。
阿剑: 我这边加一个信息吧,就是也是刚刚 YY 提醒了,因为他说 LND 其实完全不使用 Bitcoin Core 的钱包模块,但是另外一个著名的闪电节点 Eclair,它是明确的把 Bitcoin Core 的钱包模块作为它的保存私钥,并且签名了一个模块。所以比如说如果我们说哎呀,好像普通用户没有在使用 Bitcoin Core 的这个钱包模块了。我认为这个可能也是有点太过无端了,可能还是有一部分用户在使用它,虽然《亿聪哲史》它因为开发语言的关系,所以它可能用户量肯定没有 LND 这么大,但我认为还是有一部分人在使用。
YY: 对,Eclair 确实,而且他其实他那个软件说一下其实也写挺好的,但之前我们聊的时候他会也会遇到一个问题,就是我们现在想要上 Taproot 升级吗?然后因为比特币的钱包并不原生的支持你去做 Taproot 上的一些操作,导致他们。可能想要开始搞一些就是定制化的自己的钱包,但他们也一直没有做。就是遇到这个时刻,你就会意识到 OK,这是一个很头疼的问题。而且如果 Bitcoin Core 能够单独的把 node 这部分功能放出来,其实现在大家很多也都只是用它做 node 功能。我觉得这个对整个生态也是特别好的,因为大家还是希望说看到有更多的团队参与开发,然后写出属于自己的一套,至少在钱包这一层嘛,我们知道有像我刚才说的 btcwallet,然后有 BDK 这些,大家肯定都是会说我想要自己开发一套,然后大家去竞争,然后谁是更好用更安全的钱包,我觉得这个对生态也好。其实回到工程这一块,刚才说了架构,如果听众里有工程师的话,我想说一下就是我们开发现在比较用的一个叫算是 best practice 吧,就是用一个叫 SOLID,s-o-l-i-d,大家可以去查一下。它具体是怎么说呢?它大概就是五个 principle,这个我就不具体讲,但我要说的是,就基于这样一套算是前人或者现代人大家开发出来的一套共识或者经验来说。你分开肯定是更好的,因为它有另外一个很现实的问题,也是我们现在遇到很头疼的问题,就是新的开发者来的,他的学习曲线实在是太高了,因为你可能如果全是揉在一起写的话,就没有那么强的独立性的时候,你可能比如说一个 wallet 里面的某一个 function 引用的,
甚至直接是引用一个 node 里面的某一个 function,然后就 import 进来,然后在那用,然后它们全都耦合在一起,这样开发者想要去改某一个地方的话,就可能会不小心就牵动到很多个模块,如果能分开的话,你至少说从架构上就强迫它,你做一个独立的 package,你要提供稳定的 API。这样开发者再进来的话,他去开发,他需要学习的内容就会至少是一个被限定住的,就是你不会超过这个 package 定义的范围,然后你再去做开发的话,其实是效率会更高更快。当然这个大前提是,你分开之后,你的代码写得非常好,足够独立,你的 API 也写得非常稳定。所以我觉得如果他们能分开这样三块去做的话,其实从客观上来说,它也会去强迫 Core 代码的质量有进一步的提升。
阿剑: 但如果是按照你这样讲的话,我会觉得可能就是说这个分歧是好的,但是现在就会变成现在没到分歧的时候,因为他给钱包的 API 其实就是没有那么好,没有那么稳定。
YY: 对,如果你想要分开的话,肯定不是一朝一夕的工作量,但是就看他愿不愿意往这个方向去发展。
阿剑: Antoine 这篇文章是在 2025 年的年初一月份发布的。在我看来,它其实跟另外一位 Bitcoin Core 的贡献者,就是 BIP-345 OP_VAULT 的作者 James O'Beirne 在推特上写了一篇长文。实际上有一个隔空对话的意义,就是 Antoine,他其实也在自己的这个 Delving Bitcoin 的论坛里面,帖子里面回复的时候,提到了这篇长推特。那这个 shownotes 的主要意思是什么呢?James 的意思是他认为 Bitcoin Core 实际上作为开源项目,实际上它长期以来都有一个仁慈独裁者的这个角色。他认为这个仁慈独裁者实际上在过去 10 年乃至更长时间的这个 Bitcoin Core 的开发里面扮演了重要的作用。并且使得 Bitcoin Core 能够凝聚在某一些事情上,并且推动了过去的隔离见证和 Taproot 的这个升级。那我相信如果听众对于 Bitcoin Core 的这个历史有所了解的话,也会猜到这样提到的这个仁慈独裁者到底是谁。詹姆斯的意思是在 2021 年以后,由于缺乏了这个仁慈的独裁者,所以 Bitcoin Core 的这个项目的开发,在他看来就走向了一个稍微不那么令人满意的情况。而且他认为这个问题的一个重大的体现,就是面对当前正在进行的如火如荼的关于 covenant 的这个讨论,以及这个升级的这个推行的时候,显得比较迷茫,而且好像动作非常迟缓。如果听众对 covenant 这个话题有兴趣的话。不妨听听《亿聪哲史》在第 16 期的时候,Jeffrey 有一个非常长非常完整的这个陈述。
那么我在这里想提到的问题是,就是在各位看来,从我们对于这个开源软件开发以及比特币这个项目它的这个使命来说,你们认为有一个仁慈的独裁者会是一个好事情吗?
YY: 你要说仁慈独裁者,我想把仁慈替换成比如说半个神,semi-god 一样的独裁者。如果有这样一个人存在,那我非常开心,因为他的能力是比我强不知道多少倍,一个几乎不会,肯定不会犯错的人嘛,半个神。让这样的一个人去主导 Bitcoin Core 的开发,那是非常好的。但是现实的问题是,并没有这样的半个神。因为每个开发他自己都会犯错。再说到仁慈这一点的话,是同样的问题,就是你怎么知道他是仁慈的?而且仁慈的这个假设又要比半个神要弱一点。仁慈的独裁者这意味着他不一定不会犯错,那等他犯错的时候又要怎么办?这就是一个很严重的问题。
阿剑: 其实他讲的这个仁慈独裁者应该是放在开源开发的这个语境下,应该偏向于不是对他的能力的一个定义,而是说他会容许讨论,但是在某一些取舍上会坚定地推行某一种取舍。
YY: 这个以我个人经验来看,如果是这样定义的话,我觉得是有必要的。因为确实在争论的时候,比如说你写一个 feature,你做了一套设计,然后两个人争论不断,你就需要有一个人出来说,OK,我们这个时候不要再争了,先把这个 feature 推上去。这是常规的开发思路,但是到了 Bitcoin Core 这边,我就觉得非常不一样,因为它毕竟关系到的人真的太多了,而且它又是这样一个非常基础,非常重要的项目,所以我觉得还是要尽可能地取得至少开发界共识,大部分共识,你才能去说推行一个 feature 或者一个项目。
Jeffrey Hu: 对,或者从我角度来看,仁慈独裁者的这种含义可能可以替换为另外一个词,但可能有一个含义更广的词,就是这种开明专制的这种方式。这种制度可能是会对某些情况下是会有一些比较好的这种促进作用的。如果再回到 Bitcoin Core 的这个项目的开发来看的话,其实我们可以看到一些情况是,就是 Bitcoin Core 的开发者确实是扮演着这种角色。然后包括比如说代码的实现,以及比如说有一些 PR 提过来之后,那是不是要合并,这是这个可能偏实施层面的。然后第二点可能是比如说对于一些规则上面,我们怎么样去制定,以及刚才我们提到的 mempool 的这种规则可能会影响到不止自己的节点,可能会影响到其他的网络上的很多的这种节点,所以这个可能也是会第二个可能他们要去负责的事情,那第三个可能就是一些技术方向上的一种引导,比如说以前那种隔离见证,然后以及可能最近会进行的一些策略,比如说 V3 的这个 transaction,或者其他的一些新的一些功能,其实都是会要么是被动,要么主动的,可能会去影响到整个 Bitcoin 的网络上的一些功能的。所以在总结一下优点的话,可能会对于比如说在一些情况下比较严谨或者说进行把关的话,可能会对于整个网络的安全是会有一定比较好的作用的。但是确实我们也不能一概而论,因为怎么说呢?这个问题是一个挺困难的一个问题,因为在我看来就是整个比特币的这个网络,其实它也是遵循了就是当时互联网那个工作组的那个原则。在上一期播客里面我也提到过,就是更像一种这模糊的共识加可运行的代码,以及在这个软件的层面上,我们经常会说的 talk is cheap, show me the code。
就是谈论很容易,但是你给我一个代码是很难的。但在比特币里面,我认为其实是反过来的,有点反过来。就是实现一个可运行代码可能反而是比较容易的。比如说你 fork 一个 Bitcoin Core 的后端。然后呢,或者是比如说你在测试网上面去实现某个功能,比如实现某个 opcode,其实是相对比较容易,而且比如说你在测试网上可以看到一些像 OP_CTV 啊,或者是其他的 OP_CAT 这些操作码。它甚至有不止一种的实现这种方式,所以你可以去看到这种运行代码其实会相对容易,但是呢,比如说讨论或取得这种某个共识是反而是很困难的,那么这时候可能就需要有一个把关的这种角色,进一步的去把这个模糊的共识,尽可能的去取得或者确定下来。以及比如说当大家可能没有方向的时候,最终比如说哪些功能要启用,然后哪些是我们已经取得的共识,可能会要有一个最终的一个确定的一个作用吧。所以这也是我觉得这个问题可能是很重要,但也比较难回答的一个方面。
曾汨: 我觉得仁慈独裁者这个名字听起来让我个人可能并没有那么喜欢。因为其实你如果想短期的追求效率,然后想让比如说大家有经验的时候快速的解决,有这样一个角色相对来说一定是好的。但是如果我们把时间放长一样看,我们不可能一直期待会有一个仁慈的独裁者,在整个比特币的生命周期里面都有这样的角色。在每一个开发节点最终来拍个板说我们该做什么不该做什么。那么最终回到这个问题本身就是我们需要一套标准,就像 Antoine 他文章里面提到的那点一样,就是我们需要一个准则。可能大家讨论出来也好,或者广泛的时间推移起来,大家慢慢形成的一个想法也好,有一个准则来告诉我们在这些情况下去怎么样做判断,而不是说指望每一个固定的阶段会有那么一个人,然后来给大家拍板。
阿剑: 其实讲到仁慈独裁者的话,如果熟悉开源软件的开发的话,大家都会知道最著名的那一个仁慈独裁者实际上就是 Linux。就是 Linus,他是现在大家最广泛使用的开源的操作系统内核,就是 Linux 的最早的一个开发者。那么他自己也是在这个过程当中扮演了一个很强烈的以自己的个人的这个偏好来去裁决一些技术上的这个争论。以及包括实现上的这个争论,有很多这样的这个案例。我记得我们应该是在某一期《亿聪哲史》里面也提到过,其实 Linux 它在 2024 年也是涉及到一个在我们看来有些违反开源软件开发的精神。就是把几位俄罗斯国籍的开发者从贡献者的邮件目录当中完全删掉了,阻止他们再去为 Linux 系统继续做开发。这件事情实际上也产生了很大的影响。所以我其实比较同意曾老师刚刚提到的一点,就是如果你从时间拉长来看,那它对于整个项目它到底会是什么影响,实际上是不太确定的。我个人来说,与其说我期待有个 Linux,不如说我期待的实际上是一个开源精神,就是大家能够对开源的精神本身有一个认可和敬畏,并且在这一套理念和方法之下来去裁决这个争端。还有一个问题,Antoine 在他的文章以及他在给大家做一个公开演讲的时候,他的 PPT 里面实际上他着重地指出了一个矛盾,这个矛盾我认为是 Antoine 他自己对开发困境的一个核心的总结,就是他认为当前的软件开发会给后续的软件的维护,以及其他的开发者带来负担。就他认为这个不对称性实际上是一个非常大的困境的根源。就是说有一些开发者他现在你现在把这个 feature 做上去了,但是好像你不太管说后面维护的人要怎么去维护这个东西。是你开发的软件,但是你不是承担所有的这个负担。
他认为这个是一个很核心的这个开发的一个困境。那我想问各位对这种想法是怎么去看待的?
YY: 这个确实我是完全同意的,也是感同身受的。就是今天可能做一个开发者过来,加了一个所谓的很 fancy 的 feature。然后可能代码在质量上把控没有那么严。在这一个版本更新的时候,你加了这个 feature,然后后面有一堆 bug 出现。这就需要有一个人长期的在那维护去修。所以解决办法无非就两条。你们这个 team 里边有一个人就专职做这种工作,但那个人就会活得比较痛苦。要么就是另外一条道路。其实这个就是回到之后,还是刚才回到了我讲的那个 SOLID 的那个原则,或者说有很多现在的所谓的 software design 或者 architecture design 这一块,一些 engineering best practice。这是为什么团队一般好的代码好的团队都会强烈的要求,你的代码格式,你的文档,你的设计文档,你的代码里面的文档,你的架构都要非常清晰。因为它有一个预先的假设就是,或者说我们开发的时候会有这样一个假设,就是这个人可能随时会离开。如果他随时会离开的话,一个新的人进来,要如何可以最少的那种学习渠道,来接管这一坨代码。这个对于我们来说是非常重要的事情。所以他说的那句话我是非常认同的。
阿剑: OK。在刚刚的跟各位的讨论当中,实际上可能我们的听众也已经发现了很多问题,它的复杂性和特殊性实际上来源于 Bitcoin Core 自身的这种特殊性。那么其实刚刚 Jeffrey 也提到,包括很多人也都提到说 Bitcoin Core,它实际上在整个网络当中占据了一个非常重要的这个角色。尤其是当我们希望比特币的这个网络能够增加一些新特性的时候,比特币它的这个软件一定意义上会变成一个看门人一样的这个角色,就是如果某个特性它能进入比特币的话,就好像大家会默认这个东西就已经是会所有人都是会接受,并且会默认它就是一个比特币的这个网络,最终做出的一个选择是一个可用的这个功能,而如果它没有进去的话,我们就会觉得它是不是还没到那个份上还还不行。你们是怎么去看待它的这个看门人的这个角色的?它在比特币的这个网络当中它的这个影响是怎么样的呢?
Jeffrey Hu: 我要不再补充一些信息吧,就是因为刚才也提到了,其实也一定程度上聊到了这看门人的这个角色了。其实比较有意思的一个信息就是比如说像最近的 OP_RETURN 的这个事情,就你如果看一些媒体的报道或者是一些社区讨论的话,他们会觉得这个是一个比特币的下一次升级,而且是下一次比较重大的一个升级。所以这就是一个很有意思的现象。这个是本来其实是 Bitcoin Core 这个客户端,它的一个甚至不会对整个这个共识的这个协议层面造成任何影响。只是在交易转发的这个策略上进行了一些调整,但是大家都会倾向于认为这个是比特币的下一次很重要的升级,然后我可以基于这个升级,是不是有一些更多的这个 feature 或者是功能能够做上去。所以这就是一个很有意思的话题,就也一定程度上能印证出来。就是大家会对于 Bitcoin Core 的这个角色,会把它认为是一个网络上的一种特别核心的一种角色。然后他的所作所为就会影响到整个比特币的发展。功能的升级或者是协议的迭代。所以这就是一个可能大家已经形成一定程度上的这种思想上的这种认识了吧。虽然这种认识肯定是不准确的,但是从另一方面角度来看呢,确实可能会对于不管是新的功能也好,或者是说一些共识协议层面上调整也好,那比特币确实我认为还是会有很大程度上的一些影响的。对,但是可能我们需要把这些修改确实要区分开,就哪些是 Bitcoin Core 自身的一些 feature 的一些修订或者修改,因为我们可以看到,基本上 Bitcoin Core 可能每半年左右应该会有一个比较大版本的一些升级的迭代。每次都会有一些更多的功能的一些开发和新增,
所以我们不能说这些就是比特币的网络每半年就升级一次,而是只是 Bitcoin Core 这个客户端的一些修改。那另外一方面可能确实会有一些这种偏向于共识层面,或者说这个交易转发策略上的一些功能。可能你一定程度上可以认为这个是对比特币整个网络都会有一些影响。
YY: 我也补充一下,Core 有个,就它的那个 GitHub repo 上,它下面有一个,应该是 Docs 吧,里边有一个专门一页写了,就是,我们知道 BIPs 有很多嘛,它就写了它里边已经实现的那些 BIPs,所以如果大家比较不太熟悉的话,说一声就是,并不是所有的 BIPs 都一定要被一个客户端实现,也不一定是实现了某一些 BIPs,你就叫一个标准的客户端。其实刚才老胡说的那个我觉得非常有意思,因为,从 OP_RETURN 之后,我也开始在想一些事情。首先,我觉得 Bitcoin Core,从实际意义上来讲,它就是在定义比特币。或者说很大的在定义比特币。另一部分应该是矿工在维持这样一个共识。但是他也是在很潜移默化的在定义那个比特币的标准。我觉得如果大家能够,比如说现在看向闪电网络,闪电网络大家都非常熟悉,我们就有几个 BOLT,BOLT 1 到 12。如果比特币能够也出一套这样的标准,而不是零零散散的分散在各个 BIP,这样的话可能对比特币的生态会更好。因为大家可以清楚的知道就是 minimally 我实现了这些功能,它就是一个符合那个共识的客户端。这个在我看来是个比较好的事情。另外一个比较好的事情就是有很多实现其实是只在 Bitcoin Core 里。它并不是公开的,包括这一次,可能之前大家都不太留意 OP_RETURN 有这样一个限制,再包括之前 Transaction v3 或者 cluster mempool 里,大家才意识到,哦,还有这么多的限制在里面,大家可以改。如果这些东西也可以都至少说放到标准里,然后定义出来说 OK 我们在这个地方我们可以选择什么样的值,
什么样的值是安全的,什么样的值是推荐的,有这样一个非常透明清晰的标准在那里的话,我觉得会更好。但是现在像阿剑说的,我觉得它不仅是看门人的角色,它其实是一个很大程度上它就是定义了什么样的比特币是叫标准的 transaction,是标准的比特币,对。
曾汨: 其实我想说的跟 YY 基本大差不差吧。我们说他是不是一个看门人,他其实他就是在很大程度上定义了什么是 Bitcoin。因为你现在整个网络的比特币节点基本上 90% 都是 Core。然后 Core 的一举一动会影响到整个网络。在长期的意义上来说,它都一直是这个网络的看门人。我觉得看门人这个词可能都有点轻了。它就是决定者。
阿剑: 它就是事实标准。
曾汨: 对,它就是事实上的标准。
阿剑: 那么其实这个问题它有趣的点也在另一个方面,也其实是跟 Antoine 包括跟最近 Jeffrey 提到最近有一些争论有关。就是当人们对于 Bitcoin Core 它的影响大家都有个公认的时候,它相应的就会转化为对参与 Bitcoin Core 的开发者的一些行为上的一些预期。这个在我个人看来似乎是一个没有办法避免的事情。我的个人感觉是似乎有一段时间,一些开发者似乎在希望能够回避这样的一个角色,不至于说自己的这个职业是帮所有人或者说帮至少一大部分人做一个决定。但是好像也是不能完全避免。那你们认为这种压力是合理的吗?就是对于参与 Bitcoin Core 的这个开发的贡献者的这样的一种压力。就是实际上人们也常常会在网络上评论 Bitcoin Core 的这个特性,它的实现的这个进度以及一些开发者他们的这个动作。那这个当然会对开发者产生影响。那你们觉得他们去承担这种压力是是合适的吗?
曾汨: 不合适但无法避免。
Jeffrey Hu: 对,可能是无法避免。或者是我先从另外一个层面,我先补充些信息吧。可能会有些人会认为就比特币可能目前应该是 5 位开发者来维护的。那可能很多人还会有些误解。哇,现在这个几万亿市值的一个项目竟然只有这个 5 个人来进行维护,这是一个非常奇怪的一件事情。但其实事实并不是这样,对吧?呃,那 5 个每天的只是一个可能,更多是决定了这个哪些 PR 可以合并的这么一个角色。如果我们说 Bitcoin Core 的开发者的话,那可能需要分开,除了 maintainer 之外,还有很多的 contributor,就是你可能去提供很多的这种代码和开发,可以去把一些新的功能去加进来,你可以去提供一些比如 PR,提交一些 PR,那至于是否合并,可能确实要看 maintainer 的这个最终的一些讨论,以及社区里面的一些反馈来最终来决定。但是它的 contributor 其实是非常多的,所以,这是一个目前的一个现状。那回到那个对于 Maintainer 的这种压力,从我目前来看,就可能在社交媒体上面的一些争论也好,可能也主要集中在这 Maintainer 的一些这个以他们作为一个目标,进行一些很多的这种讨论或者争论。那么我自己观察也是跟阿剑老师类似的,就是他们可能也会避免去主动去站台,比如说某一种方向,以避免让很多社区认为他们已经决定了某些新的功能,或者说对某些设计进行背书,他们可能也会相对来说比较避免进行这方面的一些表态。对,所以回到那个问题的话,我觉得可能对于他们在这个角色上面可能相对那些压力肯定还是有的,但是也是他们这个角色可能会需要承担那些职责吧。
YY: 我说一些比较俗的话吧。有一句俗话叫欲戴皇冠,必称其重。就你既然开发一个可能现在是开源世界最重要的项目,就要承担这样的压力。这是没有办法避免的。而且如果你不想承担这样的压力,你有很多方式可以规避开。你可以选择匿名。这是一个最简单的方式。而且现在也有那么多的匿名开发者和研究者。所以在这一点上,我觉得还好。当然这是从开发者的角度去讲。就我自己开发嘛,我会觉得,那你既然做了这样的选择,你就要承受这样的压力。但是,从用户的角度来讲,还是大家要关爱一下开发人员。关爱一下开发人员的那个精神健康。我总体的态度大概是这样的,就是代码已经给你写好了,免费给你用,你还想要咋样呢?就这样。你觉得不够好的话,you can you up,就 no can no be be,就这种感觉。对。
阿剑: 但这就是有趣的问题所在。这就是有趣的问题所在。YY 的这个想法也是我们经常提到的,就是说当一些人在社交媒体上提出一些意见,一些批评,甚至是一些指责的时候,也经常有人会提出说他不是你的雇员,他不是你的公司的员工,你是在什么立场上向他提出这种批评的?但是如果我们大家都认为比特币,它就是有这么大的这个影响力的话,难道人们不能依据这个事实去提出更高的一些要求吗?
Jeffrey Hu: 对,其实这个是一个非常有意思的话题,因为那个观点其实如果我没记错应该就是 Snoopy 他来提出来的这个观点,就是 Bitcoin Core 或者其他开源项目的这个开发者并不是你的雇员,所以你如果不喜欢你完全可以离开。其实我一定是同意这个观点,但另外一方面其实还有一些地方也不是特别同意。那同一点是在于他确实是你没有并没有直接向这个开发者去付工资,所以你没办法去让他对你承担某种作为一个单纯的雇佣关系的这种义务。这个你是肯定没办法站到这种角色上去进行指责的。但另外一方面呢,其实人们总是应该是可以去评论,比如说开发者的这个工作是不是好和坏,就像举个不恰当的例子就是虽然我可能自己不会踢球,但我仍然可以去评判这个国足可能踢的水平不够好。对,这是第一个层面。然后第二个层面其实也是回到开源项目本身吧。其实是比如说当我在用这个开源软件的时候,那我肯定也是会对于开发者去有一定程度上的义务或者说责任,因为我也需要符合这个开源的这个项目本身的 license。就比如说我不能滥用这个开源软件的代码,或者是我做了一些修改,也并没有符合这个 license 做出相应的声明,或者是不用于某些这个 license 里面不允许用的一些用途地方。虽然我也没有付费,开发者也没有向我付费,但是我一定程度上需要遵守这些 license 的约定。所以对应的开发者可能也是需要对于用户的这种需求,有一定程度上的响应。所以这个是我想提出来的。用户和开发者其实一定程度上需要相辅相成,或者说有一定程度上的这个相互之间的呼应。两者之间的关系并不是那么简单。但是比如说可能我们对于一些具体问题,可能会有一个更具体明确的一些答案。
比如说回到那个 OP_RETURN 的一个事情,就如果我不喜欢的话,那我确实可以完全运行另外一个节点,比如说 Bitcoin Knots 的这种节点。这个是确实是可以去做相应的一些选择,那无非就是用脚投票嘛。但是在更广一些问题上,可能我们需要在 case by case 可能都需要再看一遍。
曾汨: 我想法本来是觉得这帮开发者不应该承受大家这么大压力,但我现在改观了。确实就是你作为开发者,你维护的这个项目如此之重要,你不可能说大家对这个东西不来评头论足,不来说应该做什么,不应该做什么。来参与一个这么重要的项目,你接受大家的监督是必然的。然后也不能说就是如果我不来开发,我就不能来值得你开发。就有一个很简单的例子就是,我们经常说,如果你自己做不了这个事情,你不能评价别人这个事情做得怎么样,这个显然是不合理的。你走到一个饭店去吃饭,你吃这个菜不好吃,但是我自己不会做菜,我当然可以说这个菜不好吃。这是完全说得通的。所以我们虽然我们自己不是开发者,但是我们都在用这个软件。同时我们都深知这个软件对于整个网络来说它的意义有多么重大。那么这个时候 Bitcoin Core 的开发者他接受大家的监督,这个是一个必然的事件。而且这个事也是没有办法逃开的,因为总会有大量的人来监督你这个事情做得好做得不好。所以我觉得开发者面对这些压力是一个必然吧。
YY: 我觉得这个事情到最终都是自由市场自由选择的。就是如果开发者确实忽略了某些人的意见,那这些用户就会转向前提是有别的选择的情况下就去做别的选择了。我觉得这是一个自由流动自由选择的方式是最好。但是我给曾老师一点反馈,就是我也确实觉得是就是我不会做饭代表我不能说你做东西难吃。但我觉得这里必须从根本上来说要区分两种东西。一个是我个人的意见,一个是一个是事实。然后在意见里面,刚才其实你那个表述,我说我不喜欢这个东西,不好吃,这个更多的是情绪或者感官,一种感受而已。如果只是在这一层面上,你去给开发者评论的话,我觉得这些意见大体都可以被忽略掉,只有到下一层,比如说我们给了一些评价,你甚至可以给一些指导,给一些合作,你在了解这个东西大概是怎么运作的情况下,提出一种比如说可不可以这样做,可不可以那样做,为什么不能这样做,这种正常的交流我觉得是完全可以的,但是据我观察到的是,现在大部分都只是停留在表达自己的情绪这一层,这个就其实并没有什么太多的建设,然后确实对开发者,因为也是社会性动物嘛,还是会对开发者的精神状况有一些影响。对,我觉得最终还是一个自由市场的选择。就 OK,我在这个时候以我目前的所有的经验资历,以及判断告诉我,你的意见是可以被忽略的,或者这样一个小范围内的共识可以被忽略的。我决定这样做了,然后我这个软件就这样写了,然后到了市场上的反应是另外一个样子,那是我活该。但是如果我坚持这样认为,就像 Linus 他做的那些事情,结果是大家更愿意接受他的软件。因为从长期来看,说实话,我是偏向于第二种情况会发生的,因为确实是有很多东西你很难去跟人解释,因为要花费时间。然后有时候更高效的办法就是,
我就暂时先选择这样做开发,然后到了市场上去看是不是更快,或者说更安全,更稳定,然后慢慢的大家就还是会做出这样的选择。
阿剑: 对我来说,有趣的地方可能很大程度上并不在于 YY 刚刚说的,它在事实的层面上是如何运作的,以及它最终的效果是什么,而是人们在参与这件事情当中的自我理解,他们怎么为自己的行为辩护,不论是开发者或者是社交媒体上的用户,软件的用户。在我看来,我个人最近的观察是,这些软件的用户,他们在媒体上发出声音,似乎在某种程度上,他们对自己的理解可能是这是一个代议制民主。意思是比特币它的一些共识规则像一个我们大家都要遵守的一个东西,都约定的东西,都是认同的东西。那么对于它的这个修改,那么理论上应该有一定的允许我们这些使用比特币的人的这个意见参与的这个空间。那么在这个参与空间当中,实际上这些软件的开发者就被他们当成了议员。他们是从这个角度上认为自己在监督议员的行为或者说确保议员。在一定意义上遵守了我们这些大多数人的内心的一个意见。也就是他是这样理解的。我自己认为这种理解在一定程度上能够说服我自己,就是说能够为开发者承担的这个压力,以及这些用户的这个意见表达提供一个框架,让我们去理解他,乃至去分辨他哪一些意见表达合理,或者说哪一些监督合理,哪一些不合理。大概是这么讲。
YY: 这个我觉得治理上来说可能确实有议员这样一种方式是可以,但是你觉得这种议员或者这种民主的形式会带来相对论吗?会带来最新科技的发展?或者说会带来更好更安全的软件吗?对,我的意思是,你说自由和民主,这两个为什么老摆在一起说?就是因为它们在核心的地方是冲突的。那你到底,个人开发者,你是要怎样?比如说,说 sipa 在搞 cluster mempool,对吧?那个帖子它也是公开的,放在 Delving Bitcoin 上,自己写了一个证明,然后没有人回复它。因为他就是塔尖尖上那一拨人,在这个领域,他就是塔尖尖上那一拨人,可以去理解他。那他需要接受别人的想法吗?就跑过来说,OK,你这个不行,或者你这个行。这就是一个很现实的问题。而且,但是我是觉得另外一方面,作为比特币开发者,不说你开发者吧,你知道这个团队,一定要有个人负责跟大众沟通交流,就要把你这个事情为什么要这样做要讲清楚,这个是肯定要做的,但是你落入到个人 developer 身上,要他们去做这样的事情,我觉得有点时间上不匹配,就是他可能可以用这个时间去做其他的他更擅长的事情,因为确实有的 developer 他就是不太擅长表达,他更擅长写代码,对。
阿剑: 最后一个问题吧。这个问题也跟我们前面提到的 Bitcoin Core,它在网络当中的采用率,它对整个网络的影响力有关联。就是有一位开发者叫 Peter Todd,他一直以来有个观点,就是他认为对于一个共识网络来说,多个客户端实现并不一定会增强这个网络的可靠性。我所关心的问题是各位对这个想法是怎么看的?你是否认为 Bitcoin 的网络最好有更多的实现?因为如果他没有更多的实现的话,似乎就对我们前面的问题形成了一个连环的锁定。整个网络本身就是只有一个 Bitcoin Core 的实现,大家也几乎不得不对 Bitcoin Core 的开发者提出很多的要求和监督,甚至乃至是一些意见的情绪的宣泄,包括 Bitcoin, Core 似乎也不得不在比特币的整个的我们所谓的模糊共识的达成,以及推进当中扮演一个重要的角色。你们认为是一个实现更好还是会多一些更好?
Jeffrey Hu: 这在我看来肯定是多种实现,这个毫无疑问。对,当然从某些角度来看,那一个实现肯定是更好的了,就是那句话嘛,其实都被重复很多遍了,就是独行速,众行远。那么你肯定是有多种实现的话,你对于整个网络的这种健壮性或者说,网络多样性其实都是会有很好的这种保护。那么健壮性这块其实肯定是一个很直观可以理解的。因为只要软件肯定都不可避免会有一些 bug 和漏洞。那万一这个漏洞会对于整个网络造成一些影响的话,那肯定是一个灾难性的。那么多样性的话肯定是会有一个很好的对攻击的这种防范。那么多样性的话就是另外一种层面上的这个优点了。就像刚才 YY 老师说的,这种你的 BIP 其实并不是需要每一个客户端都全部要实现,那我们是不是有些客户端可以去选择一部分的这个 BIP 作为它的一些特色去实现出来呢?那这个其实就是对于比特币网络上面一个非常好的一种补充。如果我们再看更广大一点,比如说对进化论来说,其实物种多样性或者是一个物种里面不同的这种基因的多样性,其实都是对于这种物种,或者是整个的这个网络的这种演化,是有很好的一种帮助的作用的。并不是一种物种或者一种基因,它更适用于这个。环境所以它才能够不断地去进化。按照最狭义的那种适者生存的那种观点,它才能够作为一个赢家不断地去在未来世界中存活出来。而是更符合事实的是一种基于这种自由市场或者是博弈论的这种角度来看。比如说多种的这种物种,或者是一个种群里面多种不同的基因,它相互之间怎么去达到一种平衡。可能是对于整个环境或者整个世界是一种更好的促进作用。所以从这个角度来看呢,也是可以回答这个,多种客户端可能是一个更好的一种策略了。
对,当然回到那个 Peter Todd 的这个本身的这个观点,其实我也能理解,因为从他各种提议来看,我认为他可能会比较推崇效率至上的这种观点,比如说是他提那个 RBF,然后以及最近提那个 OP_RETURN,都是可能会从一个怎么样能够提高整个网络的这种效率。那不管是比如说你对于这个交易手续费的更快能得到确认。或者说这个 RBF 可能能够实现一种更好的用户矿工几者之间的这种激励的这种相容。然后能够上网络可能更快速能够去运转下去,或者是比如说我的这个 RBF 以及 OP_RETURN 限制取消之后,我的整个 mempool 里面的这个交易一个是更快的能传播,然后再一个是我可以对于整个 mempool 以及在确认区块可能有一个更好的这种确认。那么其实都是有一个比较好的作用的。当然也说回来的话,除了区块或者网络之外或者客户端之外,那么对于 mempool 的这种统一其实可能也是有一个非常好的这种促进作用的,相当于是大家可能都是在一个节奏,或者是都是在同一个视角下去做一个事情。那它的效率可能是更高的,那么按照它的这种设计理念,那可能是一种客户端也是一个更好的这种选择,所以对于整个网络的效率可能是最高,这个我也是可以理解的。但是如果我们要从一个更长远,或者是对于整个网络的可能更健康度的角度来看。那我肯定还是倾向于认为多种客户端的这种方式是一个更好的一种选择。这个是毫无疑问。
YY: 对,我肯定也是觉得多种客户端,而且老话嘛,花无百日红。我感觉 Core 也不会一直这样维持 90% 的市场份额。说实话,如果真的有那种理想国一般的存在,就真的就一个这样的客户端。我觉得他想说的意思就是所有人的精力都放在一个地方了,然后大家可能以前有十个不同的实现,现在只有一个实现,然后我现在一个实现里的一个 PR 以前有两个人看,现在其他十个实现里的开发者都在看着一个 PR,有二十个人看,确实会更好。但是我觉得这有点一厢情愿,从互联网开始发展到现在,大家可以回想一下,就是没有任何一个开源的协议说只有一个实现,是不可能的,没有任何这样一种情况存在,总有一个,蹦出来一个新的东西,然后多加一些新的功能,而且 BIPs 天然又提供了这样的特性就是 Core 既然选择了不去实现所有 BIPs,就说明了这需要一个另外的客户端存在,去实现一些已经被接收的 BIPs。对,所以我对他的那个想法的观点可能就是,可以理解他背后为什么想这样想,但是同时我觉得从现实来看是有点一厢情愿了。
曾汨: 对,我也支持多个客户端实现。因为我们前面提到的,包括说自由市场,大家自由选择,你如果总共就那么几个选择的话,我们就谈不上自由选择了。但这里面其实 Peter Todd 的观点也有点意思吧,然后之前 Bitcoin Magazine 上有一篇文章,他说为什么比特币和以太坊的多客户端呈现的如此不一样。因为你看比特币的多客户端,比特币有好几个客户端实现,有 Core,然后有其他的。但是 Core 永远牢牢占据了非常大的一部分份额。但以太坊的不一样,以太坊也有好些个实现,但大家的份额好像会变化。
阿剑: 而且平均一点。
曾汨: 对,跟比特币这个还是有很大区别的。然后当时好像网络上就是有一个 bug,我忘记大概是什么 bug 了,但这个 bug 的最终原因,好像是因为比特币两种客户端实现对于某一个细节实现的不太一样。
YY: 对,btcd 那个 bug。
曾汨: 对,这个让我觉得可能我们同样是说多客户端实现,但是它在不同的网络里面是不一样的。比如说以太坊,它是先有一个标准,然后大家围着这个标准去做实现,但比特币是先有了 Core,Core 本身它就是标准。然后我们其他客户端要根据 Core,然后我们自己去改一些特性。那这个可能出现就是有一些实现里面有一个细节上可能没有弄好,然后就导致出 Bug。所以在比特币网络上做多客户端实现,我觉得挑战是更大的。但是无疑就是你如果有多个客户端实现,然后他们实现得很好的话,这肯定对整个网络来说是好处是巨大的。
Jeffrey Hu: Core 这个名字其实也很有意思。我也去考古了一下为什么叫 Core 这个名字。我能找得到的一个当时的一些讨论,其实也是强调了,就是这个 Bitcoin Core 的软件是作为比特币协议的一种参考实现。所以也是印证了曾老师说的那个观点,就是它是把 Core 这个软件是当做了这个比特币协议的一种实现的一种范本。所以它会包含就我们最早开始讨论的,它包括了节点,包括了钱包,包括了这个前端界面,包括了 P2P 的这种各方面的引擎支持等等这方面的各种功能,它都会去包含在这个里面。那么这是一个当时它命名为 Core 的一种含义。那最早其实改这个名字,其实也是因为比较早的时候,因为几种术语的这种混用吧。因为大家可能对于比如说这个链上这种资产,它也叫 Bitcoin,然后整网络也叫 Bitcoin,然后这个客户端也叫 Bitcoin。所以呢这个大家觉得这个很困惑,所以呢需要可能会再去改名字,就从那个当时的 Bitcoin-Qt,就是这个 QT 这两个字母去改成了叫 Bitcoin Core 这个客户端,但是反而可能会对大家认识这个 Bitcoin Core 客户端的这个本身的实现,可能会造成了一些困扰。当然这款可能可以再差一个题外话,就是最近的那个 BIP-177,就是可能也是会把那个最小的那个货币单位 Satoshi 也是再命名为一个小写的 bitcoin。那这个在我看来其实是一个不是那么好的一种改动,那可能又会改回去了,让大家对于这个整个比特币的这种认识,或者是名称又重新进行一种混淆。所以我觉得这个不是一个特别好的一种选择。但是那个说回到 Core 这个本身这个命名呢,本身它也可能让大家会感觉到有某种中心化的一种倾向,
可能是这种某种核心的这种地位。对,所以就是我想补充这些。
阿剑: 好的,那么非常感谢 Jeffrey 和 YY 跟我们完成了这一期的《亿聪哲史》的这个播客。我们非常高兴度过了这个下午。我们下一期节目再会。
曾汨: 拜拜。
阿剑: 拜拜。拜拜。
YY: 耶,可以吃披萨了。
Jeffrey Hu: 对,我正在点。
