昨天写国产操作系统的文章,头条推荐量突破10万,这证明国人对国产操作系统还是很关注的。有很多人也私信给我各种技术问题,其中能解答的我也有回复。也有很多问题因为超出我知识的盲区,无法做出解答,非常抱歉。
本来今天要推QT5的研究文章,但通过昨天的议论,我觉得很多国人对国产操作系统上有误会,“这不就是在linux系统上换一个皮肤嘛”,这种评论我听到的最多。所以我觉得有必要给对国产操作系统有误会的人做个科普。让大家了解这么多年我们在国产操作系统上做了哪些工作。
什么是桌面操作系统?
桌面操作系统就是大家平常电脑里面用的操作系统。 桌面操作系统应该是所有操作系统类型中最为复杂、研发技术难度最高的一种操作系统了。 世界上非常优秀的桌面操作系统有微软的Windows和苹果的Mac OS,其他的Linux桌面操作系统,比如Fedora、Suse、Ubuntu包括我们自己的deepin操作系统,虽然这十几年取得了长足的进步,但是相对于Windows和Mac OS,不论技术先进性、交互设计还是产品质量方面都还有非常大的差距。
桌面操作系统都有哪些部分组成?
一个普通用户使用的桌面操作系统的组成部分主要包括:
- 内核、驱动以及固件:主要用于驱动硬件可以正常工作,除了CPU、内存、磁盘外,最主要的是要广泛兼容不同的网卡、显卡、声卡和外设等硬件设备。
- 软件仓库及众多开发库:如果没有开源社区众多大神打包好的软件仓库和各种开发库,要基于Linux来开发一个操作系统甭说开源爱好者,甚至就是一个中型公司都很难做起来,可以说开源软件仓库从本质上改变了操作系统和开源软件的开发模式,丰富的软件仓库使开源开发者、组织和公司能够使用最新技术的同时开发成本也降低了很多。
- 桌面环境:就是大家平常一开机就用到的桌面、任务栏和开始菜单等,可以说一个高质量和交互设计极佳的桌面环境可以极大降低用户使用新的桌面操作系统的门槛。
- 应用商店:对于用户来说,绝对不仅仅是一个好玩的桌面环境就能留下的,没有好的应用商店带来的海量应用和方便易用的安装操作,普通用户用几天就会放弃,可以说应用商店是留住普通用户的最基本要求。
- 预装应用:在国内来看,至少需要解决QQ、Office、网银和一系列方便易用的多媒体应用才能算是一个好用的桌面操作系统。目前国产操作系统可以兼容很多windows软件,若是有迫切的需要,可以去官网提交自己的需求来加速适配。
什么是桌面环境?
桌面环境简单来说,就是在内核和X Server之上,写一批程序让用户登录后就可以直觉性、流畅的使用桌面、任务栏、开始菜单、文件操作和系统设置。
这里对X server做个科普,X server是Linux系统里面图形接口服务器的简称。
Windows系统的界面是这个系统不可分割的一部分,各种窗口操作界面显示都是由系统核心直接管理的,
而Linux的图形界面并不是系统的必要组成部分,它可以在无界面的条件下运行。当需要Linux提供界面的时候,系统就会建立一个或者数个X server,通过X协议跟窗口管理器交互,由独立于系统的应用程序来产生窗口,状态栏,按钮之类的交互界面。
比较常见的Linux界面操作环境有KDE和GNOME,为它们提供系统支持的就是X server,而并非Linux核心。
总结一下linux图形界面层次关系:
linux本身-->X服务器<-[通过X协议交谈]->窗口管理器(综合桌面环境)-->X应用程序。
这个世界上从功能完整性和产品质量来看主要有四个桌面环境:
- RedHat主导开发的Gnome, Gnome2的稳定性和性能都非常好,包括后面的Mint桌面都是衍生于Gnome2。
- Suse主导开发的KDE:可以说功能最为丰富的桌面环境,包括产品质量以及性能每年都在飞速进步。
- Ubuntu主导开发的Unity: Unity身上还是可以看到很多Gnome2的影子,产品质量和性能都不错,Ubuntu自己独立开发了Mir、Unity桌面环境和一些全局菜单等独特特性。
- Deepin主导开发的DDE: 作为DDE的开发者,客观的评价,产品质量、设计视觉都符合中国人的习惯,很多地方的交互设计细节要比其他桌面环境做的更加精致和简单,主要面向开箱即用的非技术型用户,从功能设计上并不适合技术高手和那些本来就喜欢折腾的技术型用户
其他轻量型的桌面环境,比如LXDE、XFCE、Enlightenment虽然性能极佳,但是从桌面环境的功能完整性和交互设计的精致性上都不够,比较适合有一定技术深度,追求性能和自己配置多于开箱即用的技术型用户。
剩下的就是一堆平铺类窗口管理器,比如大家熟知的:awesome, i3, xmonad, dwm, stumpwm等等,这些窗口管理器型的桌面环境有300多个,我曾经为了研究所有桌面环境的特性,把这些窗口管理器都用过,最喜欢的是xmonad。这类窗口管理器的可以把个人的工作环境内存和性能消耗降到极低,而且可定制性极强,甚至可以通过编程来打造自己独一无二的工作环境。这类窗口管理器型的桌面环境比较适合开发人员和黑客,当然也不乏国内一大批装X用户。
桌面环境和那些换主题的工作差别在哪里?
可以说,桌面操作系统的核心技术和产品功力都聚焦在桌面环境上。 只有掌握了桌面环境这个古老而又深奥的核心技术,才能说在桌面操作系统上可以任意修改和改进,才能给用户带来更好的用户体验。
因为桌面环境强调的是从上至下全栈技术攻克,不论技术深度、技术全面性和代码工程量来说都是巨大的,开发一个功能完备的桌面环境需要20+人以上的团队工作最少2年以上才能打造出来,而且桌面环境的技术核心全部都依赖一批古老的协议,比如:x11、xcb、composite等基础技术,互联网上几乎没有文档教你怎么一步一步的构建桌面环境,现成的桌面环境因为发展多年,代码已经非常复杂,最多只能从核心代码片段有所学习。一个人要自上而下框架式的学习桌面环境核心技术并实现一套功能完备的桌面环境几乎不可能。
所以,大部分的Linux发行版都是基于Gnome、KDE改的,大多数都是在网上找一批主题(Gtk+主题、图标主题、光标主题、窗口边框主题、DM主题、锁屏主题)再配上一张好看的壁纸就可以做一套自己DIY的桌面环境。很多Linux社区的用户说,你看我自己都可以做桌面环境,甚至很多国内的Linux发行版厂商也是拿着社区的桌面环境然后换一套皮肤就去骗政府的钱,说自己是自主研发的操作系统。
既然换套主题也可以很好,那么桌面环境和那些换主题的工作差别在哪里? 在我看来,主要在几个方面:
- 核心技术能力:如果没有掌握桌面环境的核心技术,所有的修改能力仅仅限于修改主题、logo、字符串替换的能力
- 产品质量无法保障:特别是有很多隐蔽性的bug,如果不掌握核心技术,连问题发生的原因都不知道,更不用提怎么解决
- 设计细节:如果大家仔细看那些只是套用主题的桌面环境,就会发现外面看着还可以,但是很多按钮的颜色、留白以及控件的对齐都是有问题的,甚至是粗糙的,为什么?这是由GTK+的主题设计导致的,GTK+强调的是一套原生控件打天下,但是面对无穷的应用和需求,不是所有的交互都能靠一套控件才能满足的,在大多数Linux社区开发者不具备控件自绘的能力前提下,大多数开发者都选择套用不合适的控件和控件主题去拼装,而GTK+主题的作者不可能在制作主题的时候测试所有软件,而且从GTK+先天限制也做不到,最后导致不论怎么套用主题,各种软件拼装在一起,就像各种质量参差不齐的补丁拼在一起一样的,大多数开源社区开发者被虐很多年可以忍受粗糙的设计细节,但是对于普通用户来说,这种拼装的设计细节就像拿着当年的诺基亚和现在的iPhone7放一块的感觉那么强烈。
- 统一的操作接口:比如右键菜单、文件打开对话框、认证对话框等等,只有从深层次统一这些底层接口,才不会看到不同风格的右键菜单、文件打开对话框、认证对话框,这些都对于统一的桌面操作系统体验非常重要,想一想如果你自己买的iPhone各处都粗糙不一样,你会不会砸了它?但是为啥这么多开源爱好者就能忍受这些粗糙的东西?(因为自己没有花钱,花了钱你看他不把客服电话打爆...)
一个完整的桌面系统从技术剖面看,从下到上主要分这几层:
- 内核驱动层:前面已经说了,主要是保障硬件的基本功能和兼容性,所有的Linux发行版都大同小异,差别就是内核补丁集不一样,或者集成的驱动和固件多少的差异
- 显示服务层:从内核引导到plymouth(我们俗称的开机动画)后,只要你见到登录界面输入密码的时候,这时候X Server已经起来了, X Server简单来理解就是Linux系统中掌握着绘制图形界面生杀大权的“天神”,所有程序要绘制图形的时候都要发送消息到 X Server, X Server才会给你画出来。同时X Server也是事件输入(键盘鼠标)输出(显示器)的抽象层,开发者可以不用考虑底层驱动和显卡驱动细节,直接就可以使用X11/XCB的API进行应用开发,只不过更多的开发者是使用Gtk+/Qt这些在X11/XCB更上层的API进行应用开发
- 显示管理器:简单的理解就是你看到的登录界面提示你输入密码的那个地方
- 资源管理器:这一层主要由一系列的底层守护程序来监控硬件的状态,并汇报给上层的桌面环境和应用进一步操作,比如常见的就有网络、电源、磁盘、蓝牙、声音、键盘、打印等
- 桌面环境: 以深度桌面环境为例,主要包括桌面环境后台服务和守护进程、桌面环境对外提供图形开发工具库、二进制工具、DBus API服务和桌面环境UI界面层几个部分组成的,后面我会详细讲每一个细节
- 应用商店:主要提供系统的软件安装、卸载、升级等操作,保证用户可以安全易用的进行软件管理,同时提供了商店的评论和评分等功能
- 应用程序:主要包括深度开发的系列应用、合作开发的国内应用、Android应用、Windows应用和网页应用,开发者在linux系统中内置了Android RAT,因此,可以直接运行Android应用。
为什么开源的轮子不能用?
深度造了那么多轮子,为什么不用社区的?
社区技术大拿很多,但是技术强大的同时能把一个应用的UI和交互细节做好的开发者鲜有 社区大部分软件都是面向开发者,功能确实强大,但是对于小白用户来说太复杂了 深度希望十年之内解决linux桌面的问题,我们内部每天几百个commit的快速迭代,社区主导开发完了花都谢了 希望做出来再吹牛,不想天天在社区打嘴炮。
十几年开源社区为什么做不好桌面?
主要用户群体是开发者,大多数开发者喜欢黑客般的各种功能堆在一起,而普通用户只需要简单易用的产品 太过于碎片化:大家不齐心,每个人都造半成品互相打压,没有形成合力,最后社区除了大量的半成品,并没有多少应用能够比Windows软件更好(真正能和Windows平台堪比的应用不超过50个) 鄙视小白的氛围不好,技术稍微好一点的人就打击小白用户,大量真正的桌面小白用户走了以后,最后导致大家都不关心桌面的细节体验 做的太少,说的太多,有行动,10年就是翻天覆地变化,而不是大家时间长了都失望了。
开源社区擅长什么?
开源社区适合做远程协助,碎片化的事情,比如文档和翻译,深度社区全世界的翻译贡献者就超过300多名: https://www.transifex.com/linuxdeepin/public/ , 曾经创造西班牙语一星期就翻译完整个系统的奇迹
开源社区适合吐槽, 我说的是客观的吐槽,https://bbs.deepin.org/ 各种用户帮助开发团队发现更多测试版的bug和非常非常好的反馈建议 开源社区适合打包移植, https://www.deepin.org/dde/desktop-transplantation/ 目前深度桌面已经移植到 Arch, Manjaro, SparkyLinux, openSuse, Ubuntu, Gentoo, Fedora 等发行版
国内技术圈偏见
我在开源社区十几年看到国内技术圈很多偏见,最主要的有几个:
- 拿着自己的平铺式窗口管理器装X,鄙视小白用户:其实玩过的人都知道,就是一些配置,花一些耐心和毅力就能搞定,这些只能证明你比较能折腾,但折腾并不代表你的学识渊博和能力高超,更不是鄙视和嘲笑别人的资本
- 认为只有玩内核才是技术高手: 不懂linux的人这样认为,很多开发者也这样认为,真正开发内核的开发者都知道,内核开发和应用开发和其他任何开发都一样,唯一的不同就是更难调试,更复杂。不是只会内核开发的开发者才是最厉害的人,很多内核的开发都要和应用以及现实场景配合才有意义。更不是自己会编译内核就开始了不起了
- 认为做UI和桌面环境很容易: 其实很多嘲笑做UI的人,即使是一些开发者,我相信大部分人连XCB以及窗口移动,甚至窗口阴影都绘制不出来,在国内看到太多拿着无知当权威的喷子了,希望这些人长大以后学会谦虚。其实大家都是看着功成名就来评判的,苹果应该是这个世界上折腾UI细节最多的公司,但是没有人说苹果只会UI,为什么?国人就喜欢打压还没有成功的公司,然后跟风吹捧成功的公司和产品
- Linux就是应该折腾: Linux早期的折腾对于开发者来说是非常有帮助的,但是人都有会老,都会累的那一天(要不是为什么达拉斯黑客大会那么多大牛最后用Mac, 是因为他们折腾没有你多吗?),一旦折腾完Linux就应该花更多时间去学习新的知识或享受生活, 而不是一直都在折腾,然后鄙视不会折腾的人。
通过上面的科普,大家还有认为国产系统仅仅是换肤那样简单的事情吗?我认为大家应该尊重每一位技术开发者,但是真的对于那些完全不基于调查,只是简简单单基于对国内开发团队鄙视而轻言下结论的人感到痛心,希望国人基于事实支持好的产品和团队,停止一切不实的攻击。
以上部分内容来源作者:ManateeLazyCat
链接:https://www.jianshu.com/p/e871723f9460