Holochain:重塑APP

本文约7431字,阅读全文需要约10分钟
Holochain是编写完全分布式对等网络应用程序的框架。

编者按:本文来自蓝狐笔记(ID:lanhubiji),本文作者:Holochain核心开发者Nicolas Luck,翻译:Sien,Odaily星球日报经授权转载。

前言:本文的很大篇幅在介绍Holochain设计的底层思想,它是以代理为中心的底层结构,而不是以数据为中心的底层结构。由于底层设计哲学的不同,Holochain和Blockchain是完全不同的两种Chain,比如比特币的账户(地址)设计就很明显,它就是基于数据的结构,而Holochain则是以代理为中心,根据人的需求来组织数据,构建分布式的应用。如果Holochain能成功,它会从根本上改变人们使用网络的体验,不仅仅是保护隐私、分布式,而且还能以人为中心,聚合各种应用,重新塑造app,实现更好的用户体验。当然,要实现这样的工程,挑战非常巨大,存在很多不确定性,但我们还是有期待,如能通过一个个app的成功用例,最终走出一条完全不同的发展道路。

Holochain是编写完全分布式对等网络应用程序的框架。它不是基于区块链的技术。它也不是像以太坊一样的单一平台。它更像是一个去中心化的Ruby on Rails,产生独立程序的工具包,目的是服务于没有中心服务器的应用。它与区块链的其他替代者不同,它的实际工作和性能要比以太坊好几个数量级。

 尽管从技术上来说,把用holochain创建的东西称之为应用是对的,但它似乎限制了人们运用Holochain的想象力,因为这样的说法有它的包袱。我看到即将到来的可能的Holochain生态系统,我愿意分享自己的远景,也欢迎你的参与和反馈。 

但在我开始之前,我想阐明一些事情,介绍一下Holochain方法背后的哲学,是从Arthur Brock和 Eric Harris-Braun那里获得的。我并不试图在本文对Holochain做一个完整的解释,关于这些可以参考白皮书或者看看应用案例,如Clutter,它是完全去中心化版本的“Twitter”。

不过,我会聚焦于它所代表的主要的范式转移,同时也会提及运用这种新方法所带来的好处,不仅对网络底层架构本身有好处,也提供了保持分布式的数据完整层的方法,而且对构建适合相同模型的应用和界面有好处。

 范式++

简述:Holochain介绍了一种范式的转移,它关注分布式应用的架构。这一节的介绍很长,也是本文核心和务实的部分。如果你还不了解以代理为中心的计算是什么意思,同时你会对我们的扩展性抱有怀疑,也会把holochain跟区块链进行比较,正因为这些原因,关于holochain哲学的介绍可以向你阐述我们的想法。

因此,我们谈论的范式转移是从数据为中心到代理为中心的架构。这是什么意思?

通过软件模型化任何复杂系统的常见做法是暗含地假设某种全知全能的视角。运行软件的计算机应该建模事实。当数据被输入系统,我们假定知道事情实际上是怎么样的。面向对象的程序设计也承载了客观的概念。

只要软件只在一台机器上由一位用户运行,这就非常有意义。你不想机器有它自己的视角来看待事情,更不用说有跟你不同的视角。你想要机器的状态正确地代表事实。

现在,如果我们将其他用户添加进来,想想有多台终端的多用户的大型计算机,机器的客观视角自然地成为我们习惯的客观物理现实的替代品。这是一个空间。如果我把一些东西放到这个空间,它停留在哪里,你可以去寻找它。通过编写文件,并放置在文件系统中的某个位置,我们可以交换数据,同时也可以基于拥有共享网络空间(保存数据)来构建应用。

我们假设数据的存在是独立于用户的存在的。在这种情况下,数据是位于我们本体根源的原始事物。如果因为特定用例需要,通过数据表示用户,用户可以被映射到,也就是说,一个/etc/passwd文件或一个用户表。

如果我们增加多个机器到这个场景,它会变得非常有意思。每个计算机创造了它自己的虚拟现实,其中事实都被模型创建。如果没有进一步的复杂度或增加通信手段,这些现实并不会神奇地互为镜像。 

它们本质上是一元的。没有目标层迫使每个计算机的内存实现一致。这实际上让创建分布式应用变得困难:软件运行在多台机器上,维持它的完整性和所有部件的一致性,以达成它的目标。

