百科问答小站 logo
百科问答小站 font logo



自主研发一款浏览器内核的难度到底有多大? 第1页

  

user avatar   cavendish 网友的相关建议: 
      

浏览器引擎历史的一点儿回顾


最近有关红芯办公浏览器的新闻比较火爆,可以参考搜狐:融资2.5亿的红芯宣称自主创新遭打脸:只是谷歌浏览器换层皮一文。知乎罗志宇关于自主研发一款浏览器内核的难度到底有多大?一问的回答中提到了KHTML、WebKit、Blink和KDE、Qt以及Trolltech公司(现在的The Qt Company公司)的一些渊源。
我这里大致按时间线介绍一下:

  • QtTrolltech公司的一个软件产品,可以理解为是一个工具包或者中间件,供其他开发人员开发应用程序用的。Trolltech是一个挪威公司,由Eirik Chambe-Eng和Haavard Nord创建于1994年。1995年5月20日发布了Qt的0.90版,第一个公开发行的预览版。
  • KDE是Linux上的一个桌面环境,由Matthias Ettrich在1996年创建,KDE中的应用程序是基于Qt的。这里需要强调的是KDE是一个开源社区的成果,不能算作Trolltech公司的产品,或者Qt的一部分,虽然Trolltech公司中的很多员工都是KDE的核心开发人员甚至是领导者,甚至Trolltech公司直接雇一个或几个员工,让他们全职为KDE项目做开发工作。(注:Matthias Ettrich,德国人,在1998年加入Trolltech,并在2004-2006年担任Trolltech的VP Engineering。)
  • KDE是一个庞大的桌面环境,其中肯定有针对网页的浏览器应用程序Konqueror,其中的引擎就叫做KHTML,它的前身叫做khtmlw或者the KDE HTML Widget,是Torben Weis和Martin Jones开发的。KHTML是在1998年11月4日出现的,是在khtmlw基础上进行了一定修改,Waldo Bastian是其中之一。
  • 在1999年,KDE项目中有这样的讨论,“是继续推进KHTML还是使用Mozzila”。从5月到8月,Lars Knoll根据W3C DOM标准重写了KHTML,这样在10月,又集成了Harri Porten写的KJS。到2000年3月,Lars又和Antti Koivisto以及Dirk Mueller为KHTML添加了CSS支持。这样KHTML就成为了继IE之后第二个支持希伯来文阿拉伯文等从右向左的文字的网页浏览器,甚至是在Mozilla之前。(注:Lars Knoll,德国人,当时正在完成他的博士学位,他是在2000年7月年加入Trolltech,并在2008年开始担任Trolltech的VP of Engineering,现在仍是The Qt Company公司的CTO。Harri Porten,德国人,也是KDE贡献者,Trolltech公司前雇员,2001年2月KDE社区的一篇访谈中中提到了他很快会被Trolltech雇佣,在2003年创建了froglogic公司。)
  • 2001年6月,Apple(苹果)公司fork了KHTML和KJS,也就是WebKit项目,重命名为WebKitCore和JavaScriptCore,以及后来基于WebKit的Safari浏览器。WebKit也是一个开源项目,除了KDE和Apple的开发人员,Google、Nokia、Bitstream、BlackBerry、Igalia以及很多其它公司也参与了开发。在2008年发布的Qt 4.4中,包含了一个基于WebKit的QtWebKit组件。
  • 2013年,Google公司又fork了WebKit项目,也就是Blink,Blink是Chromium项目的一部分,还有Opera、Adobe、Intel、Samsung等公司参与。自2009年晚些时候开始,Google就是WebKit项目的最大贡献者了。在2014年发布的Qt 5.4中,包含了一个基于Chromium的QtWebEngine组件。

大致的历史如上,但是在Wikipedia: KHTML中,提到了“Descendants of KHTML are used by some of the world’s most widely used browsers, among them Google Chrome, Safari and Opera.”,看来Opera和KHTML还是有些渊源的,但是在Wikipedia: Presto中却没有提及,其中的细节我就不清楚了,看来还得等Opera的内部人士进行解读了。
关于开源项目、软件、科技、自主创新这类话题,我自己的一点看法,现在的中国(或者专指中国大陆,也许还可以包括港澳台,甚至全球的华人),如果有人把Google、Microsoft、Apple这些大公司连带所有的源代码都交到中国(公司或者人员)手中,中国或者中国人能否基于现有以及历史代码,在正常的迭代周期内完成新的版本,并且开发出适量的新特性呢?开源项目的自主创新,也是类似的,开源开源,代码都在那里,怎么才能自主创新并且领导这些开源项目呢?那就是参与进去,做贡献,做最大的新特性,做最多的贡献,久而久之,像Google公司fork了WebKit项目,形成Blink/Chromium项目的故事就有可能了。


Enjoy Life! - Liang Qi


user avatar   fredriklo 网友的相关建议: 
      

来来来, 让写过内核的人给你们聊一聊 ^^

