云是一座监狱本地优先软件运动能否解放我们?

云监狱,本地软件能否解放?

几年前,工程师们共同决定其他工程师应该阅读什么的讨论论坛Hacker News出现了一个怪现象。一种新的短语进入了编码师的词汇表,它似乎以如此强大的力量推动链接排名靠前,以至于有些人可能会认为排名被操纵了。这个短语——“本地优先软件”——听起来像是手工制作、农场到餐桌的一种特点,既熟悉又在暗示着一些新东西。也许有些工程师将其视为纯粹的市场营销术语。但其他下午消磨时光的工程师似乎将其视为他们长期感受到的问题的解决方案:他们编写的软件有问题。

Hacker News的第一条链接之一指向了一篇2019年发表的白皮书,由剑桥大学的一位名叫马丁·克莱普曼的计算机科学家和一个名为Ink & Switch的独立“工业研究实验室”的一群开源开发人员合著。克莱普曼和其他人是成功科技初创公司的校友,这些公司做了成功的科技初创公司通常应该做的事情:被收购。他们曾在较大的买家内部工作,并对自己所在行业的某些方面感到后悔和失望。现在有更多的软件开发人员,但他们并没有为同事或用户编写更好的体验。他们只是为了云而编写代码。

这种抱怨并不是完全新鲜的。硅谷的贴纸、T恤和水瓶上一直印着一个口号来嘲笑这个家乡产业:“没有云,只有别人的电脑。”而那个“别人”就是一家公司。如果你带着一个面向消费者的应用想要去沙丘路上找资金,有两种途径可以得到足够大的支票,让你在TechCrunch上有资格被报道:要么将用户数据进行再销售或广告变现,要么向他们收取使用这些数据的费用。无论你选择哪种基于云的商业模式——“议员,我们运营广告”还是“给我们钱,否则……”,数据一定要通过你自己的服务器传输。

本地优先的白皮书(也许“宣言”是更合适的词)指出了第三种方式。对于普通用户来说,云的美妙之处在于可以从多个设备访问,并允许多人在不同地方和大陆之间进行协作。作者们提出保持所有这些优势,但使用本质上没有云的软件。名称中的“本地”指的是个人电脑。“优先”意味着你的电脑比“别人的”更重要。如果你和我想要共同编辑一个文档,我们不再需要依赖于俄勒冈高原的某个谷歌数据中心来维护主副本。相反,我们每个人都会在设备的硬盘上本地存储副本。我可以离线编辑我的副本,你可以编辑你的副本,两个文件会在它们连接时自动合并我们的更改,无论是每分钟还是每周一次。

要构建这样的产品需要根本不同的数据结构方式。不同的数学方法。努力的结果是令人满意的软件。摆脱了对后端、服务器和昂贵的云计算费用的担忧,初创公司和独立开发者可以跳过与风险投资捆绑在一起的资金,追求更有趣的应用程序。更重要的是,他们可以利用云开发人员经常错过的硬件改进。当一个应用程序是基于云的时候,它的性能受限于与中央服务器的连接速度以及该服务器的快速响应能力。而对于本地优先的应用程序,用户的设备运行所有代码。你的笔记本电脑或智能手机越好,应用程序能做的事情就越多。

对于开发人员来说,机器加速和停滞的加载时间这两个趋势相反是相当荒谬的。实际上是一种冒犯。你也应该感到被冒犯,因为这意味着你错过了一些东西。云看起来像天堂,直到它不是。最近你有没有注意到,在硅谷的各个角落都在收紧腰带,你自己的个人互联网感觉不如以前那么丰富了?某些东西变得更加昂贵或不那么方便了吗?存储所有照片或备份手机需要支付每月费用。升级付费才能允许多个用户编辑同一文件。需要订阅并在你要获胜的时候卡顿的视频游戏。

记者和科幻作家科里·多克托罗使用“恶化”一词来描述平台资本主义如何浪费有用的技术。一家新的平台,靠着风投的资金,首先对用户有好处。然后广告商来了,平台也对他们友好。然后,仍然渴望利润,它开始破坏你所看重的功能,直到你受够了。这就是“平台如何死亡”,多克托罗写道。冷酷的商业逻辑开辟了这条可悲的道路,但技术选择铺就了它。

也许这样也可以。也许这个过程是再生的,就像野火清理枯枝一样。它为新的平台再次对我们有利铺平道路,至少在一段时间内是这样。但是,如果有什么不同的东西可以生根呢?如果改变软件的内部,对大多数人来说是看不见的,可以帮助技术摆脱困境呢?