顺便提一下,这个问题并没有在软件或计算机网络中得到介绍。我上面提到的一切跟我们人类的大脑怎么工作几乎相同。为了使我们能够与环境进行有意义和智能的互动,我们不得不模拟现实。我们把输入作为实际经验,并创造心智模型引导我们的行动。这些(或多或少)真正的幻觉是我们暗含地无意识地用来构建我们所体验的现实,这个体验处于我们意识的一元空间中。 

我们并没有进入现实的直接入口,我们也无法直接体验其他人的心智构想。虽然这是一个存在已久的洞察,2000多年前柏拉图在他的《理想国》中就曾提到过,它也在术语构建中被纳入学术心理学,随之而来的是配得上该标签的每个精神教学,它对幼稚的不做反思的头脑来说是非常反直觉的存在。

有种is-ness品质,它是对世界的我们的体验。我们认为我们知道什么是真的,既然我们已经看到了。对于个人发展来说,超越这种意识实证水平是不容易的,这种意识不了解这样的一个事实:一个人的经验是部分的,也因为之前的部分体验而带有偏见,部分的体验作为基础向量,它会让我们对这个新数据集进行三角测量(篡改)。

 换言之,构成我们人类生命的体验由我们自己、观察者、主观所决定,它要比客观更有决定性,这是很激进的。我们成为我们未思考信念的自我实现的预言。

 这听上去是一个哲学范畴的题外话,但它实际上对于holochain和分布式应用来说至关重要,这是因为:沟通塑造了我们社会的结构。我们,作为一个物种,之所以如此多能,是因为我们可以协同。很多人类的行为都好像是一个整体在行动。而这一切的基础是沟通。交换思想,通过小的口语实现心灵感应,还有语言、书面文字、广播、电视等各种方式。而互联网不仅是计算机网络,它是实现主流心灵感应的最新且最有效的方式。

 没有这个网络,你可能无法阅读我的想法,正如你现在正在做的一样。但是,直到现在我们使用的方法都是以数据为中心。甚至区块链也还停留在这个相同的范式之中。我们假装使用网站和应用作为地方就是这样的情况。我们暗示客观性,其中,我们在facebook信息流看到的所有事情实际上是,facebook的服务器与运行在我们手机上的软件客户端进行的通信。

 它感觉上是开放、公开的场所——然而,实际上我们相遇的地方是在“扎克伯格的客厅”。这是一个有奇怪特性的房间,每次都有让人感兴趣的对话在一些人之间进行,广告信息神奇地调制声波,声波通过空气传播,全息图像出现在人们之间。神奇之所以是可能的,只是因为我们所误认为的开放空间,实际上,它是从facebook传到我们的内容通信。facebook在讲,我们在听。同时,更糟糕的是,facebook对你耳语的一些东西,每个人收到的都不一样,这样的事实可以被利用,并带来严重后果。

 误将一个代理、一个视角作为真理,这是过于简化的以数据为中心的架构的常见相关性,同时,它暗示或明示权力集中化。

Tim Berners-Lee于25年前引入的互联网概念,它本有不同的含义。位于一个完全去中心化的互联网之上,由HTML和HTTP构成的网络暗含了以代理为中心的思路。当时的想法是每位科学家(这是当时的主要目标用户)将运行自己的HTTP服务器,从而把他们的书面想法和研究结果分发给任何想要阅读它们的人。只有作者才有权力修改/插入/审查他们的语言。

发生这一切的空间是网站/域名或者甚至作为一个备用的IP地址。因为这些地址是可以标识一个人或他们的机器。这个假设实际上是为什么这种模式无法进入主流采用的部分原因,它无法像web2.0服务,比如facebook十多年前做到的一样(由Myspace和其他网站开启)。

并不是每个人都是科学家,所以:1)不是每个人都有持续的网络连接,在早期只有大学才有 2)不是每个人都能设置自己的网络服务器和编写自己的应用。所以,通过创造人们可以上传自己数据的空间,可以供其他人检索,所有这些Facebook、Myspace、ebay以及Airbnb等能够满足大多数当时的互联网用户的需求——用户无需自己运行昂贵的永远在线的服务器,也无需知道如何编写丰富且易用的用户界面。当然,这也带来上述提到的中心化和权力失衡的问题。事实上,它就是这么过来的。