其实内核分类啥的,真的没有那么复杂。 要了解难度啥的, 看看浏览器本身发展的历史会清楚很多。

浏览器的内核从头开看的话, 其实并没有那么多。 Google 的 Blink 来源于 苹果开源的 Webkit,而苹果的开源的 Webkit 来源于 KTHML, 属于 KDE 的一部分, 而 KDE 基于的 QT, 是 Trolltech 开发的, 很多 KHTML 的贡献者其实是来自于 Trolltech.

因此,Google Chrome 和 Safari 这个分支其实是来自于 Trolltech .

很多人不知道的是, Trolltech 也是一家挪威公司, 而且就在 Opera 的楼下。 他们是四楼, 我们是五楼。 我刚加入 Opera 的时候, 他们还和我们共享食堂。很多员工彼此都是好朋友,连代码都是部分共享的. 因此 KTHML 和 Opera 的自有引擎 Presto 架构非常类似。

现在你看到了吧, 内核架构其实就三个分支

  • KTHML, Opera -> Webkit -> Blink (Chome, Opera, Safari)
  • Netscape -> Firefox
  • Trident or whatever -> IE

两个系列是美国的,一个系列是挪威的。

然后有人就要问, 美国做这些东西很正常, 毕竟 IT 起步早,发展快。为啥挪威这种莫名其妙的国家也做浏览器, 还做得风生水起的。。

很大程度上和这个兄弟有关系。这个兄弟叫 Haakon Wium Lie, 也是个挪威人, 发明了 CSS. 然后做了 Opera 的 CTO.

Haakon 在 W3C 的影响力非常大, 毕竟 CSS 之父。 于是带了一大票挪威人在 W3C 里面制定标准。 当年我旁边办公室里面随便拎一个出来,都是 W3C 某个讨论组的主席啥的. 然后事情就比较有意思了。 CSS 规范里面其实非常多的地方定得非常的绕。 如果你去看 Opera 里面的一些 CSS 实现方法, 你会发现实现的非常优雅。而其他浏览器就更像七拼八凑出来的。这让我非常怀疑,其中这些规范是 Opera 实现好了, 再提出来的 ...

现在看清楚了吧。从历史原因来说,美国有资本优势,毕竟互联网泡沫还在, 而挪威有标准影响力。其他任何一个国家研发浏览器在那个时候来说, 都是费力不讨好的事情。

从技术上来说,浏览器研发的难度更多的像是一个系统工程。浏览器的各个组件研发难度其实都不大。

包括很多人认为的 Javascript engine。 其实除非像 V8 那样子往死里面优化,单纯的 javascript engine 其实相当独立且并不复杂

Opera 里面很长一段时间做 javascript engine 就一个人。javascript engine 和浏览器之间的耦合非常标准, 所以做 javascript engine 和 浏览器其他部分的人几乎没有交集。于是这个哥们长达数年时间, 自己跟自己开会,自己跟自己汇报,自己定计划。 最后离职的理由是和其他部门交流太少,实在是太孤独。。

做为系统工程,浏览器最大的挑战的是浏览器承载的网页是不确定的,虽然标准还在, 但是扛不住无限种可能。

比如你并不知道在明天在世界某个角落的人会不会发精神病在页面里面写上一万个 canvas. Opera 当年为了追求小巧, 解析器用的是简单的递归下降。 于是你也不知道是不是有一个精神病会写上一万层标签嵌套搞挂你的栈。

而无限可能带来的另外一个问题是: 你在解决一个新的可能时。你怎么知道没有搞挂另外一个已经解决过的可能呢?

如果是非主流浏览器, 解决这问题事情都需要靠暴力的, Opera 因为做得早,积累了非常多的回归测试。我记得放弃掉 presto 的时候, 大概 14 万个测试用例, 有一个服务器集群每天晚上都跑。 新的提交要是出现了回归,集群马上把报告用邮件自动发给提交者。

如果是主流浏览器,那就好办多了,只需要保证满足标准就行(比如 chrome), 或者不要自己砸自己老版本的浏览器(比如 IE). 因为网页反过来, 会来适配你,

于是如果你要研发一个浏览器内核,那你肯定是从 “非主流浏览器” 浏览器开始,要不然你像 Google 一样,找一个 “主流浏览器” 的内核二次开发,然后强行推广成为一个主流浏览器。

要不然就像 Opera 一样暴力解决。。

而技术本身,相对于系统工程本身,并不是很大问题。从某种意义上面,这和操作系统蛮类似的,不同的仅仅在于,浏览器需要适应无限可能的页面,而操作系统需要适应无限可能的硬件。

而我非常怀疑国内有任何厂商有耐心来做这个事情 。。。

[1] WebKit - Wikipedia

[2]The Qt Company - Wikipedia


user avatar   tapir 网友的相关建议: 
      

泻药

第一个,补充点内容

blink 基于 webkit,讲道理,两者大体一致,无非前者把 webkit 中相关类换成 chromium 与 v8 相关的,并在此之上扩充。