我和克莱普曼悬浮在圣路易斯的城市博物馆停车场上方三层楼高的地方,这是一个由一家老鞋厂改建而成的建筑游乐场和废品场。现在是关门时间了,保安希望我们爬下来离开。然而,克莱普曼正朝着结构的最高点前进,那是一个空心的60年代的商务喷气机,通过一个陡峭倾斜的链条管道可以进入其中。他穿着一件皇家蓝的毛衣,不知怎么的一下子就让人觉得他是个欧洲人,他的卷乱的橙褐色头发扎成一个紧紧的马尾辫。当他滑进机身时,我仿佛在追逐一只狐狸。

对克莱普曼来说,夜晚是奇异循环大会中最喜欢的部分,也许这就是他最喜欢的开发者大会。这是一个将欢乐、怪异和实用性合二为一的活动,这是他理想的组合。克莱普曼可能最为人所知的是一本名为《设计数据密集型应用》的教科书,该书解释了在庞大的计算机系统中传输大量数据的基本原理。作为现代开发者的奇特生存指南,它已经销售了超过20万册,足以使他在这个社群中成为名人。粉丝们在一个真人大小的鲸鱼雕塑的大嘴旁边拦住克莱普曼,当他从一个五层楼高的滑梯滑下来时,感谢他帮助他们找到了第一份软件工作。

本地优先宣言的种子可以在克莱普曼书的第174页的一个小方框中找到。它描述了一种被称为冲突无关复制数据类型(CRDT)的东西,他将其定义为一种“数据结构家族”,允许许多人共同协作一个文件,并“自动以明智的方式解决冲突”。在这本书中,克莱普曼指出CRDT算法的实现“仍然年轻”。

按计算标准来看,CRDT本身已经很久了。它们是由法国计算机理论家马克·夏皮罗(Marc Shapiro)在大约20年前与他人共同开发的,当时云计算革命还处于起步阶段。夏皮罗订阅了点对点运动的许多理念,他开始担心云计算可能会将网络引向何方。虽然互联网协议本身保持着开放和分散的状态,但在其上构建的东西正在向垄断的方向发展。科技公司正在建设美丽的花园来吸引用户,然后建造墙壁阻止他们离开。

然而,他们尚未完全征服的领域是在线协作。当时的连接性还不够好。夏皮罗和他的同事努诺·普雷吉萨(Nuno Preguiça)想知道:人们在网上协作一定要在线吗?还是他们可以离线工作并进行点对点协作?

从概念上来说,这并不难想象:创建许多相同文件的副本,每个副本自动与其他副本保持相同的状态,就像量子纠缠中的原子一样。无论你先编辑你的副本然后接收到我的更改,还是我先编辑我的副本然后接收到你的更改,算法对我们两个人来说都会产生相同的结果。用数学术语来说,这就是“可交换”的属性。(实际上,这是CRDT最初名称中的“C”)

该算法如何实现呢?在大多数情况下,答案是明确的。如果我添加一个段落,而你删除另一个段落,顺序并不重要。但是假设我们都对同一个词进行修改;你认为它应该是紫色的,而我认为它应该是淡紫色的。这样的结果怎么会不是“紫色的淡紫色”呢?不同的CRDT通过不同的规则来解决这个问题,以保留各个协作者的意图。它们可能依赖于时间戳来对新元素排序,或者也许有某种方式来编码每个元素与其周围元素的关系,保留一些单词或句子的概念。可能性很多。

这些保持顺序的技巧也可能使CRDT变得非常低效。跟踪这么多数据是太多了。因此,设计CRDT的另一个任务是编辑:决定副本需要相互发送的最小信息量,以产生和谐的结果,并确定如何高效地打包这些更改。

夏皮罗和普雷吉萨最初将他们的CRDT算法发表为技术报告。夏皮罗考虑成立一家专注于协作编辑的公司。“几个月后,谷歌文档(Google Docs)出现了,”他告诉我。这个新软件使用了一种较旧的合并更改的方法,被称为操作转换(OT),并仍依赖于谷歌的中央服务器。夏皮罗相信他发明了一种在理论上更为可靠的东西,一种真正点对点软件的稳定基础。但是当克莱普曼几年后看到他的论文时,很少有人在使用这个软件。

