编按:近来网络又开启了一波反 Flash 的声浪,除了原本对 Flash 不假辞色的苹果外,Facebook、Firefox 也纷纷发难,至于 Google 的态度呢?网络上有不少人问:“如何评价 Google Chrome 浏览器要禁止执行 Flash?”针对这个问题,Opera 的 CTO 罗志宇是这么讲的。
以下这种框,想必很多人都看到过了:
事情的起因还需要追溯到 2013 年,Google 突然发了一个通告,说是 Chrome 浏览器会逐步的去掉对 NPAPI 外挂的支持。这个事情很快就过去了,因为 NPAPI 这种江湖黑话太不亲民了,这个东西到底有啥用,广大群众也并不清楚。关于 Google 公告,可以点击这里察看。
但是其实蛮重要,因为除了 Java 以外,大家喜闻乐见的 Flash,也是 NPAPI 外挂。
时间已经到了 2015 年,这次可不是说说而已了, Google 正式推出时间表:
- 2015 年 1 月开始,除了非常流行的 NPAPI 插件,其他一律屏蔽;
- 2015 年 4 月开始,所有的 NPAPI 外挂默人都是关闭的,用户需要在高级设定中手动打开;
- 2015 年 9 月,所有基于 NPAPI 的外挂无法使用,不管你是 Java、支付宝或者是 Flash,或者百度云。
其他浏览器厂商,比如 Opera、火狐,也纷纷表态会逐渐淘汰 NPAPI。
Opera:我早就说了啊!
火狐:我还是会支持的,只是大家要一起来淘汰这个技术。
但是,NPAPI 到底是什么?
NPAPI 全称叫 Netscape plugin API, 听到这个名字是不是有时光倒流的感觉, 没错,就是那个当年被微软一棒子打死了好多年的 Netscape 浏览器发明的一种扩展浏览器功能的方式。
是不是觉得好拗口? 没办法,我们要从浏览器外挂本身开始说起。
HTML 作为在浏览器里面承载展现内容的规范, 设计起来其实非常困难。 太简单没法用,太复杂了浏览器厂商实现起来又有困难。 一开始的时候 HTML 只是设计用于承载图片,文字一类的主流内容。不过浏览器厂商很快就不满意了,因为除了图片文字以外,很多小众内容,浏览器用户实际上是有需求的。比如 PDF 文件以及影片、音乐。
为了解决这些问题而去要求 W3C 把相应的内容加入到 HTML 标准里面是很不现实的,标准的制定非常繁复,周期也非常长,小众内容到底有没有必要加入 HTML 规范,这种哲学问题一旦讨论起来谁都不知道什么时候能结尾, 于是浏览器厂商们发明了外挂这样一个机制, 这样如果有一些内容不被 HTML 直接支援,用户又确实有需要,那么这部分内容就可以用外挂来处理。
所以,外挂本身对网络的发展,是有重大贡献的, 没有外挂,很多新的内容,比如影片,比如向量游戏(Flash)可能早就胎死腹中了。
W3C (万维网协会)非常识相地很快就把外挂机制正式纳入 HTML4 标准里。 W3C 毕竟不是一个强力部门,它更像各大浏览器厂商背后妥协的产物。
不过按照 W3C 的哲学,外挂毕竟只是对 HTML 的一个补充。而一旦某些外挂提供的内容,由于市场原因反而变为主流,那么 W3C 就会马上将其纳入到 HTML 规范中去,让浏览器原生就支持。
这个提案是 Opera 提出来的, 我还记得 Hakon Wellium Lee 在 Opera 员工大会上面兴致勃勃地讨论这个标签的场景。
这个提案现在还在这里,大家有兴趣可以看看这里
看到这里,外挂在浏览器这个领域的作用已经不言而喻了。
浏览器承载的内容 = HTML(主流内容)+ 外挂(小众内容)
而 W3C 会时刻监视这个等式,动态调整 HTML 支持的内容以维持这个等式的动态平衡。
现在你知道为什么 HTML5 会加入 video、audio 标签了吧。其实严格意义上讲也包括 svg、canvas 一类的标签。
而 NPAPI 就是浏览器外挂架构的一种。事实上, NPAPI 外挂架构是个非常好的架构, 一共就 40 几个 API,相对于另外一种浏览器外挂架构: ActiveX 来说,简直就是业界良心。
这里只有一个问题,它的发明时间是 1995,而在那个时候手机还可以砸死人,学校的电脑教室要穿鞋套才能进。
那个时代所有类似的 API(应用程序界面)设计者几乎都非常自然的忽略掉了安全性问题。
你不信?我们来看看 NPAPI 外挂和浏览器的关系是什么, 同时对比下和同样执行网络下载程式码的 Javascript 引擎的位置。
看懂了吧, 你以为 NPAPI 是外挂吗?其实它和浏览器是平行运作的,它甚至可以打开网页,安装一个木马,然后随手帮你关掉杀毒软件。
可是,你说 NPAPI 不就 40 几个 API 嘛?朋友,你想多了,NPAPI 不限制外挂自由读取系统所有的 API。
而 Javascript 引擎的限制就多得多,事实上,Chromium 系列的浏览器 Javascript 引擎均是运行在沙盒之中,一举一动都是被严密监视着的,敢有异常?浏览器分分钟杀死你。
除了安全性以外,外挂们还质量参差不齐,一旦崩溃浏览器就得跟着一起崩掉, 于是各个浏览器又一把鼻涕一把眼泪地把外挂们放到另外一个进程中执行,既然惹不起难道还躲不起嘛。其他的耗电量、图形效率、脚本效率一类的也差不多,这里就不讲了,多讲了都是眼泪。
如果只是安全,那你把外挂放到沙箱里面隔离起来不就行了吗?
是的,Google 当年也是这样想的,于是他们发明了 PPAPI, 然后在业界里面振臂一呼,大家来看,我的这个新 API 好啊,外挂用起来更安全,还有沙箱。
这个是业界伙伴们的态度:
Java 说:我最近听说 Chrome 不支持我们了,大家请换浏览器,就这样。
火狐说:我们对 PPAPI 一点兴趣都没有。
(而且骗人的是, Google 的 PPAPI 链接居然指的是 Mozilla 的这个页面。不知道是不是存心戳 Mozilla 一把)。
如果你是个软件工程式又有一颗好奇的心,表示无法理解 PPAPI 为何如此不受重视,你可以去这里看看 PPAPI 的说明档 ,在这里。
你一定会发现问题,其实不管你是不是软件工程师你都会发现这个问题。因为,这个 PPAPI 官方说明档连结里面,几乎没有文件。
不过 Adobe 认输了。 事实上 Adobe 很早就开始发表 PPAPI 的版本。
所以如果你这几天再看到文章开始提到的对话框,如果上面写的是 Flash,你只需要去下载一个最新的 PPAPI 的 Flash 外挂,或者下载一个新版的 Chrome。
因为目前 Chrome 已经开始内置 PPAPI 版的 Flash。其他的,就看厂商们如何跟进吧,据说支付宝已经有 PPAPI 版本了。
以上这些我用个简单的故事方便理解:
如果把外挂比喻成各家请来的佣人,有一个叫 Flash 很能干,不过所有的佣人开始都是穿比基尼上班,因为这是规定。但是 Chromium 觉得这个规定不好,说大家应该穿西装,结果遭到了很多佣人的抵制,他们觉得西装不方便。Chromium 说不穿西装不准上班!于是 Flash 认输换了西装,其他人集体辞职,就是这样一个情况。Chromium 不是对 Flash 这个佣人有问题,而是对穿比基尼上班这个陋习有意见。
所以,朋友,不要害怕,Flash 还在的。
如果你看到的是这个框:
其实背后的原因还会更复杂一些。 这个是因为前期炒得沸沸扬扬的 Hacking team 被黑的事件中,Hacking team hacked 的一些非常严重的 Flash 漏洞被泄漏,于是 Chrome 把旧版本的 Flash 全部禁止了。
解决的方法也一样,下载一个最新的 PPAPI 的 Flash 外挂,或者下载一个新版的 Chrome 就好。
以下总结:
各大浏览器,比如 Chrome 禁止了 NPAPI 外挂,但是依然有内置 PPAPI 版的 Flash,本质原因是 Google 觉得以前的外挂架构不合理。加上最近 HT 爆出的 Flash 严重漏洞,才会把低版本的 Flash 禁止了。而这与 Flash 本身没有关系。
大家都知道,Flash 外挂有两个功能,一个是影片,一个是游戏。最近 HTML5 的确很热门,HTML 现在代替影片是没有问题,但是游戏不行。毕竟是新兴市场,还达不到完全取代 Flash 的地步。所以,浏览器不是禁止 Flash 外挂,只是出于安全考虑,对低版本的架构进行升级。
至于游戏,无论什么工具,只要适合项目需求的都是好工具,更何况 App Store 从来没有用开发工具作为游戏分类的条件。因为玩家是不关心用什么工具和语言开发,最关心的恰恰是游戏体验。这也让 Flash 有一定的生存空间。
网络上有不少人问:“如何评价 Google 浏览器禁止运行 Flash?”可以说,这只是一个美丽的误解。
(本文由 雷锋网 授权转载;本文作者罗志宇,混迹 Opera 浏览器十年的 CTO;首图来源:Adobe)