在以代理为中心的世界中,代理们——用户,人类和他们的机器——构成基本的本体根层。那么,数据正确地表示某些东西,一个代理要么视为输入,要么创建作为输出。也没有什么绝对,也不是什么客观真理——在真正的外部情况下的代理人,他声称或相信或拒绝表达的有效性。

 客观性可以通过主体之间来达成——当在什么地方它需要时——而不是像区块链架构的核心方面。每位代理都可以自由行动,做那些他们认为有用的事情,还可以拥有自主权去做对世界有意义的事情,从他们的独特视角和用例来看。如果在这个过程中牵涉到信任其他方的输出,这是一个明智的决定,而不是由架构所暗示。

 从以数据为中心转到以代理中心意味着要理解这一点,就是数据本质上总是有语境含义的。它反转了代理和数据之间的本体的依赖性。不是建模用户作为某种数据,相反,所有的数据都是一些代理的输出。除非至少存在一位代理充当来源,否则不会有数据。

真正以代理为中心的应用

迄今为止,以我们目前的Holochain Alpha原型来看,每个app都是它自己决定,有它的自己的界面。来看一下Clutter的实例:

Holochain:重塑APP

Clutter的独立UI,这是分布式版本的Twitter克隆

Holochain应用的UI是松耦合的,在读取应用程序DNA并生成节点后,Holochain运行时只是提供包括webUI的目录。应用的DNA定义了特定功能,这些功能可以访问UI。 

在我们的聊天应用中,社区成员最近发布了一个国际象棋应用,它是基于Holochain实现的的应用,它有自己的完全不同的UI: 

Holochain:重塑APP

Holochess的UI

现在这很好,通过Holo在无数Holoports上的分布式托管的联合,我们基本上可以重构每个中心化的应用,如Facebook或Amazon应用,这些应用都能以分布式方式构建,也可以有跟当前一样的用户体验。(译注:减少了用户的迁移成本)

 由于Holochain是以代理为中心的后台架构,也由此减少了中心服务器的需求或大区块链的需求(每个人都必须存储、同步、运行和验证所有事情),这些分布式的应用能够扩展到facebook的规模,与此同时,还能实现在手机设备上运行完整客户端。这本身是一个巨大的进步。当然,这样的说法可能会让你心生疑虑,不过你可以看看Holochain的白皮书,可以测试Clutter这个App,然后给予反馈。

 但真正让我兴奋的是将这种以代理为中心的范式转移提升到高级用户界面语义。因为这很重要:

互联网的全部意义在于让代理人或人之间实现沟通。

 20亿facebook用户没有访问其官方主页,是因为大家想更多了解公司Facebook——他们希望与自己的朋友联系。(译注:没明白作者的这个逻辑)现在,如果你通过网站阅读我的文章和通过Slack或WhatsApp收到的我消息,这样的感觉是很不一样的,一个人必须搜索很多地方以找到上周某个人发给TA的链接。

 互操作性与几大科技巨头公司的商业模式并不总是兼容。但我们使用这些工具的意图是相同的。互联网隐含的中心用例是心灵感应——人与人之间交流想法。它是文化的技术体现。人类文化以人为中心,而不是文字、书籍、网站、App为中心。

 除了审查、隐私和权力担忧之外,单一、以数据为中心以及中心化应用的问题在于它们是孤岛。不仅是数据的孤岛,还有用户界面的孤岛。人们不会简单地通过facebook的时间线来显示朋友的Twitter,Google+,WhatsApp和email等的合并动态。即使你能通过API获得所有这些数据,你需要编写UI,并且做到类似于原生的界面会是一件艰苦工作。假设,这一切你都成功地完成,但,万一你的朋友们都迁移到Snapchat上呢?

我们思考Holochain app的方式是它们应该是微服务、小单元、具有明确目的的模块、输入和输出。类似于基于文本的Unix/Linux命令行应用程序,这些应用在shell脚本中组合或从GUI引导以满足特定用例。

 Holochain app已经与它们的UI解耦,并且使用桥接,你可以编写一个app跟其他运行在相同设备和有相同代理人(基本上是授权这些app获取用户界面上的相同功能)的app进行通信,同时向你展示聚合接口。但,每个原生app的UI都有它自己的独立前端,(一个用React构建,另一个用Angular构建,还有用原生ios组件构建...),重用UI组件几乎是不可能的。

