[Web翻译]我们称之为浏览器的通用虚拟机

430 阅读15分钟

原文地址:cerebralab.com/The_univers…

原文作者:cerebralab.com/

发布时间:2021年7月14日

为了在任何机器上运行相同的应用程序代码,有许多标准化的尝试。clang和gcc试图为各种语言提供一个通用的前端,标准库试图抽象出特定机器和特定操作系统的功能,语言运行时间和完全成熟的虚拟机(例如JVM)。更不用说POSIX标准、包括Linux VM在内的Windows和容器了。

i - 普遍性的梦想

早在70年代,人们可能就认为,所有计算机都能执行的虚拟机或字节码的 "共享标准 "的想法将是惊人的。

不再有基于环境和架构的划分;每个人都可以运行相同的应用程序。

数以千计的顶级工程师会对建立一个能在所有操作系统上运行的虚拟机的想法跃跃欲试,并设计出一个世界上大多数应用程序都能编译的字节码。

因此,为了再次证明他们不朽的幽默感,众神决定,虚拟机应该遵循文本渲染引擎的规格,而字节码应该是由一个在该领域没有特别专长的家伙在几个咖啡因中毒的夜晚制作的无类型的高级脚本语言。

更多的软件神论学者,如vgr、smbc和xkcd,已经思考了为什么会发生这种情况,但我在这里的兴趣是看看浏览器的愿景和它们的能力是如何随着时间的推移而改变的,以及在未来10年里我们可以很有信心地期待什么。

