20年前,网页几乎都是用静态标记语言(HTML)编写的。网页基本上是一个具有能够显示它的应用程序(浏览器)的文档。纵观今天的网页,网页已经成为成熟的应用程序,基于web的技术已经取代了绝大多数用需要编译的语言编写的应用程序。是什么促成了这一演变?
答案是Javascript
带来的可编程性。它开启了一场巨大的革命,导致浏览器演变为几乎独立的操作系统。
为什么会发生这样的进化?程序员不再局限于运行特定浏览器版本的用户。不是让标准机构相信需要一个新的HTML标签,而是提供必要的构建块,使底层浏览器的创新速度与运行在浏览器上面的应用程序脱钩。
当然,这有点过于简化了,因为HTML确实随着时间的推移而演变,并为其成功做出了贡献,但仅靠HTML本身的演变是不够的。
在类比eBPF
之前,让我们先来看看在引入JavaScript
时至关重要的几个关键方面:
Javascript
在沙盒环境运行解决。Javascript
通过提供底层构建块来建造任意逻辑来解决这问题。JIT
编译器的引入来解决。上面这些,在eBPF
都可以看到相应的影子。
eBPF
对Linux
内核的冲击对Linux
内核架构的顶层理解和内核如何与应用程序及硬件打交道,有助于理解eBPF
可编程对Linux
内核的冲击。
Linux
内核主要目的是对硬件或虚拟硬件进行抽象化,并提供一个一致的API
(系统调用),允许应用程序可以运行和使用资源。为了达到这个目的,需要维持一系列子系统和层级来分担这些职责。每个子系统提供一定层次的配置来满足用户不同的需要。如果一个所需的行为无法满足,一个内核功能更改就出现了,通过两种方式进行:
Linux
内核社区同意这个改动而eBPF
,意味着一种新的选择,它可以提供新的内核功能,却不需要修改内核代码或加载内核模块。在很多情况下,它就和Javascript
或其它脚本语言一样,可以让那些变更困难或变更成本高的系统迭代新的功能。
暗号:062a8