这两年,自从华为为代表的一些公司被老美加入到所谓“实体清单”之后,业界就开始围绕着芯片和操作系统这两样东西说事儿。芯片被比喻为“心”,操作系统被比喻为“魂”。大家都说,我们的高科技领域这么容易被老美卡脖子,就是因为我们缺心少魂。
作为基础软件行业的从业者,看大家把操作系统比喻为高科技的魂,我当然是很高兴的,这说明整个国家,从上到下,都开始重视了。但国产操作系统到底应该怎么个搞法,却是乱象丛生。就比如华为、阿里、腾讯三巨头分别推出的 OpenEular、AnolisOS、OpenCloudOS,最开始的目的都是解决 CentOS 停更的问题。毕竟这些公司搞云计算,少不了基于 Linux 的服务器操作系统。CentOS 停更,没了免费的午餐,那自然要自己动手了。问题是大家谁也不服谁,各自拉山头搞,还都打着开源协作的名义,想想也是令人陶醉——你们倒是协作一把只搞一个系统啊,同时搞三个,这不浪费资源吗?还有,自从华为提出“根”技术这个营销术语之后,其他厂商也都学习要做全世界的根技术、根社区。前段时间,统信高调宣布要把 Deepin 打造成“立足中国、面向全球的桌面操作系统根社区”,而麒麟软件不甘落后,马上也推出了中国“首个桌面操作系统根社区 openKylin” 。咱们国家在技术上的创新,引用一个老外的评价:“You don't invent anything!(就没见你们发明了什么东西!)”,可这“根”倒是你一条我一条的,老多了。 (旁白:当初老外这句话,对我的冲击力还是挺大的,不知各位大佬听完是什么想法?
无论如何,有所行动,总比光说不练强多了。
之前我曾分析和强调,搞基础软件,绕不开开源,而且开源是一种可以利用来打破旧的生产关系的利器,但能否成功,归根结底看的是技术能力和产品能力。就比如 Linux 内核历经 30 年常胜不衰,原因就是在 Linus 的领导下,Linux 内核成了全世界通用内核技术的创新源泉。Linus 最近表态,Linux 内核马上要引入 Rust 编程语言。显然,Linus 深谙开源之道,他很清楚,在内核中源源不断地加入新的技术,不仅仅是为了让 Linux 内核更好,还可以有效刺激参与者的热情。因此,做社区,尤其要做面向全世界的“根”社区,技术上没有两把刷子是肯定不行的。技术上没有创新,就不可能形成充满自驱力的社区生态,而商业生态的建立就更加困难了。
问题摆在这儿了:在基础软件领域,我们应该如何创新?首先我们要知道哪些做法肯定不是创新:做个兼容视窗或者兼容安卓的操作系统,那肯定算不上创新,做个中国的 Linux 内核,更不叫创新。我们觉得创新难,那是因为已有的框框把我们限制住了。
从我们做所谓自主的基础软件开始,一刻也没有跳出过老外为我们事先设定好的框框。比如,做操作系统,要 POSIX 兼容,做数据库,要支持 SQL 语言,做浏览器,要符合 W3C 的各种标准和规范。就连没形成标准的 Gtk、Qt 这类桌面应用使用的 Toolkit,都被我们当成事实标准一样供起来,顶多做个封装了事。我还听说有大厂高管在工信部开会的时候说:从祖师爷开始就是这么过来的,徒子徒孙不敢改,不能改,不会改,只能继续复制和兼容。
其他的基础软件领域我不熟,留待其他高人讨论。但在操作系统领域,有一个很好的创新抓手,那便是编程语言。所谓纲举目张,这编程语言就是那个纲。可我们的基础软件圈子,这么多年以来,几乎没有人意识到编程语言的重要性,而且反倒成了一个禁忌。一有中国人说要做个编程语言,马上就有一堆人出来讽刺:用中文编程呀!if 改如果,then 改那么,一个新语言就出来了;还有人说,又要造轮子了,且看你造的轮子是不是方的。
我在八年前就指出了编程语言的重要性。后来我在《三谈操作系统》文章里,又一次论证了围绕编程语言和编程接口打造操作系统的方法。有几个大厂重视起来了,比如华为在搞仓颉。某些自媒体还把仓颉渲染成了用中文编程的语言,这是扯淡,我们不谈。
编程语言之所以重要,是因为编程语言是确定一个系统长相的重要基因。就比如 C 语言,它就适合做贴近硬件的程序,而 C++,适合做中间件。国外还有很多专注特定领域的编程语言,比如 Erlang 编程语言,以及这几年时兴的 Go 语言,非常适合做服务器端的软件开发,因为它天生为并发编程设计。编程语言可以确定一个系统的长相,也决定了这个系统的软件栈,还决定了这个系统的配套开发工具。因此,编程语言应该是自主基础软件,尤其是操作系统的重要抓手。如果没有我们自己的编程语言,那所谓的自主,就是海市蜃楼、空中楼阁。
但我这里说的编程语言,指的是最终应用使用的编程语言。一个操作系统的构成非常复杂,不是说我们有个自己的编程语言,那所有的事儿都让这个编程语言干了。不是的,该用 C 语言的地方还是要用 C 语言,该用 C++ 的地方还是应该用 C++。那么多开源的基础软件,不能用的扔掉,可用的继续用,不可用的改进,慢慢就都掌握了,跟是自己的也没啥本质区别,这叫重构。如果我们不能充分利用这些开源的基础软件,一切从零开始,那要付出的代价将非常大。
一旦我们为最终的应用设计了自己的编程语言,尤其是让编程模式都发生巨大变化的语言,那我们就可以自顶向下去设计一个新的系统。这个时候,那些老外制定的什么这个标准、那个规范,就不重要了,而我们就可以自己定义自己的标准和规范。当你有了自己的标准和规范,你还会去想那些经过我们改造和重构的开源基础软件是不是我们自己写的?
就如同取代微信的永远不会是另一个微信一样,对已有体系的重构,必然来自于更高维度的思考。
一句话,我们必须在传承现有开源基础软件体系的基础上进行大胆的突破和创新,才能重构自己的基础软件体系,甚至是整个计算体系!
如果不打破这些枷锁和樊笼,所谓的自主是不会有出路的,整天跟在老外屁股后面走,我们的基础软件很难看到未来.
来自魏永明微博.
文章评论