这是 niftynei 的观点社论,他是一位开发者教育家,负责运营 Base58 比特币协议学院,也是即将举行的以 Nix 为中心的 Bitcoin++ 会议的组织者。
当您想在计算机上安装新应用程序时,从哪里获取它?
决定使用哪个源是一个非常难以解决的问题,但这是每个计算平台都在努力解决的问题。
在互联网普及之前,新的软件“包”是通过 CD 或 U 盘等硬介质分发的。 例如,如果您想获取最新版本的计算机操作系统 (OS) 或最新版本的 Bitcoin Core,则需要在商店实际购买或将其邮寄给您。 然后,您可以将磁盘或 USB 记忆棒加载到计算机中,并将新软件复制到本地磁盘上。
作为编写代码的开发人员,您必须将程序的副本分发给朋友和家人。 或者您会在一家与公司和计算机商店有关系的大公司工作,该公司会弄清楚如何将您编写的软件分发给他们的客户和消费者。
随着始终连接的计算机的出现,软件分发的格局永远改变了。 现在,您不必亲自获取程序中的各个位的副本,而是可以轻松地从互联网下载它的副本。
这使得新开发人员可以更轻松地编写任何人都可以下载的应用程序。 然而,现在的问题是回答这个问题:用户应该从互联网上的哪里下载新软件?
黑客的应用商店
手机生态系统解决新应用程序分发问题的方式是通过手机上名为“App Store”(或 Android 上的“Google Play 商店”)的程序。
开发人员将其应用程序的最新副本上传到苹果或谷歌的服务器。 然后,这些公司向所有安装了该应用程序的手机发送静默通知,并且该应用程序会在用户手机的后台进行更新,而无需用户参与。
如果您是用户并且想要向手机添加新应用程序,在大多数情况下,您可以在 App Store 中找到它并从那里下载。
但并非所有软件都可以作为手机应用程序使用。 一些软件项目是开发人员用来编写新软件的桌面应用程序或工具。 这些应用程序也需要分销渠道。 在桌面操作系统上,我们倾向于将“App Store”软件称为“包管理器”。 它们管理您下载到计算机上的软件包。
现代包管理器由一个中央服务器(有时称为存储库)和一个在包用户计算机上运行的客户端应用程序组成,可以跟踪应用程序的最新版本。
如果您是一名开发人员,您可能在生活中的某个地方遇到过“homebrew”或“apt-get install”。 “Homebrew”和“apt”是包管理器。
在包管理器的工作方式中,客户端应用程序偶尔会检查中央存储库,以查看当前安装的包是否有任何新更新。 或者,如果您拥有正确的操作系统并设置了正确的权限,也许您的计算机会自动运行这些检查,下载并安装最新版本的应用程序。
(顺便说一句,您可以将其他软件包源添加到本地软件包管理器客户端。如果开发人员自行托管其应用程序而不是将其上传到中央存储库,您需要将其自托管网站添加到在您自己的包管理器客户端应用程序中查找更新的位置列表。)
如果我们可以复制一切会怎样?
尼克斯 是一个包管理器,旨在为它帮助分发的所有包带来可重复的构建。
Nix 通过详细跟踪构建的所有输入、唯一地标识每个输入并使用与原始构建器相同的输入来解决软件分发问题。 这确保了它每次都能在任何机器上构建相同的东西。
Nix 对构建的每个输入和输出进行哈希处理; 这使得很容易识别输入何时发生变化。 当构建的输入发生变化时,输出也一定会发生变化。
可重复构建的一个大问题是,不同的用户将拥有构建程序所需的不同版本的输入。 您在计算机上构建的每个新程序可能需要不同版本的输入才能重现。
Nix 通过通过哈希列表跟踪构建并仅使用与其期望的哈希列表匹配的输入来修复此问题。 代价是 Nix 使用更多的磁盘空间,并且通常需要更长的时间来下载,因为如果您的计算机上还没有正确的输入,则它需要将正确的输入下载到二进制构建过程中。
我喜欢开玩笑说尼克斯之所以成为可能要归功于 摩尔定律,这意味着我们现在有足够的额外磁盘空间,无需担心同一程序有多个副本,只是版本略有不同。
因此,Nix 可以更轻松地分发软件的可复制版本,这意味着用户可以在他们的计算机上可靠地重建您的软件并让它正常工作,没有任何问题。
顺便说一句,请注意,对于 Nix 构建来说,“可重现”意味着“如果一个包可以在一台机器上运行,它也可以在另一台机器上运行”。 这与 Bitcoin Core 开发人员试图保证官方 Gitcoin 二进制文件的可重复性不同,后者 有一个单独的过程 检查它们是否逐位相同。
尼克斯和比特币
以最终用户易于运行且可在任何系统上重现的方式分发开源软件是一项非常有用且重要的功能。 它使任何人都可以更轻松地开始使用该项目,也让新开发人员更容易开始为该项目做出贡献。
几年前,一群勇敢的开发人员推出了一个最常见的比特币软件项目存储库,这些项目被打包为 Nix 软件包和模块。
软件包使使用 Nix 软件包管理器的任何人都可以更轻松地在几乎任何架构上安装并开始运行比特币节点。 在运行构建命令之前,您不必担心安装正确的依赖项,该项目将从您自己的计算机上的源代码构建。 就能够从头开始快速下载、构建和运行比特币节点而言,这是非常理想的。
这 Nix-比特币存储库 提供 Nix“模块”,这些模块是用于运行的软件应用程序的配置 尼克斯操作系统。 Nix-Bitcoin 模块允许任何运行 NixOS 的人重现 Bitcoin Core 和其他比特币开源项目的构建,并快速让它们在自己的机器上运行,而无需大惊小怪。
在本文的采访中,乔纳斯·尼克(Jonas Nick)是一位 Nix-Bitcoin 项目的主要维护者,关于使用该项目有以下说法:
“Nix-Bitcoin 从 Nix/NixOS 获得的主要好处是声明式配置管理。使用 Nix 编程语言配置系统可以进行抽象,因此您可以模块化逻辑以重用和测试各个组件。这可以管理复杂性,这不可避免地会导致复杂性的增加。构建系统时会发生,有助于构建正确且安全的系统。例如,Nix-Bitcoin 提供的很多安全功能如果我们没有模块系统,维护起来会非常烦人。NixOS 的可重复性也有助于很多更新,因为我们确切地知道用户的系统上正在运行什么。最后,使用 NixOS 还可以在评估时而不是运行时出现错误。”
Bitcoin Core 并不是唯一打包在 Nix 上分发的项目。
还有 Core Lightning、BTCPay Server 和许多其他项目。 大多数情况下,这些项目是由 Nix 包管理系统的粉丝而不是编写软件的开发人员添加并捆绑在 Nix 上分发的。 有关可用软件包的更完整列表,请查看“模块”列表 Nix-比特币 GitHub 存储库。
为什么不到处尼克斯?
如果 Nix 对比特币项目的构建和交付方式有如此巨大的改变,为什么不是每个人都使用它呢? 事实上,Nix 是一个大项目,进入起来有点困难。 使用 Nix 的学习曲线相当陡峭,并且将 Nix 作为包管理器运行的范例可能与大多数人习惯的有很大不同。
NixOS 最初是一个研究项目 2003 年的 Eelco Dolstra,并从那时起慢慢建立了追随者和用户群。
Bitcoin++ Berlin:扩大 Nix 在比特币中的使用
通过组织即将举行的 比特币++会议 在柏林,我们的目标是改变这一现状。 比特币++ 是一个以开发人员为中心的会议系列,重点关注比特币开发人员领域的不同主题。 最初于 2022 年在德克萨斯州奥斯汀举行,最近一次会议于 2023 年 4 月下旬举行,重点讨论了比特币的第 2 层技术,例如 方舟、闪电网络
和有效性汇总。
即将举行的柏林会议计划于 2023 年 10 月 6 日至 7 日举行,旨在成为比特币开发者生态系统的一次“尼克斯起球”活动。 尼克斯堡 Nix-Bitcoin 项目的核心维护者将出席(包括 Nick、Pavol Rusnak 和 Eric Sirion,
举几个例子)。 为期两天的活动将充满实践研讨会和讲座
旨在向整个生态系统的开发人员传授如何使用 Nix 进行打包
他们的项目并更好地捆绑他们的开发依赖项,以便新的
贡献者可以更快地开始编码和贡献,并演示使用 NixOS 上的模块部署软件是多么快速和容易。
其他文章参考
这是 niftynei 的客座帖子。 所表达的观点完全是他们自己的,并不一定反映 BTC Inc 或比特币杂志的观点。