二十多年前,PC 时代演变为互联网时代,人类生活的诸多方面进入了虚拟数字世界。随着智能设备成本不断降低,互联网时代即将演变成物联网时代,人类的互联网生活从虚拟世界走向物联网虚实结合的世界。
一个有活力的物联网生态需要数字货币作为润滑剂,数字货币更需要有活力的物联网生态来体现其价值。即在去中心化背景下,物权的流动和数字货币流动的双向性。说白了,一手交钱,一手交货。
区块链技术使得物联网去中心化的征信和交易成为可能。毕竟区块链技术主要体现在不可更改的“记账”类应用,比如记录金融交易,记录物权资产归属。
今天的物联网应用大多是有中心的,即移动终端需要借助某个中心网站才能访问物联网设备。用物联网加区块链来实现统一的去中心化应用平台,我们势必需要搭建统一的去中心化点对点(Peer to Peer)网络,覆盖所有移动终端、物联网网关(Gateway)及区块链节点。
我们知道现实生活中的书籍、音像游戏光盘也是物,消费者可以私下交易,甚至以物易物。然而在今天的互联网电商平台上,消费者不能购买电子书或者影视作品的物权,只能购买其终生使用权,不可私下交易,也不能赠与。
利用区块链技术我们可以实现多媒体作品的去中心化物权交易。但如何根据物权来阅读、播放、运行这些多媒体解决方案就是个非常有挑战的话题了。
我们知道运行软件应用的平台通常被称之为操作系统。面对物联网加区块链引出的去中心化应用生态,一个新型的去中心化分布式操作系统技术自然就浮出水面。
Elastos (亦来云)开源项目已经在网络操作系统领域耕耘多年,希望趁着区块链大潮,做一个开源去中心化的数字资产物流平台,服务于众多区块链创业团队。
如上图所示,消费者利用移动终端在街边购买个体商贩售货机里面饮料,不通过支付宝、微信支付等中介是否可行?再举个例子,游戏玩家头戴 AR(Augmented Reality)眼镜,与周边环境里的物联网设备互动,周边设备存储动态提供挑战关卡程序?
以上场景与大家熟悉的浏览器、网站模式不同,售货机和周边设备没有 IP 地址,移动终端如何通过设备二维码与其建立直接的数据通道?这就需要一个统一的去中心化点对点网络,而费用直接记录在区块链上。
不通过中心网站,售货机设备直接向移动终端推送 JavaScript 程序,或者移动终端直接从售货机下载JavaScript 程序,这两种情况都是去中心化应用的范例。对于 AR 眼镜游戏而言,也许因为 JavaScript 语言的执行效率太低,也许因为物联网应用规模太大、太复杂,其实现语言或许是 Java,也有可能是 CPU原生指令语言,比如 C/C++。
由于互联网上鱼龙混杂,恶意代码、网络攻击层出不穷,浏览器一般仅允许互联网应用采用 JavaScript 语言编写,在权限严格受控的 JavaScript 引擎里面执行。
早在 1990 年代初期,Java 语言发明伊始,其作者针对 1992 年电视机顶盒市场及 1995 年的浏览器市场,期望 Java 程序在 JavaVM 虚拟机里面“一次编写,到处运行”。虽然 Java 语言取得了巨大成功,但由于 Java语言的执行效率、代码粒度等问题,Java 语言一直无法独立承担大型高效应用软件的重担,而是借助于JNI(Java Native Interface)调用 Windows、Linux 等操作系统原生运行平台。也正因为此,JavaVM 虚拟机有如漏底的容器,无法完成可控可管的目标。二十五年来“一次编写,到处运行”的宏伟蓝图付之东流。
至于 C/C++编译出来的原生目标代码模块就更经不起推敲:通过邮件传递,动态抓取,实时推送二进制代码模块倒是不难,但是谁敢在 Windows 或者 Linux 运行这些代码呢?病毒传播、隐私泄露和网络攻击随时可能爆发。
说到这里,大家不难形成共识:如果要用 C/C++类原生语言编写去中心化应用,采用传统操作系统作为运行平台难堪大用,必须另辟蹊径。
谷歌公司在其 2016 年 5 月的 I/O 大会上曝光了“即时应用”(Instant App)的研发计划,预计在未来一至两年推向市场。应用点击运行,无需软件安装,无论其是否在本地、周边,还是云里。从此软件应用也像万维网的网页一样,没有版本号,随时更新。所有网站、云盘上的软件形成绿色生态,生生不息。
大家容易联想到即时应用一定是去中心化的:周边即时发现的应用,也就是非本地、非云端的应用。
不像传统的 Windows 应用跑在 Windows 操作系统上,Android 应用跑在 Android 操作系统上,即时应用的目标运行环境很难预测。
微软 Windows 10 操作系统的技术路线及编程模型与 Windows XP 截然不同,号称支持“通用应用”(Universal App)。同一款应用可以运行于手机、电脑、电视、游戏机、HoloLens 眼镜等硬件设备,不再区分 CPU 是 X86 还是 ARM,也支持自动适配各种输入法。借助云盘作为统一永久存储,各种设备间可以支持无缝连续的用户体验。
Windows 10 还号称是微软最后一款大型通用操作系统,即未来不会有 Windows 11。我们解释一下,一款操作系统适配所有通用计算环境,而且没有未来分支,也就是说 Windows 10 不会碎片化。相对于微软曾经同时发布 WinCE、Win XP、XBox OS、Win Server、XP Embedded 等互不兼容的操作系统,均码的 Win10 显然更容易适配即时应用。微软也正在雄心勃勃地进入物联网和区块链等领域。
相比之下,今天谷歌、苹果、Linux 仍然都有多于一个操作系统发行版,会使即时应用无所适从。
就事论事,针对物联网加区块链的场景,JavaScript、Java、C/C++等各种编程语言自动适配,模块之间的调用无远弗届的软件运行平台必然是即时应用的不二选择。
然而物联网最大的挑战就是网络安全问题。假设传统操作系统做到完美(没有后门),再假设传统网络做到完美(没有漏洞),物联网应用要大量发送数据包到某个 IP 地址仍旧照发不误,也就是说发起 DDoS 攻击照旧。传统 OS 补丁加补丁杜绝后门,几十年补不完,谁相信以后会补完?再说了,前些日子网络摄像头攻瘫半个美国,前几天攻瘫半个德国,那还是厂家预置密码没设好。如果恶意山寨几百万 IoT 设备,廉价渗透市场,深喉潜伏,那才真是防不胜防。
我们建议的解决方案是:把 IoT 设备的角色限定为“个人云外设”,并严格控制外设不允许上网。也就是说,互联网二十多年后的今天,网络时代又转回到虚拟 PC 时代,这里虚拟 PC 指的是个人云计算环境(Personal Cloud)。IoT 设备在个人云里作为 Web 服务运行。个人云就像私人网站,视频等物联网设备服务只能被点播,而不允许向外广播。
移动终端上的物联网应用及个人云上的服务之间的所有网络通讯(IP 数据包收发)都唯一由“作为网络运营商的新型操作系统”来承接。应用及服务不能发送 IP 数据包,就很难泄露隐私,也很难发起 DDoS 网络攻击。应用及服务运行在类似容器的虚拟环境里,网络及系统软件签名固化,病毒由应用穿透虚拟机渗透到系统和网络的难度极大增加。
与即时应用配套的网络操作系统技术细节就不在这里讲了,只是说个结论,相比上世纪八十年代成熟的UNIX 及其衍生 OS 而言,今天的 OS 技术已经有了本质的突破性进展。我们相信这类已经成熟,不同公司的产品会在未来三年内逐步占据主流市场。
在区块链领域,尤其是以太坊社区,互联网上几千台去中心化连接的矿机组成一台抽象的计算机,称之为“世界计算机”。其上运行的应用叫“DApp”(Decentralized App)字面翻译为“去中心化应用”。复述一下:DApp 就是一个名字,特指世界计算机上运行的程序。
以太坊的定义容易导致新接触区块链的传统软件程序员误解。细究起来世界计算机这个名字也容易让人发懵。毕竟人们可以用以太坊开源代码搭建不同的公链、联盟链、私链的世界计算机。也就是说,这个世界上可以有很多台世界计算机。我们认为,其实世界计算机叫“区块链计算机”既简单又明确。
这里普及一下计算机行业背景知识:分布式并行计算效率提高的规律受制于 Amdahl's law 而不是Moore's law(参见 Wikipedia)。几千台比特币矿机组成的甚至都不是并行计算机,而是各自重复运算和记录的计算机,其运行效率小于一台矿机。也就是说,利用上千台矿机组成的世界计算机来完成“去中心化应用计算”效率非常低下。
世界计算机与我们常见的云计算服务器组成的单台“虚拟云计算机”目的不同,概念也不同,没有扩容的可能性。以太坊计划采用分区并行等方法加速区块链读写速度,目的是为了打造一台更快的,作为不可更改数据库的世界计算机。云计算扩容是为了增加所谓“弹性”,同时运行更多分布式用户虚拟机,以提高计算效率。
既然世界计算机概念上是单台计算机,其上运行的 DApp 虽说是在去中心化的几千台矿机上重复运行,但概念上也只是 DApp 一个接一个批量串行执行。单台计算机上运行单个应用,那么“去中心化”概念从何谈起?因此“世界计算机上运行 DApp”的说法值得商榷。“区块链计算机上运行智能合约”概念上干净利落。
两位普林斯顿大学博士生于 2014 年创建了 Blockstack 项目及社区,该社区目前号称是区块链领域里面非金融类应用最大社区,有六万粉丝,几十位开发者。他们的目标是“打造一个新的去中心化互联网”,后面还会有更详细的介绍。Blockstack 社区里说的“去中心化应用”(Decentralized App)的涵义并非以太坊社区的定义,而是更接近谷歌“即时应用”的概念。
即时应用跑在去中心化的分布式计算平台上,即在区块链计算机以外的计算机上执行,俗称在链外完成。
重复式计算在区块链计算机上执行,俗称在链内完成。区块链计算机的目的起码有三个:互联网标识征信及溯源,人为制造虚拟数字资产稀缺,智能合约充当“机器人中介”。
目前常见的区块链矿机运行 Linux 操作系统,各自独立保存一份区块链总账的副本。Linux 之上覆盖一层负责广播需要记录交易事物的点对点(P2P)网络。共识及奖励算法运行于 P2P 网络之上;承载智能合约的虚拟机也运行于 P2P 网络之上。正是这个特殊定制的 P2P 网络在概念上抽象定义了区块链计算机。
由此我们联想到上世纪九十年代初期,美国升阳(SUN Micro)公司提出的“网络作为计算机”(TheNetwork is the Computer)的概念——区块链 P2P 网络使得多台矿机形成单台区块链计算机。
区块链计算机支撑去中心化的记账类(比如金融、保险等业务等)智能合约应用独领风骚,但要运行多媒体虚拟数字资产(比如播放电影)及物联网事物处理(比如智能锁的开关)却无能为力。
在互联网上点对点播放去中心化的数字媒体技术早就不是新闻——BitTorrent(即常说的 BT 下载)就是典型的代表。视频直播,互联网电话(VoIP),Skype 聊天,个人云盘,家庭监控摄像头等常见互联网产品中也普遍采用了点对点的去中心或弱中心(中心只是在连接时辅助)软件技术。
不论是 ZigBee、蓝牙,还是 WiFi 物联网设备都需要借助网关(Gateway)或者路由器来访问互联网。这些网关、路由器通常也是运行 Linux 的智能设备。
结合前面提到的“网络作为计算机”的概念,我们建议利用统一的点对点网络覆盖移动终端、家庭网关及区块链计算机的矿机节点,形成单台“物联网加区块链计算机”。去中心化终端上跑的应用,以及去中心化的云盘上、网关上跑的服务等,我们都视其为“物联网加区块链计算机”上支撑的虚拟机里运行的程序,见上图。
就像互联网或者电讯网络一样,所谓点对点网络是由许多不同的 P2P 协议组成。手机短信、电话、视频等功能分别由不同网络协议完成。公路、电梯、高铁、室内、室外的网络优化也都各有千秋。互联网上TCP/IP、UDP、HTTP 等协议就不多说了。去中心化的点对点网络也会碰到这些状况,目前区块链矿机基本雷同,都是通过网线连接,都是发送特定长度的消息,由此推断区块链计算机的网络优化策略不会太复杂。
我们再建议,智能家居网关后面的那些物联网传感器、摄像头等都作为“物联网加区块链计算机”外设,见《通用应用一节》的图示。科普一下,计算机外设是不能直接上网的智能设备,比如键盘、鼠标、打印机、投影仪等。不能上网的设备就安全,不会泄露隐私。运程终端借助家庭网关等结点,通过去中心化的Web 服务来访问物联网“外设”,比如家庭监控摄像头不允许直接发送 IP 数据包到互联网(外网),而必须在家庭网关上作为 Web 服务被点播。
提出物联网加区块链计算机概念的目的只有一个:安全。毕竟金融无小事,物联网平台涉及各种千奇百怪的硬件及业务组合,诸多安全隐患的场景要比区块链平台复杂太多了。
OS 运行库沙箱是安全屏障,网络托管运营安全保证。
开源才有公信力。不崩溃,自主运行的区块链计算机是物联网生态的基础。
目标宏伟,缺了点对点网络及 OS 运行库沙箱等两个必要环节。保障即时应用可以溯源,保障应用的虚拟运行环境可以溯源,保障使用即时应用的消费者(无论是否匿名)的钱包可以溯源。应用溯源包含了虚拟数字资产和物联网硬件设备上的代码执行。
JavaScript 类脚本语言、Java 类中间代码语言、C/C++类原生 CPU 指令语言之间自动桥接。
类 Android 编程模型方便程序员编程,极大增进去中心化应用的生态繁荣。
软件复制成本接近于零,数字世界物质极大丰富。区块链辅助人为制造数字资产的稀缺性,使虚拟数字商品具有价值,杜绝互联网时代的巨无霸操纵价值。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。