奋战开源操作系统二十年为什么编程语言是突

白癜风怎么治疗 http://pf.39.net/bdfyy/dbfzl/180614/6329464.html

编程语言之于操作系统,意味着什么?本文作者飞漫软件创始人魏永明经过二十余年的操作系统开发探索,明确提出编程语言是自主基础软件,尤其是操作系统的重要抓手。如果说操作系统是基础软件生态里的皇冠,那编程语言就是王冠上的明珠。如果没有自己的编程语言,那所谓的自主,就是海市蜃楼、空中楼阁。由此,他走上了开源编程语言的探索与实践之路。

作者

魏永明责编

唐小引

出品

《新程序员》编辑部

从低迷的Linux桌面系统说起

全世界范围内的开源运动浩浩荡荡,滚滚向前。Linux内核作为开源软件中的杰出代表,在云计算、服务器端、智能手机端、嵌入式系统中的成功举世公认。截止年底,Linux在服务器领域占据了96%的市场份额,在超级计算机领域几乎占领了全部市场,在云计算基础设施领域占据了90%的市场份额,在智能手机领域也占有85%的市场份额。现今,在人们日常的工作和生活中,Linux内核几乎无处不在。但与此相反的,则是Linux桌面系统地位不断下滑。据统计,长期以来,Linux桌面系统的市场份额徘徊在2%左右,而原来被微软Windows压得喘不过气来的macOS系统,却在近几年取得了不小的进步,获得了超过10%的市场份额。

自年以来,全球有众多公司如RedHat、SUSE以及中国的若干企业一直在尝试打造基于Linux内核、GNU工具以及XWindow、GNOME或KDE的桌面系统。但二十年来,我们并没有得到一个可以媲美Windows或macOS的桌面系统,这其中的教训值得深思。究其原因,大家都会指点一二。比如Linux桌面系统的模仿痕迹太重,技术上始终跟随Windows,也没有自己的产品特色;缺乏Office这样的关键应用软件;各种发行版满天飞,造成严重的碎片化问题,还导致应用之间的互兼容性问题等。

为什么二十年来,全世界有那么多企业和社区前赴后继、努力打造的Linux桌面系统,却始终无法走向大众市场,而仅仅局限于少数狂热的爱好者当中?

再以本人的亲身经历为例。笔者搞了二十多年嵌入式窗口和图形系统——MiniGUI,最初模仿Win32提供C语言的应用编程接口。在本世纪最初的十多年间,MiniGUI在机顶盒、功能手机、数码相框等产品中得到了大量的应用。但自从Google开源发布了Android操作系统之后,包括MiniGUI在内的很多嵌入式基础软件,都遇到了前所未有的危机,这其中也包括针对嵌入式系统的输入法、字体、浏览器等多款软件产品。为了应对这一危机,我们也曾做出过一些尝试,比如提供类似VisualStudio一样的界面设计器、类iPhone的UI特效、对JavaJ2SE应用框架的支持等。然而,这些尝试和Android这种具有全新操作系统架构和应用框架的现代操作系统相比,实在不堪一击。

这引得我不得不思考:嵌入式领域是本世纪初兴起的产业,当时,我们在这个领域的基础软件水平和美国差不了多少,而且坐拥全球最大的消费类电子产品市场,但为什么在其后十多年的发展竞争中,我们仍然落败于美国?

编程语言是操作系统获得突破的重要抓手

尽管我们可以将自身发展不力的原因归咎于政府保护知识产权政策不完善等因素,但我们也不得不承认,在引领技术潮流方面,我们差的不是一星半点:我们的基础软件行业,和Linux桌面系统一样,一直将自己定位为追随者,始终没有走出模仿的怪圈。要走出这个怪圈,我们首先要想清楚操作系统这类基础软件的第一用户是谁,即我们首要服务于哪类用户。

我的观点是,类似操作系统这样的基础软件,其首要用户是开发者。一个基础软件,不论是操作系统还是数据库,只有首先满足了开发者的需求,服务甚至取悦开发者,才能建立起获得进一步成功的基础。重视开发者,优先为开发者服务,是基础软件的生存之道。其道理不言而喻:一款基础软件要获得大规模的应用,就离不开开发者,而基础软件的作者本身,纵有七十二变,也不可能把全世界的应用需求都给满足了。

只有将开发者定义为基础软件,尤其是操作系统的第一用户,我们的思路才可能有一个重要的转变。

如果我们简单回顾一下成功操作系统的发展,就可以得出这些操作系统一开始就不遗余力地为服务开发者而努力。比如微软,从Windows3.0开始,就为降低Windows上的应用开发门槛在努力,这其中就包括VisualC++、VisualBasic以及后来的VisualStudio、C#编程语言和.Net应用框架。苹果和谷歌围绕各自操作系统所走的道路也类似。发展到今天,我们可以看到几乎所有成功的操作系统都有自己专属的一种编程语言以及围绕其打造的独特的应用框架。

作为反面案例,Linux桌面系统上从未出现过任何专属的编程语言、应用框架以及开发工具。在当前市场趋势下,面对跨平台和融合终端应用的开发需求,Linux桌面系统更是乏善可陈。GNOME、KDE两大阵营,一个基于C语言,一个基于C++语言,围绕这两个编程语言的应用框架,沿用的仍然是二十年前Unix工作站所使用的技术和框架。讽刺的是,Linux桌面系统上使用最广的开发工具,是微软开发的VisualStudioCode。