克莱普曼(Kleppmann)在德国长大,对计算机和中提琴都有着浓厚的兴趣。在与作曲事业的短暂恋情告吹后(对于“什么是好的,什么是垃圾”的象牙塔观念他并不认同),他遵循了经典的技术人员的职业道路:他共同创办了一家初创公司(名为Rapportive,它将社交媒体资料整合到电子邮件联系人中);他搬到了湾区(靠近投资者和社交媒体巨头);他的创业公司被科技巨头LinkedIn收购。克莱普曼在那里待了几年后离开,去剑桥大学担任研究职位。

新工作给了克莱普曼他长期以来渴望的东西:回归创造力。他有灵活性去探索更不寻常的编程方法,包括那些可能不会立即产生回报的项目。他用他妻子(一位高中化学教师)的类比来解释他的工作。如果你把数据的单个字节看作是原子,那么数据结构就像分子。对于任何新的编程人员来说,“hello,world”之后的下一步就是学习这些排列方式——列表、树、哈希和图等等广泛的类别。克莱普曼想要揭示的是能够实现不同类型应用的更奇怪的原子排列方式。

他将夏皮罗的论文描述为“觉醒”。在CRDTs中,克莱普曼看到了一种新型软件的技术基础,而没有人提供这种软件。但是这些算法对于专业程序员来说几乎没有用处。它们效率太低,缺乏开发者实际用来制作应用程序的典型工具。克莱普曼意识到,他需要让本地优先开发者的生活变得简单,将这个想法从一组数学证明变成可投入生产的代码。他开始编写一个名为Automerge的CRDTs开源实现,人们可以自由使用它来构建应用程序。

几年后,当本地优先宣言在Hacker News上爆发后,我看到了这一努力的成果。我在旧金山的一家咖啡馆里遇到了克莱普曼的合著者之一彼得·范·哈登伯格(Peter van Hardenberg)。他和克莱普曼一样,在经历了长时间的云端之旅后,进行了重启,首先是作为Heroku创始团队的一员,帮助其他初创公司启动他们的云服务,然后成为其收购方Salesforce的一部分。他想要向我展示一个名为Pushpin的应用,设想为一个数字软木板。

范·哈登伯格在他的iPad上打开了一个空白项目。我在我的笔记本电脑上载入了同一个文件的副本。我们开始动手,向我们自己的文件添加图片和文本框,然后允许它们合并。有时候这个过程非常顺利,有时候更改停止加载,或者像拨号上网时代一样拖延时间。Pushpin感觉像是一款玩具,一对满怀希望的斯坦福大学本科生可能在公共休息室里编写的应用程序,他们梦想着种子轮融资,然后因为尴尬而搁置。

但范·哈登伯格远不感到尴尬。他相信,技术基础正在奠定,以实现Slack、Discord、Google Docs和Photoshop的本地优先版本。更好的设计应用程序、日历、预算。如果能使Automerge更加高效,还有更复杂的程序。这些协作应用程序都有可能进行私密的端到端加密,因为没有服务器会干扰其中。CRDTs有技术限制,云计算在许多应用方面表现更好。但对他来说,这个原型感觉像一场革命。没有服务器介入我们之间。但它却能工作。大部分时间都可以。我们是两个同行在交流,正如互联网的第一批砖匠所期望的那样。

当我们在圣路易斯再次见面时,范·哈登伯格的愿景变得更加清晰。科技巨头们正在失去优势。Meta的股票创下了七年来的最低点。Twitter正在进行埃隆·马斯克(Elon Musk)的敌意收购。克莱普曼每周花了几个小时担任Bluesky的技术顾问,这是Twitter作为一项分散实验孵化的项目,突然引起了人们的关注,并有望成为其竞争对手。它的“联邦”设计承诺给人们提供离开对待他们不好的服务器和服务的选择。Bluesky没有使用CRDTs,对于协调数百万社交媒体用户的动态来说,CRDTs太慢了,但目标是相似的:与“别人的计算机”建立更好的关系。计算机替代方案再次流行起来。

其中,CRDTs是其中之一。Strange Loop上充满了本地优先的演示,这让克莱普曼和范·哈登伯格感到惊讶,因为他们最近一直通过Google Alerts和口耳相传来跟踪每个项目的动态。CRDTs也出现在更广泛的世界中。《华盛顿邮报》的开发人员使用它们构建了一个在主页上排列文章的工具。在运行Apple的Notes应用程序的代码中研究的人们注意到了CRDTs。流行的数据科学应用程序Jupyter Notebooks在Google取消了之前依赖的云服务后,使用CRDTs恢复了协作工具。