我希望看到Holochain app生态系统更加智能,并能够利用一个非常重要的事实:

既然Holochain是分布式的、以代理为中心的app的空间,它本质上是一个社交网络。

 

Holochain:重塑APP

运行三个不同应用的五个代理的网络拓扑。每个应用都是它自己的p2p网络。用户的代理(=设备+Holochain安装)是应用程序相遇的点。比应用更合适的比喻可能是语言。你可以跟其他两个代理讲“Clutter”,同时跟两个不同代理讲“HoloChat”。可能每个人都在理解“DPKI”。无论哪种方式,了解哪个其他的代理人在那里,了解他们正在运行什么app,这是隐含的Holochain生态系统的基础层。它是代理的社交网络——与用户的底层人类网络同构。

不是反复地进行文件、网站和单一应用的本体的错位,我们为什么不反转这个依赖性,把代理人/用户/人类放到Holochain的app生态系统如何工作的中心?不仅是在后台,也在所有层实现一致,包括用户界面?

为了更明确,我建议:

  • 为Holochain应用构建通用UI,这也意味着应用开发者可以选择遵循某些协议。我在谈论Holochain应用生态系统的浏览器,它不是打开HTML文档,而是促进用户与其他用户、群体、组织和整个网络之间的沟通。想想看:一个去中心化的聊天软件。基本上来说,非常通用的功能,如地址簿、团队聊天、社交网络、协作UI,它们都没有专门功能,因为这些通用功能要被用于很多应用中,它们要作为微服务一起工作。它是以代理为中心的UI,它代表其他代理以及用户所属的关系/团队/线程/社交空间。它当然是Holochain实例的容器。它使用新的条目类型语义显示所有Holochain应用的条目,我们将在介绍下一个Holochain DNA迭代时引入,以自动创建更适合的UI小部件。最终来说,它运行UI组件系统,让app开发者和用户可以自定义条目的呈现方式。Qt的QML是一种超级优雅的UI组件语言,我认为非常适合它。这个浏览器的原生版本可以使用原生的Qt。对于Holo的纯网络访问的Holochain应用来说,我们可以使用QML网络端口。

  • 定义以人为中心的/社交API(协议/接口函数),这个浏览器用于查询app条目。除了UI,每个Holochain app都包括一组它定义的条目类型、它们的验证函数和语义、以及面向UI的zome函数。为了支持浏览器的本体,比如,app需要提供一种检索所有条目的方法,当用户/代理的配置文件被访问或渲染,这些条目应该呈现:

    get_entries_per_agent(visited_agent)

    或者在社交语境下显示所有条目(如私人消息线程或团队协作空间)时:

    get_entries_in_context(thread)

    当可以从社交语境中读取条目时,还需要发布它们:

    post_to_thread(entry, thread)或post_to_agent(entry, agent)

我只是在这里命名一些例子,以从原则上传达这个想法。也许我们需要的只是所有社交合弄制层面的CRUD操作——即是说,代理、消息、团队、组织......

  • 建立应用间URL模式,以具有完全合格的条目引用。在Holochain 应用的语境下,条目地址是SHA-256哈希,它用于在网络上进行DHT查表,应用进行检索内容(请记住,每个Holochain app是它自己的p2p网络)。为了从应用间的语境中充分查找到内容,任何链接都需要包含app,app是条目所在的空间。幸运的是,每个Holochain app都是由其DNA所唯一标识。在查找和连接到运行同一app的对等节点时,目前的Alpha版本已经使用DNA的SHA-256作为该应用的唯一标识符。“协议实验室”的IPLD是为每个跨应用/网络/区块链的链接条目的用例而构建的。我们可以将每个Holochain都作为IPLD协议说明符吗?

    /<App DNA Hash>/<Entry Hash>

这里的一个核心方面是这些社会语境。遵循Holochain app是微服务的概念,如Unix命令,它可以在代理的语境下实现聚合,以执行更复杂的任务,应该有针对这些社交语境下的Holochain app:

  • 在每个代理的本地源链中存储朋友列表

  • 介绍社会语境下的条目,它们公开在DHT上共享,并链接到它们的成员(想一下团队)

  • 允许级联/分形社交语境,因此我们可以有团队,也就是组织。

