我们的软件:由 Gamepad API 引发的感想

最近两三年,自己总是疲于各种会议、讨论、写文档,虽然也是围绕着软件技术做事情,但总感觉技术本身在渐渐远离我。而我只是借用它的名义赚钱的小丑,忘却了我爱它的初衷。加之这两年发生了许多事情,让心绪有所变化,也让精力有所倦怠,学习新技术的动力愈加不足。趁着年关前后这段时间,想至少在自己的专精领域再次刷新下知识体系与认知。

也就在昨天,浏览 MDN 文档时看到了 Gamepad API在新窗口打开 ,其介绍让我顿生感喟:

The Gamepad API is a way for developers to access and respond to signals from gamepads and other game controllers in a simple, consistent way.

控制游戏手柄的 API 算不上什么新鲜事,然而这发生在 Web 上,委实令我有些吃惊。吃惊的不是技术实现本身,而是它存在的形式。我们的浏览器从最初的仅为了看到远方的几行文字、些许观点、寥寥数据,日渐承担了太多多媒体——影音甚至直播、动画绘图甚至 WebGL。悉数现代浏览器可以做的事情,各类推送协议、各类性能提升与监控,从蓝牙到支付到地理定位,从其最本真的 DOM 操作、屏幕控制到各类存储策略、工作线程等等等等,不胜枚举。精小到看视频时的“画中画”技术,它居然也提供了原生实现。

俨然,浏览器已经成为一个小型的操作系统。

起初,在操作系统之上,各类软件实现各自的功能。是网络互通让浏览器这个软件应运而生——我们需要统一的软件,至少是统一的技术标准来访问遥远的服务器上的内容。起初,我们安装软件还要靠软盘、光盘、U 盘作为媒介,现在已是一个通过软件安装软件的时代,这个用于安装软件的软件往往又是浏览器。

如果说操作系统消除了软件调用硬件资源时的差异,那么浏览器呢?起初它只是提供一种标记语言的解析,如今却不断地允许远方的代码调用本地的硬件资源。那么它为什么不索性成为操作系统?或者操作系统本身就是一个浏览器?然而滑稽的事是,这一怀疑也早已是现实存在。我会去想,也许未来的浏览器接口里,可以直接调用操作系统接口,而它要做的只是安全保障、兼容适配等工作。

慢慢的,看电影不用下载到硬盘了,玩游戏都不需要安装光盘了。一切都在线。

想起来,软件技术发展到今天,背后是硬件的发展、基础设施的发展。而软件自身的互相依赖,也已千丝万缕、错综复杂。想象着各个家庭里的硬件设备,每个人手上的手机,想象着地下无数的光纤,想象着空气中不同频段的各类电波,我仿佛看到一堆不同的通信协议在眼前飘扬。它们被层层加密,被层层转发,又被层层监听。想象着无数网线中穿插的信号,它们中有的是一首我们喜欢的歌曲,有的是无助的求救,有的是代表财富的数字,有的仅仅是为了阻塞通道的垃圾。

任何一个环节,哪怕一个小小的环节出现差池,一个人或者一群人的人生将全部毁掉。尽管我知道复杂的软件技术背后同时拥有复杂的保障技术,否则一切仿佛会脆弱到:我在空气中吹口气,便能吹跑你手机转账时的一个 0 。然而这些保障技术本身真的有保障吗?比如求离散对数变得不再困难后会怎样?

更为要紧的是,作为一个从业者,我已经远远无法理解现今软件技术的复杂性,不清楚发生在我身边的绝大多数事件。群体往往是愚蠢的,而如今群体的智慧却让每个个体显得如此愚蠢。我们只能做眼下自己能做的事情,我们要无条件地相信别人提供给我们的服务。真的可以这样吗?

我们的软件变得越来越复杂,它们究竟还是不是我们的软件?软件下的我们何去何从?


@ssbunny 2022-02-17

Last Updated:
Contributors: ssbunny