在Strange Loop大会的演讲者中,有一位名叫布鲁克林·泽伦卡(Brooklyn Zelenka)的加拿大开发者,他是一家名为Fission的公司的联合创始人。她回忆说,当她阅读到“本地优先”宣言时,她觉得“这是一个很棒的词组。在那之前,我们使用了一些尴尬的词组,比如‘位置独立’或‘用户拥有的数据’。” 泽伦卡一直对Web3的理念感兴趣——Web3是使用区块链技术和加密货币的“分散式”应用的代名词,但她发现它的文化“过于攻击性”,她将其归因于对金钱的关注“如此明显,一直以来都是如此。” 能够早早地接触到本地优先的概念让她感到很好。“现在一切都是低挂果实,”泽伦卡告诉我。

她的轨迹是很常见的。范·哈登伯格(van Hardenberg)在会议期间与我共进午餐时告诉我,加密货币“带来了所有最糟糕的人”,但它也与本地优先的许多原则相符。在他看来,它只是采用了错误的方法,承诺用户分散化和独立性,但却将他们与投机的财务激励联系在一起。它也与离线优先相反:笨重的区块链由掌握最多资源的人控制,调解了每一次交互。然而,加密货币确实提供了一个教训,即炒作如何推动新产品的创造。范·哈登伯格指出,在加密货币泡沫达到顶峰时,Meta和Google等公司出现了大量厌倦和失望的程序员跳槽。

他认为,本地优先最终可以引发同样的激动,但提供的是实际上好用的软件。范·哈登伯格表示,它需要的是一个重大的“退出”,将“可见财富的迹象”带给一些幸运的本地优先开发者群体,并帮助吸引更多的人才和资源。增长也是可怕的。迄今为止,范·哈登伯格和克莱普曼(Kleppmann)对Automerge本身一直回避了风险投资的资金,因为他们担心这将迫使他们接受与“本地优先”的价值观“完全背道而驰”的各种商业模式,正如克莱普曼告诉我所说。但是在某个时候,他们意识到,增长也是必要的。他们希望软件能够自立自强。“风投们喜欢重构,”范·哈登伯格说。

会议结束几个月后,“本地优先”再次成为Hacker News上的热门话题。一位评论者称CRDTs(基于冲突-free复制数据类型的数据结构)是“斩龙者”之剑,可以让本地优先的应用与云端竞争。另一位评论者抱怨说,关于CRDTs的每篇有趣的技术文章都变成了一个“关于分散化的奇怪政治讨论”。

尽管有许多去中心化的技术运动,但金龙的金库却不断增长。一个问题是人们认为原则会牺牲便利性。尽管制作自己的咖啡桌可能是充实和有道德的,但也很困难。最终,你会感到疲倦,然后在亚马逊上购买下一件家具。对于管理你的数据也是如此。“让苹果或谷歌为你管理数据要容易得多,”莎皮罗告诉我。当我问他在坚持自己的原则的同时使用现代互联网是什么感觉时,他告诉我,他尽量避免使用技术。“这是对你时间的可怕浪费,”他告诉我。

我很好奇“本地优先”这个术语是否让莎皮罗感到困扰——是否他认为这是对他的技术创造的不受欢迎的重新包装。当他告诉我他喜欢这个词组时,我感到非常惊讶。他认为这个词组有魔力。也许革命需要有点阴险才能取得胜利:用技术可能性吸引开发者,将其称为“运动”以吸引对政治感兴趣的记者(你好)。也许它还需要在正确的时刻到来,当大型科技平台似乎准备崩溃时,揭示出为了便利所失去的功能和所遭受的滥用。

克莱普曼并不要求回归模拟或摧毁所有云服务器,因为云服务器做了许多有用的事情。这把剑不是杀手,而是一种可以开创更好事物的工具——即使他也会说,它仍然需要磨砺。当我问他是否可以试用他一直在开发的基于CRDT的文本编辑器时,他通常表现出的平静专注的表情短暂地变成了警惕。当然,从理论上讲,我可以运行在线发布的原型,因为它是开源的——“但请不要这样做,”他告诉我。他会在本地优先准备好时通知我。


请告诉我们你对这篇文章的想法。发送一封信给编辑,邮件地址是mail@wired.com。