社交语境是浏览器显示为位置的内容。并且存在隐含的瞬态位置,就如同所有现在在线的朋友:

Holochain:重塑APP

Holochain浏览器的UI模型显示在线朋友的虚拟位置。运用在app中定义的条目语义,每个代理与所有条目一起呈现,这些条目对用户可见,也是跨所有app。

这个例子显示来自三个不同app(Clutter、Holochess、Holochat,甚至可能是另外一个用于avatar 的app:Holovault)的条目。红色拼图显示这是一个app的条目,它没有安装在本地。我们不是该网络的一部分,所以,我们无法检索它的内容,但既然浏览器知道它是那个app(因为它通过app内架构实现引用),它能够提供安装按钮,这个按钮又可以使用Holochain们的Holochain,它是分布式的“app store” 可用于下载和安装app。

通过与其他已经使用该app的用户交互的方式来发现新app的方法看上去微不足道,但我感觉对于生态的采纳方面来说,它将有巨大的影响。特别是在这个可替代的世界上,因为app真的是成熟应用和插件的叠加。

那我最喜欢的例子:“不喜欢”的按钮。如果我不喜欢Philip的Clutter帖子,我可以编写我自己的新的Holochain应用,它基本上只是存储“不喜欢”,每个“不喜欢”只包含一个app间的链接。现在我可以不喜欢任何Holochain app的任何条目(不仅是Holochain app,甚至可以是任何IPFS对象,git提交,等等)。

 现在,要么是自定义的(QML)UI组件,要么是(更好)在我们的社交API中有更多特性,浏览器可以显示每个条目上的“不喜欢”,用一个来搞定。如果我们选择后一种实现,向app间的API增加功能,它能知晓app间的链接,这些“不喜欢”现在可以作为已卸载app的条目向所有人显示,正如HoloChat例子所展示的那样。

 这意味着,如果用户选择安装该app,这个功能可以在生态系统内轻松传播。这能够在不改变Clutter本身代码的情况下起作用,同时,也无需让整个社区分叉成不同的“共识”。新想法很容易尝试,如果它们证明有用,它们会被更大的生态系统采纳。正如亚文化发明自己的行话,然后逐渐成为主流。

现在,如果我们聚焦这个在线列表,我们将会看到用户所属的几种不同的社交语境: 

Holochain:重塑APP

Holochain浏览器的UI模型显示几种社交语境,其以代理为中心的社交本体的基本分形类型

对于其中的每一个,浏览器收到来自所有已安装app的条目列表,它们分别在这些区域被渲染。通过一个语境(也可能是该群组的进入规则)下的成员,根据安装和使用的app,社交语境则类似于强大的功能集,其中包括聊天室、邮件列表、YouTube频道、共享Google Drive目录、票务系统、git存储库、视频聊天、任何实时协作工作等等。

 这里的要点是,能只用一个点击即可增加新功能,与此同时保持该新功能所需的社交结构,这对于用户体验来说,意义重大。当我们跨越app的边界,并构建我们需要协作的堆栈时,这就是我们现在的想法。

社交语境,现在作为通用术语,是我们社会生物依赖的主要事物,它可以帮助我们了解正在发生的事情。对我们进行信息、经验和决策(多数情况是隐含的)的语境化,它始终都在那里。我相信,构建沟通工具,可以让社会语境更明确,这至关重要。

 请记住,既然每个Hohchain app有它自己的子网络,它是完全可能为每个团队生成一个克隆的应用实例(比如说HoloChat),同时只需点击一下按钮即可。它将创建一个完全分布式、默认加密的、可自定义的虚拟空间,这个虚拟空间可以只在某个团队的成员计算机中出现,同时,没有中心服务器、没有矿工、没有不能跨越的app隔膜的对等节点。

 你相信吗?

让我们来创建吧!

我在这里提到的实际上超出了Holochain核心的范围。但是,这些想法确实可以传达某些实现细节,这是我们在下一代Holochain迭代时会经历的。但,为了创建繁荣和协同的生态系统,它需要很多连贯工作的代理。

 这个种子已经种下了。

本文来自投稿,不代表Odaily立场。如若转载请注明出处。

ODAILY提醒,请广大读者树立正确的货币观念和投资理念,理性看待区块链,切实提高风险意识;对发现的违法犯罪线索,可积极向有关部门举报反映。

推荐阅读
星球精选