今天,结合深度桌面操作系统,我们来谈谈桌面操作系统的架构设计和原理细节。首先,我想告诉外界这么多年来我做了什么;其次,我希望通过客观公正的事实,告诉新一代中国开源爱好者如何用正确的三观贡献自己的力量。
桌面操作系统是什么?
简而言之,桌面操作系统是个人电脑中常用的操作系统。桌面操作系统应该是所有操作系统类型中最复杂、最难开发的操作系统。微软是世界上非常优秀的桌面操作系统Windows和苹果的Mac OS,其他的Linux例如,桌面操作系统Fedora、Suse、Ubuntu包括我们自己的Deepin,虽然这十年取得了长足的进步,但与Windows和Mac OS,先进的技术、交互设计和产品质量都有很大的差距。
桌面操作系统的组成部分是什么?
普通用户使用的桌面操作系统的组成部分主要包括:
●内核、驱动和固件:除驱动硬件正常工作外,主要用于驱动硬件CPU、内存、磁盘外,最重要的是要广泛兼容不同的硬件设备,如网卡、显卡、声卡和外设
●软件仓库及众多开发仓库:如果开源社区没有很多大神包装的软件仓库和各种开发仓库,应该基于Linux要开发一个操作系统,更不用说开源爱好者了,甚至是中型公司也很难做到,可以说,开源软件仓库本质上改变了操作系统和开源软件的开发模式。丰富的软件仓库使开源开发人员、组织和公司能够使用最新技术,开发成本大大降低
●桌面环境:这里提到的桌面环境就是桌面、任务栏、开始菜单等,大家一开机就用。可以说,高质量、优秀的交互设计桌面环境可以大大降低用户使用新桌面操作系统的门槛。我稍后会详细讨论具体表现在哪些方面 ;)
应用商店:对于用户来说,绝对不仅仅是一个有趣的桌面环境(比如原来compiz) 没有好的应用商店带来的海量应用,安装操作方便,普通用户将在几天内放弃。可以说,应用商店是留住普通用户的最基本要求
●预装应用:在中国,至少需要解决QQ、Office、网银和一系列方便易用的多媒体应用可以算是好用的桌面操作系统
编程语言介绍桌面操作系统
桌面操作系统需要哪些编程语言?以深桌面操作系统为例:
● 服务型的后端都用 golang 语言: golang语言可以完美地调用大量C语言编写的底层数据库,具有良好的开发效率和运行效率。编写的程序很少出错。深度桌面系统的后端主要用于golang写语言。
●主要使用前端界面 Qt/C 来编写,因为Qt相对于Gtk有更好的技术支持、代码质量和API比较连续性Gtk 3好多了,深度使用C 编写前端界面,包括桌面环境和深度系列应用
深度在2014年之前,我自己做了一个WebKit/Html5本地渲染引擎可直接使用CoffeeScript像网页开发一样编写桌面环境界面,但最终是因为WebKit不适合常驻桌面环境,长时间不关机很容易造成内存泄漏和性能问题。包括2014年前采用的,Python/QML开发的所有应用都是由 QtWidget/C 更换,主要是因为Python在国产CPU平台(龙芯、申威)运行缓慢,QML解释特征和默认OpenGL渲染机制导致软件实际运行性能差。
这么多年来,几乎所有的界面编程语言都被深化了。(Python、C、C 、CoffeeScript/JS、Golang)几乎所有的图形界面库(wx、GTK 、Qt、WebKit、QML)都折腾了。最后停留在 Golang、C 、QtWidget 在技术选择方面,这些技术在稳定性、兼容性和性能方面都非常好。最后停留在 Golang、C 、QtWidget 在技术选择方面,这些技术在稳定性、兼容性和性能方面都非常好。
桌面环境是什么?
简单来说,桌面环境就是内核和X Server以上,写一批程序,让用户登录,直观流畅地使用桌面、任务栏、开始菜单、文件操作和系统设置。
世界上主要有四个桌面环境:功能完整性和产品质量:
● RedHat 主导开发的Gnome,Gnome2的稳定性和性能都很好,包括以下Mint桌面都是衍生的Gnome2, Gnome作为个人开发者,我看到了最令人失望的桌面环境,Gnome3完全抛弃了Gnome稳定性和性能,Gnome除性能和内存控制不好外,API这五年几乎没有任何重大进展
● Suse主导开发的KDE:可以说,功能最丰富的桌面环境,包括产品质量和性能,每年都在快速进步,但从个人角度来看,更适合技术折腾党,功能和互动太复杂,不适合普通用户(如超复杂的主题设置)
● Ubuntu主导开发的Unity: Unity身体还能看到很多Gnome产品质量和性能都很好,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 先天限制也做不到,最终导致无论如何应用主题,各种软件组装在一起,就像各种质量不均匀的补丁组合在一起,大多数开源社区开发人员虐待多年可以忍受粗糙的设计细节(我看到很多开发人员喜欢黑色主题,因为黑色看不见,哈哈哈),但对于普通用户,这种组装的设计细节就像拿着诺基亚和现在iPhone77放在一起的感觉太强烈了
●统一操作接口:例如,右键菜单、文件打开对话框、认证对话框等,只有深度统一这些底部接口,才能看到不同风格的右键菜单、文件打开对话框、认证对话框,这些对于统一的桌面操作系统体验非常重要。想想你自己买的iPhone到处都是粗糙不同的,你会砸它吗?但为什么这么多开源爱好者能忍受这些粗糙的事情呢?但是为什么这么多开源爱好者能忍受这些粗糙的事情呢?(因为他没有花钱,你看他没有打客服电话...)
如何构建深度桌面环境?
在说如何构建桌面环境之前,先放三张深度桌面环境的图片:
美哭了吗?这就是从零开始建立桌面环境和只改变皮肤主题的区别。
前方专业技术高能, 请抓紧帮忙,我要开始讲桌面环境结构。说话前先放一张架构图:
从技术剖面上看,一个完整的桌面系统主要分为以下几层:
●内核驱动层:前面说过,主要是保证硬件的基本功能和兼容性,全部Linux发行版相似,区别在于内核补丁集不同,或者集成驱动和固件之间的差异
●显示服务层:从内核引导到plymouth(俗称开机动画)之后,只要看到登录界面输入密码,此时X Server已经起来了, X Server简单理解就是Linux天神掌握着绘制图形界面的生杀大权,所有程序在绘制图形时都必须发送消息 X Server, X Server为你画画。同时X Server也是事件输入(键盘鼠标)输出(显示器)的抽象层。开发者可以直接使用,而无需考虑底层驱动和显卡驱动的细节X11/XCB的API应用开发只是更多的开放 发者