图源:视觉中国

此前,我曾几度阐述过编程语言对一个操作系统的重要性。简而言之,编程语言之所以重要,是因为编程语言是确定一个系统长相的重要基因。就比如C语言,它适合开发贴近硬件的程序,而C++,适合用于开发中间件。国外还有很多专注特定领域的编程语言,比如Go语言适合开发服务器软件,因为它天生为并发编程设计。编程语言可以确定一个系统的长相,也决定了这个系统的软件栈,及其配套的开发工具,还可以成为解决一些顽疾的灵丹妙药。因此,编程语言是自主基础软件,尤其是操作系统的重要抓手。如果没有我们自己的编程语言,那所谓的自主操作系统,就是海市蜃楼、空中楼阁。

因此,如果我们要发展自主的操作系统,就必须走出模仿的怪圈,而若想成为技术上的引领者,就要尝试为自己的操作系统设计一款全新的编程语言。没有自主的编程语言以及围绕其上的自主应用框架,对操作系统而言,就如同缺失了灵魂一样,便无法胜任技术引领者的角色。

目前,在中国信创领域,中国政府正在推广基于Linux的桌面系统以及嵌入式系统,在政府意志的推动之下,相关的技术积累和市场推广正在稳步推进,曾经困扰业界多年的关键应用,如办公套件、输入法等,通过中国本土的商业软件产品得到了有效解决。根据统计,单单中国政府的桌面系统,存量市场就超过了亿套,每年的新增安装量近五百万套,如果再加上一些关键行业和要害部门(如能源、交通等),足以支撑全球10%的桌面系统市场份额。这将给基于Linux的桌面系统和嵌入式系统带来前所未有的巨大市场机遇。然而,如果我们仅仅止步于跑马圈地,而无视发展自主编程语言的重要性,到头来也将竹篮打水一场空。

下一代操作系统需要什么样的编程语言?

随着云计算和物联网技术的普及,现在的应用跟二十年前大不一样了,最大的特点是需要联网、跨平台,而且可能要运行在不同类型的设备上,我们暂且称之为“融合终端”应用。在满足融合终端类应用需求这一方面,主流的操作系统厂商在做全新的尝试,比如苹果为macOS、iOS、padOS、watchOS开发Swift编程语言,谷歌的Flutter使用Dart编程语言,微软也正在为UniversalApp做技术上的准备等等。

操作系统巨头技术生态布局(图源:《新程序员》)

显然,要在这场竞争中获胜,需要我们设计新的、云计算和物联网友好的编程语言和开发工具。一方面,可用来满足融合终端类应用的需求,另一方面还可用于提高应用的开发效率,同时,还可以成为操作系统生态的护城河。

那么什么样的编程语言是符合未来趋势的?对此,目前阶段很难准确描述。但我们可以尝试从宏观上描述适应上述全新需求的编程语言可能的主要技术特征:

描述式语言,易读且容易理解,甚至可支持开发者使用母语编程,从而让非职业程序员也能编写出满足需求的程序。

具有更高抽象层次的编程语言,开发者可以使用更少的代码实现更多的工作,且无需过多关心技术细节。

提供抽象的跨平台可移植接口。通过全新的接口设计来屏蔽底层操作系统或者平台的差异,这是跨平台的必然选择。

支持现代编程技术,如动态特性,对协程、并发、闭包等的支持。

良好的可扩展性和伸缩性,既可以用来开发脚本程序,也可以支持大型分布式应用的开发。

功能和性能的良好平衡,使之可用于嵌入式系统,甚至物联网设备端。

一旦我们为未来的融合终端应用设计了自己的编程语言,尤其是让编程模式都发生巨大变化的语言,那就可以自顶向下去设计一个新的操作系统。这个操作系统甚至可以涵盖云端、客户端、嵌入式系统和物联网。而内核、工具链、窗口系统、界面构件库、包管理系统,所有这些底层的技术将成为“汽车引擎盖”下面的东西,一般的应用开发者无需关心这些技术。如此,便有了服务开发者的基础。在此之上,我们利用或者围绕新的编程语言开发IDE(集成开发环境)、自动化测试和部署框架、关键应用软件、应用商店、特定应用领域内的第三方运行时函数库等等,而这一切,合起来便是操作系统的生态。

自主开源编程语言设计与开发之路

为了践行上述所讲的理论,我提出并开发了全新的编程语言HVML(HybridVirtualMarkupLanguage,中文名为呼噜猫)。这是一款通用、易学的开源编程语言,从年7月提出并公开第一份规范草案,到年7月成立攻坚团队着手HVML解释器(PurC)的开发,年7月31日,在GitHub上开放了HVML相关的六大源代码仓库(或源代码包),这标志着HVML1.0正式发布,这其间已经走过了两年的时光。

而在过去整整一年的开发过程中,笔者带领团队实现了所有的设想以及绝大多数的功能。作为设计者,笔者将HVML定义为一种全新的编程语言:可编程标记语言(ProgrammableMarkupLanguage)。并为HVML赋予了全新的设计理念,使之基本满足前文所说的全新编程语言的技术特征:

使用标记来定义程序的结构和控制流,大大提高了程序的可读性,同时大幅降低了学习难度。

使用具有动态功能的扩展JSON来定义数据,隐藏了底层系统,而且使其成为粘合不同系统组件的理想胶水。

引入了数据驱动的编程模型,这让开发人员更多地


转载请注明:http://www.aierlanlan.com/grrz/3737.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了