我将迅速指出浏览器变得如此强大的原因。

  • 竞争,由于缺乏垄断,浏览器必须遵守大致相同的标准,并保持一定的质量,否则就会被甩在后面(见IE
  • 功能蠕变,当与上述情况和互联网的发展相结合时,导致了功能的增长。移除功能是不可能的。这是一个自然法则,随着程序的老化,它要么在错误和市场需求的重压下崩溃,要么成长为无所不能。

二 - 文本渲染

网络的最初想法出乎意料的伟大,这种想法可能是由老派的Unix黑客设计的。它的前提是。

  1. 你所需要交流的只是文本和一些多媒体;其格式可以是一种简单的标记语言。

  2. 人们应该能够接触到源代码,而不是下载一个二进制文件,并且能够轻松地阅读和修改它,以定制他们的体验,更好地理解技术。

当用户哭着说它看起来很丑时,CSS就出现了;当程序员哭着说要有更多的控制权时,javascript就出现了。

有一段时间,事情还停留在最初的设想上,javascript在不同的浏览器之间不兼容,所以它被使用得很少,而且它对大多数网站来说也不是必不可少的。

互联网是由精通技术的人使用的,而这些人通常都是一些极简主义者,对信号不利,是那种厌恶在粪便上作画的人。

我不确定事情是什么时候改变的,但我认为大约是在2005年到2015年期间。

三、作为编译目标的Javascript

我一直认为,如果类型没有增加额外的安全性,而且类型错误是运行时而不是编译时,那么类型化的语言就会很好。我很高兴勇敢的javascript工程师们正在投入工作以实现这一目标。--Twitter上的讽刺性评论

浏览器已经获得了市场主导地位,不是单一的浏览器,而是许多类似的浏览器,几乎每一台PC、手机、笔记本电脑、平板电脑和性玩具都会默认发货。

与此同时,也许是受此刺激,人们对javascript和jquery感到厌烦,试图设计自己的更聪明、更好、更强大的库来支持丑陋的脚本语言。库后来演变成了框架,框架又决定它们复杂到需要转译器,转译器意味着你可能会对javascript进行更多的 "入侵",并建立你自己的方言。转译器发展成为编译器,构建文件发展成为静态导入语义和构建系统。

据我所知,从单文件的javascript到一些最复杂(和最庞大)的构建系统(例如webpack),大约花了5年时间(大约是2010年到2015年)。

这些变化并不是空穴来风的。在2005年至2015年期间,互联网从 "模糊的技术专家或至少是奇怪的人和孩子 "变成了 "从婴儿到阿米什人,到老卢德人和足球妈妈的所有人"。

这带来了一系列新的挑战,开放性和可理解性已经不重要了,现在你有一些问题,比如用户会因为缺少一个加载条而感到焦虑,根据现有的个人数据库来定位广告,以及确保多媒体多巴胺的跑步机不会因为连接不良而中断。

当然,我们不应该忘记网速越来越快,人们有了更多的空闲时间,在社交媒体上长大的人有了自己的钱,以及将偷窥视为可接受甚至是良性的文化转变的作用。

到2005年,网页变成了网站,2015年,网站变成了webapps。

我仍然不确定为什么大多数公司选择使用高度复杂的设置,如angular-typescript-webpack来处理这种用例的变化。我认为标准的解释是,虽然比普通的js更麻烦,速度更慢,但它们允许更容易的过渡和团队扩展。

四 - 浏览器作为虚拟机

但是最近几年呢?基于Javascript的语言/框架/库/平台的突变体正在逐渐成熟并聚集在一起,其结果可以预见是平庸的。

与此同时,浏览器也开始接受它们是虚拟机的事实,并最终以网络汇编的形式公开了一个体面的字节码作为编译目标。

因此,现在我们实际上可以使用一堆很棒的语言,并产生快速和漂亮的架构的应用程序,在浏览器上运行。有一些限制,因为WASM最终是在JS运行时上运行的,但是JS运行时已经变得相当好了,而且正在迅速改进。阻碍JS运行时的主要因素是javascript,WASM成为一流的公民将解决这个问题。

不仅如此,浏览器也开始暴露出更多的API,允许更复杂的应用。它开始于像本地存储和网络套接字这样的东西,但现在我们有工作原型和原始TCP和UDP连接GPU访问虚拟文件系统的规格。

考虑到网络组件在不断增长,额外的API不断被添加到浏览器中,我们需要多长时间才能将任意的应用程序编译成wasm?

想一想,在未来,我们可以打开浏览器,运行tf/torch、starcraft、sqlite、postgres、clang、brew、wayland、R studio、bsd或linux虚拟机、octave、.NET生态系统、vim、vscode、另一个浏览器。

骗人的假设,其中有一堆已经发生了。

v - 未来

那么,我们对几年后的浏览器应该有什么期待呢?

很显然,我不知道。但我认为有几种情况似乎是合理的,而且很有趣。

显而易见的是,浏览器继续朝着虚拟机的方向发展,并且有更多的编程工具可以使用。像GTK和QT这样的框架将在这个领域得到广泛使用,HTML和CSS将成为可有可无的东西,"标准 "是网络服务器简单地提供一些由浏览器运行的压缩字节码。

这里最大的变化是通过TCP的自定义通信协议,这可以使效率更高,并避免SSL中的一些盲点,但这将导致浏览器供应商无法执行加密(尽管在实践中,可能很容易只是嗅探出去的软件包,并试图检测是否使用了任何加密,如果没有,则警告用户)。

这将允许更多的去中心化,因为应用程序本身就可以成为完全成熟的平台。想想看,一个通过正常协议下载的应用程序,但随后使用TOR来处理所有进一步的信息,也许甚至让你选择使用你的计算机作为一个节点,或一个在浏览器中运行的加密客户端,或一个本质上是通往自己的整个私人网络的网关的应用程序。它还可能助长令人担忧的趋势,即像facebook这样的网站对许多人来说是 "互联网 "的代名词。

网络开发环境将变得更加支离破碎,但将js+html+css作为一种通用语言的想法早已不复存在。那么,这是否会有任何伤害呢?对于那些想创造非常独特的产品并且有足够资金或人才的团队来说,这将是非常好的。这对开发者的工资来说是非常好的,因为这种分裂几乎总是积极的,事情变得更难完成,旧的技能变得无用,新的开发者进入一个渴望学习能力的市场。我认为这将损害 "通用但不够通用的WordPress "应用程序的市场......但我不确定这一定是一件坏事,从消费者的角度来看。

我们会不会走到浏览器取代操作系统的地步......也许在某些机器上是这样的,尽管到目前为止,所有针对这个的项目都没有运气。也就是说,我现在打开的每一个应用程序,除了我的终端,都在电子或火狐上运行。一个更好的electron出现,并且流行的Linux发行版基本上用它来取代他们的GUI,这有那么牵强吗?我不这么认为。为了提高资源效率,浏览器在不久的将来会有一个运行电子应用程序的选项,这种想法是否很牵强?并非如此。所以我们可能会出现这样的情况,即堆栈变成类似于引导程序->内核->浏览器。最大的障碍是,如果浏览器应用程序可以开始要求sudo权限,那么安全要求会增加。

如果这看起来很牵强,考虑一下现在的应用开发者在工作环境方面的动机。选择浏览器作为你的环境意味着。

  • 大量的社区支持
  • 几乎所有的东西都是开源的
  • 大量的就业市场的需求
  • 缺乏库(在一个足够流行的环境中,这可能是兴趣的驱动力,而不是阻力,人们现在可以重新发明轮子,并在这个过程中获得成功
  • 易于使用的API
  • 任何人几乎都可以即时访问你的应用程序

我相信有一些聪明的18岁的应用开发者没有为浏览器开发,但虽然不是一致的,但浏览器作为目标现在是年轻一代的规范。

像chrome-os这样的东西有点失败,因为他们试图在人们意识到之前做一些明显是 "新事物 "的事情。许多创新都是如此,从掌上电脑到GUI到鼠标,再到Myspace。

但是,许多人已经把资源放在浏览器作为操作系统的背后,而失败主要是由于用户的兴趣而不是技术上的限制,这是一个好的迹象。

六 - 路障

我认为在浏览器作为单一应用的未来,有几个潜在的 "路障"。我使用引号是因为我不认为浏览器成为通用虚拟机或新的操作系统规格就一定是好事...... 我不认为这一定是坏事,这只是摩洛神的无意识之手在塑造世界,这是一种自然的力量,不是任何个人或组织可以控制的。它最终是好事还是坏事,是留给历史学家的问题。但是有什么东西可以阻止它吗?

最有可能的是浏览器的垄断。IE垄断时代没有看到我们现在这样的进步。但是,某些公司(谷歌)肯定会推动试图 "拥有 "大量的互联网,而且他们也不必一下子就垄断所有的东西,只要所有的浏览器都运行在chromium上,他们就已经完全控制了,他们可以只专注于杀死Mozilla,然后慢慢地改造chromium,使所有其他浏览器都被迫遵循谷歌的企业利益。

另一种情况是国家强制推行的浏览器。这听起来可能很牵强,但现在美国已经完成了所有的创新,几乎无法阻止各个国家禁止美国公司并实施自己的克隆。中国已经这样做了,"大力鼓励其公民 "使用部分政府拥有的公司,从搜索到电子邮件,到聊天,到论坛。TOR和VPN可以使任何政策相对难以执行。政府授权的浏览器会成为一种事物吗?我对此表示怀疑,甚至中国似乎也未能(或没有尝试)执行其政府拥有的浏览器,QQ(腾讯)和UC(阿里巴巴)只占市场份额的20%。但这是一个值得关注的问题。

网络装配没有进一步发展,或者一个主要的浏览器放弃支持,也将是致命的。情况似乎并非如此,wasm标准被迅速和统一地采用。但wasm仍然处于起步阶段。

另一种情况是公司拒绝转向基于wasm的解决方案,让开发团队坚持使用Angular和React等标准框架。考虑到像谷歌的Flutter这样的语言+框架背后的利益,这似乎不太可能,它将从编译到wasm中受益匪浅。更重要的是,Angular和React都鼓励使用typescript,而typescript已经可以编译成wasm,你可以通过配置工具和库等东西获得 "语言泄漏",就像Groovy、Scala、Clojure和Kotlin "潜入 "只使用Java的公司并慢慢开始接管一样。

当然,还有一种可能性,即人们意识到花费数小时与越来越诱人的格式的多媒体打交道,不仅使他们不快乐,而且夺走了他们的个性,让算法来支配他们内心的欲望和控制他们的情绪。互联网的一个令人惊奇的特点,即公开信息和为后代保护信息的能力,正在被剥夺。那么,为什么要听从那些华而不实的网络应用,而不是坚持使用不那么具有掠夺性和更有用的 "老式 "互联网...。我只是在拉你的腿,这不会发生,别担心 :)

vii - 准备

总的来说,面对这种转变,我没有看到任何重大的路障。

我自己也在努力学习一些当今广泛使用的基于wasm的栈,甚至还在调侃说要把我建了一半的一个应用翻译成rust库,让它能通过wasm在浏览器上运行。

要了解这些新的 "虚拟机浏览器 "的能力,可能还需要一段时间。就像11年前学习angular是相当无用的。但如果你有时间,也无妨。即使你从未打算成为一名应用开发者(我当然不打算),在招聘应用开发者时,这也是一种相当有价值的东西,它是了解应用开发者5年后会遇到的那种问题和限制的一种方式。

我对5年后的多语言(通过编译为wasm)浏览器有大约50-60%的信心,其代码可以要求硬件访问,与没有sudo权限的用户一样;一个比JVM更强大的浏览器。如果有人愿意接受我的这个赌注,我将非常乐意围绕它讨论一些稍微具体的指标。

我不确定的一点是,智能手机如何在这一切中发挥作用。安卓手机制造商似乎对基于浏览器的应用程序的想法非常满意,而苹果大多拒绝在其AppStore上允许它们。这种融合正在发生,在手机/平板电脑上,越来越多的应用程序使用浏览器运行时,而在笔记本电脑/个人电脑上,越来越多的公司选择提供网页应用程序,而不是普通的应用程序/程序。

我还想看到的一点是,在浏览器之外支持wasm,基本上允许它成为普通编译器的一个正常 "前端"。当然,我认为这对浏览器来说太特殊了,没有任何意义,但规格可以扩展,同样的事情也可以说是关于javascript的,但node确实风靡了世界。

发表于:2021-07-14


www.deepl.com 翻译