trident 太老了,现在是 edge 了,甚至微软当年还有个 tasman 呢。

这是渲染引擎,还得配上脚本引擎,浏览器上用的,现在大致上是 v8、jsc 、spider monkey(各种猴子就是)、chakra 这几个。

其实脚本引擎实现也不少,比如古老的 rhino,adobe 给 AS 用的 tamarin 什么的。

之前 Opera 自主研发内核时候,还有 presto 配 futhark carakan 啥的。

可见,这么多种,绝对不是蝎子拉屎独一份的,最起码不是难上天儿的。

但,关键就是在你词儿上 “在保证兼容性的情况下”,为它付出的代价可能就比较大了。

甚至大到不仅现在乱七八糟的不断变更推进的规范得烂熟,还得历史情况也门清儿。

相当于接手了一堆不断变更的开发需求不说,还得把几乎在没文档、没源码的情况下,把祖传20年功能连带 Bug (还是叫特性得了)全都开发出来。

着玩意是个巨大门槛啊。

连 Chrome Firefox 当年都没完全这么干,他们是扯着规范的虎皮,几乎不管 IE 祖传的那点玩意,把 IE 给弄残了才起来的。相当于另起炉灶了,等占有率差不多了,再慢慢的搞兼容 IE 常见的那点祖传玩意。

反观当时的 Opera,跟着规范,跟着 IE 的祖传走,最后是在弄不动了,市场占有率也不行,终于扛不住切成 chromium 核了。

所以内,第二个问题就看这个好了 国内三大巨头BAT为何不开发一个浏览器内核?


user avatar   Ivony 网友的相关建议: 
      

主要是费力不讨好,


事实上浏览器的内核的各个模块都有开源或者替代项目。


粗略来讲,一个浏览器内核可以由以下模块组成:

1、HTML和CSS解析器和DOM

2、排版引擎

3、JavaScript脚本引擎

4、HTTP协议引擎


其中1、3、4的个人开源项目一大把,所以说,给一个团队足够的资源做出来不存在难度,当然性能什么的那就另说了,尤其是现在对JavaScript这门坑语言各种黑科技的优化策略。

排版引擎涉及的坑略多,但非要说,金山就有一个排版引擎,改改也不存在难度。


但是做这个东西的好处则几乎没有,如果现在还是2G时代,移动端有带宽硬限制需要定制浏览器,还有UC之类的东西的市场。

更何况,这东西不是做完了就完了的,还要养一个可观的团队持续不断地改进和升级维护。如果不这么干,想想IE当年95%的市场份额是怎么崩溃的?



现在浏览器内核只有三家,Trident/Edge,Mozilla/Gecko,WebKit/Blink,原因也很简单,微软和苹果是因为自己做GUI操作系统,排版引擎不在话下,浏览器内核作为基础服务也必须提供。Mozilla/Gecko本来是要死的,谷爹一看不行,哪天软软果果联合起来一脚把我踢出Web标准委员会(W3C/WHATWG之类的组织),我特么一个做互联网内容的还不被他们俩玩死?就像后IE时代这些年前端被浏览器大佬们玩的欲仙欲死一样。所以硬是搞成了现在的三足鼎立,当然谷爹后来亲自下山撸袖子,那已经是后话了。


user avatar   tommaxmim-18 网友的相关建议: 
      

技术难度是其一,既然是商品,市场生存才是最难的。

前段时间不是风风火火的说三体降维吗。其实还有一种是黑域,就是降低本产业的利润率,影响其他外部竞争对手,导致其对本领域视角是食之无味弃之可惜。目的:一方面大幅降低产业外来冲击,但同时另外一方面,还会吸引周边资本考虑如何利用好此低成本商品,形成大量的交换活动,这样商品才具备了更高的价值。




  

相关话题

  汽车行业目前有什么高大上的科技技术?你对未来汽车高科技有什么期待? 
  财务人员真的有必要学习 SQL 语言和 Power BI 吗? 
  如何看待五名清华科学家发文称新能源汽车排放量比内燃车高50%? 
  程序员可以练成肌肉男吗? 
  我是计算数学专业的学生,以后想向芯片制造方向,或者是航空发动机方向走,请问应该自学什么或者考什么博。? 
  594232 数字是什么意思? 
  硅谷孩子没有电子产品的现象叫什么?科技屏障?电子屏障? 
  从「推动区区几十公斤的一个人移动,要驱动几吨重的铁物」的角度看,人类在汽车上是否走偏了? 
  电影里面警方一般使用的增强清晰度的技术现实存在吗? 
  如何评价大连车务段现在车系统瘫痪,「全力攻关一昼夜」恢复 Flash 运行? 

前一个讨论
为什么越来越多的人痴迷于游戏?
下一个讨论
找工作时单位普遍要求 35 岁以下,那 35 岁以上的人都干什么去了?





© 2024-05-13 - tinynew.org. All Rights Reserved.
© 2024-05-13 - tinynew.org. 保留所有权利