扒一扒国产 Linux 操作系统架构是怎么设计的 ?
共 17000字,需浏览 34分钟
·
2021-04-09 14:48
什么是桌面操作系统?
桌面操作系统都有哪些部分组成?
● 内核、驱动以及固件:主要用于驱动硬件可以正常工作,除了CPU、内存、磁盘外,最主要的要是要广泛兼容不同的网卡、显卡、声卡和外设等硬件设备
● 软件仓库及众多开发库:如果没有开源社区众多大神打包好的软件仓库和各种开发库,要基于Linux来开发一个操作系统甭说开源爱好者,甚至就是一个中型公司都很难做起来,可以说开源软件仓库从本质上改变了操作系统和开源软件的开发模式,丰富的软件仓库使开源开发者、组织和公司能够使用最新技术的同时开发成本也降低了很多
● 桌面环境:这里说的桌面环境就是大家平常一开机就用到的桌面、任务栏和开始菜单等,可以说一个高质量和交互设计极佳的桌面环境可以极大降低用户使用新的桌面操作系统的门槛,具体表现在哪些方面,我后面会详细讲 ;)
应用商店:对于用户来说,绝对不仅仅是一个好玩的桌面环境(比如原来的compiz) 就能留下的,没有好的应用商店带来的海量应用和方便易用的安装操作,普通用户用几天就会放弃,可以说应用商店是留住普通用户的最基本要求
● 预装应用:在国内来看,最少需要解决QQ、Office、网银和一系列方便易用的多媒体应用才能算是一个好用的桌面操作系统
桌面操作系统所用编程语言介绍
● 服务型的后端都用 golang 语言: golang语言能够完美调用大量C语言编写的底层库,同时开发效率和运行效率都俱佳,写出来的程序很少会出错,深度桌面系统的后端主要使用的就是golang语言来编写的。
● 前端界面主要用 Qt/C++ 来编写,因为Qt相对于Gtk有更好的技术支持、代码质量以及API延续性都要比Gtk+3好很多,深度采用C++来编写包括桌面环境和深度系列应用的前端界面
什么是桌面环境?
● RedHat 主导开发的Gnome, Gnome2的稳定性和性能都非常好,包括后面的Mint桌面都是衍生于Gnome2, Gnome3是我作为个人开发者来看最失望的桌面环境,Gnome3完全抛弃了Gnome2的稳定和性能,Gnome3除了性能和内存控制不好以外,API的胡乱修改导致这5年几乎没有任何重大的进步
● Suse主导开发的KDE:可以说功能最为丰富的桌面环境,包括产品质量以及性能每年都在飞速进步,但从个人看比较适合技术折腾党,功能和交互做的太复杂不适合普通用户(比如那个超级复杂的主题设置)
● Ubuntu主导开发的Unity: Unity身上还是可以看到很多Gnome2的影子,产品质量和性能都不错,Ubuntu自己独立开发了Mir、Unity桌面环境和一些全局菜单等独特特性,虽然很多开发者很喜欢,但是整体视觉都聚焦在左上角(默认看着很想一把转角直尺)的设计,个人觉得并不符合中国人的使用习惯
● Deepin主导开发的DDE: 作为DDE的开发者,客观的评价,产品质量、设计视觉都符合中国人的习惯,很多地方的交互设计细节要比其他桌面环境做的更加精致和简单,强调开箱即用的非技术型用户,不适合技术高手和那些本来就喜欢折腾的技术型用户
桌面环境和那些换主题的工作差别在哪里?
● 核心技术能力:如果没有掌握桌面环境的核心技术,所有的修改能力仅仅限于修改主题、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进行应用开发
● 显示管理器:简单的理解就是你看到的登录界面提示你输入密码的那个地方
● 资源管理器:这一层主要由一系列的底层守护程序来监控硬件的状态,并汇报给上层的桌面环境和应用进一步操作,比如常见的就有网络、电源、磁盘、蓝牙、声音、键盘、打印等
● 桌面环境: 以深度桌面环境为例,主要包括桌面环境后台服务和守护进程、桌面环境对外API/DBus服务、和桌面环境UI界面层几个部分组成的,后面我会详细讲每一个细节
● 应用商店:主要提供系统的软件安装、卸载、升级等操作,保证用户可以安全易用的进行软件管理
● 应用程序:主要包括深度开发的系列应用、合作开发的国内应用、Android应用、Windows应用和网页应用,为什么在Linux可以直接运行Android和Windows应用?我也后面再讲,嘿嘿
● 多媒体的控制接口(右下角),方便用户锁屏和切换用户的时候切换音乐和暂停音乐
● 当系统使用多屏幕时,启动和解锁时,会根据用户的鼠标位置切换锁屏主界面
● 在用户输入密码的时候,就直接启动一些系统级的服务,比如电源、账户、亮度等守护程序,这样用户输入密码的过程很多系统服务就加载好了,可以相对于其他桌面环境同等服务缩短30%以上的登录时间
● 基本的桌面会话管理,比如大家熟知的注销、重启等操作
● 按照 xsettings 主题规范设置整个系统的主题,保证桌面环境以及桌面环境的应用,不论Gtk+还是Qt可以正常的加载用户设置的主题
● 根据 freedesktop 的各种规范,规范应用程序的启动方法, 包括执行 *.desktop 文件的命令,启动提醒等
● 多屏的管理,保障桌面环境在多屏情况下,可以在正常的主屏显示任务栏和桌面程序
● 开机启动服务的顺序管理,比如会优先启动 dde 核心组件, 才运行启动其他应用程序,防止所有开机程序在登录的一瞬间同时启动,而这时候往往很多系统服务(比如DBus) 都还没准备好,大家一团乱抢CPU资源不但无法快速启动,还会导致其他程序都无法启动,想象一下3个人同时挤一个公交车门是什么状态?;) 这时候startdde 就是登录后到dde守护进程启动之前的裁判,只有它授权的程序才能启动, 没有授权的都进入暂缓状态,直到更优先的程序启动完毕
● 任务栏和启动器都有那些常驻程序
● 所有应用程序的启动状态维护
● 应用程序所在工作区和位置的状态维护
● 当前系统中所有安装应用程序的图标、启动状态维护
● 提供用户的创建、删除和管理功能
● 管理多个屏幕的不同状态,包括位置、方向、分辨率和亮度等
● 管理不同文件类型的默认程序和主题设置
● 管理网络的有线、无线、VPN、DSL等网络设置
● 管理蓝牙、声音、日期、时间时区等设置
● 管理电源、键盘鼠标设置
● 管理系统的升级和grub设置
● 提供多点触摸板手势的服务
● greeter-helper: 提供锁屏相关的状态查询和服务
● image-blur-helper: 提供壁纸模糊服务,你可以通过这个服务快速模糊一张图片,而不需要自己编写模糊算法,深度团队做的模糊算法,即使在龙芯芯片上都只需30ms的时间,要远远快于社区的模糊代码的性能
● lunar-calendar: 提供日历查询服务
● powersupply: 提供电源相关的服务
● soundutils: 包括很多声音相关的工具
● validator: 用户名正确验证器,不用自己编写一大堆正则表达式来做这件枯燥的事情
● cursor-helper: 提供光标状态的服务
● drandr: 简单一个多屏封装工具, 有很多高级功能,比如 super + p
● dxinput: 提供一指到五指的手势算法和事件服务,你可以在深度系统上直接使用到类似Mac OS的触摸板多点手势功能,而且还可以根据需要自定义手势功能
● 后面还有很多其他高级服务,都是有 dde-api https://github.com/linuxdeepin/dde-api 提供的,欢迎各位社区开发者研究,扩展其玩法
● deepin-policykit-agent: 主要按照深度的UI设计规范做个了密码认证对话框,保证所有程序,不论是Gtk+还是Qt写的,在密码验证的时候都弹出UI细节一模一样的对话框
● deepin-dialog: 给Gtk+和Qt源码编写了补丁,保证所有程序弹出的文件打开对话框都是完全一致的体验,不论是Gtk+还是Qt编写的
为什么要自己写桌面环境?
● 我希望给用户提供交互细节最简洁的操作体验,傻瓜式操作,不需要长时间学习
● 我希望用户会因为UI细节精致的Wow一声, 就像第一次看到iPhone一样
● 我希望用户看到很多贴心的小细节时,会觉得操作系统后面有一群人关心他们,贴心的功能会让他们会心一笑,而不是面对一台冰冷冷的机器
● 我要能改每一像素,只要用户觉得不爽,一切都是用户为向导,而不是以开发者的个人喜好为导向
● 快速改进,很多社区开发者都说你应该给Gnome或KDE提交补丁,对不起,明明可以10分钟做一个用户喜欢的功能的时候, 却要和各种专家开发者讨论1个月才合并补丁或者上游开发者根本就不理,Linux桌面就死在改一个功能慢的要死,最后大多数用户失去耐心,不陪你玩无奈的离开了
● 统一的交互体验,统一的设计语言, 不要拼装,很多linux老用户除了宣扬开源文化和民主的决策(其实每个项目都是由创建者独裁)外,甚至拿着一大堆各式各样的社区demo作品美曰“社区协作”,深度只想系统和所有应用是能够堪比Windows/Mac的产品质量的艺术品
深度桌面环境的交互细节以及横向对比
深度商店
所有deepin对Wine上游的代码级贡献大家都可以在 https://www.google.com.hk/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#newwindow=1&safe=strict&q=deepin.com+site:winehq.org 和 http://source.winehq.org/git/wine.git/?a=search&h=HEAD&st=commit&s=deepin 公开查询到 很多社区开发者说,我们用社区的Wine也能跑QQ, 为啥要用Deepin? 我只能说的是,社区版的Wine如果没有deepin这几年的贡献,你啥都跑不了,不管你换什么linux发行版。
DTK
● 提供单实例的接口,方便直接使用,不用造轮子
● 提供XCB窗口移动、缩放等一系列函数,无边框的窗口不用自己折腾几大本X11/XCB 的书了,开发者全部都做好了
● 提供一大票美观的自绘控件,不用自己造Qt控件了,拉着直接用
深度造了哪些应用?
● 如果你在有wifi的地方,安装器不用连接网络,自动从路由器中找出国家码设置时区,不需要网络连接和GPS就可以准确知道用户在哪个时区,不需要让用户手动设置时区
● 安装linux不需要知道分区知识,不需要知道 /、/var、/boot、/home、swap啥概念,选择任意空白分区即可安装,还可以根据内存大小自动选择是否设置swapfile(大内存不设置加速读取,小内存自动算swapfile最佳大小,当然也可以手动设置swap分区)
● 安装错误了,扫描二维码的时候就自动上传错误日志了,不需要来回倒腾错误日志
● 不需要研究各种U盘参数、引导参数,选择ISO文件,选择U盘就可以直接制作U盘启动安装盘
● 系统安装盘里包含了Windows安装器,可以直接安装在windows xp/windows 7/windows 8/windows 10的NTFS分区安装深度操作系统
● 经典的文件操作方式, 没有坑爹的设计
● 基于rlocate开发了内核模块,2TB的文件名2秒中搜索完毕,而且会根据文件添加删除启动实时维护搜索索引,不用手动定期更新索引
● 内置avfs模块,所有压缩格式文件管理器秒开,而不用等漫长的解压时间和额外解压的磁盘空间
● 未来版本直接扫描二维码下载文件到手机(或者反过来玩),不用连上USB后在不同目录来回穿梭
● 类似QQ截图体验的截图工具,Linux下最好用的截图工具,不解释
● 无边框沉浸式观看影片, 只有鼠标移动到顶部或底部才显示控件,看电影最重要的是内容
● 窗口跟随视频比例缩放,永远没有黑边
● 最小化窗口切换到其他应用时自动暂停,切换回来后继续播放
● 简洁的音乐播放器,可以放无损音乐
● 自动解决歌曲乱码,不用自己折腾
● 自动下载歌曲歌词和封面,专心听音乐就好
● 自动同步图片目录,不用在目录树中眼花缭乱的找,自动根据图片拍摄时间按时光机排序
● 简单美观看图功能,其他乱七八糟功能没有
● 同等功能的终端,启动速度最快、内存占用最小
● 类似Chrome的沉浸式体验,除了标签以外每一像素都只显示终端的内容,内容至上,不用无谓的控件喧宾夺主,让用户更加专注
● 当发现后台工作区的任务完成后, 会通过标签的颜色及时通知我们, 只需要瞟一眼终端标签就可以知道后台任务是否完成, 彻底告别人肉轮询命令的时代了。;)
● 自动识别光标下的连接地址, 只需右键就可以快速复制光标下的连接地址, 当然也可以 Ctrl + 左键快速用浏览器打开连接
● 内置分屏,不用学习tmux/screen也可享受分屏的高效
● 内置远程服务器管理功能, 更方便的管理数千太机器
● 支持点阵字体显示
● 6位数字就可以快速帮助别人和寻求别人帮助,没有比这更简单的远程帮助工具了
● 图文并茂,markdown的语法,方便社区协作,美观易度
● 企业用户,内网直接支持所有打印机和扫描仪
● 社区中吵了十几年的Office排版字体,要不就是吐槽,要不就是拷贝微软版权字体,没有人站住来解决问题。5个版权字体,上千个符号,我们一个一个字体,自己重新画了一遍,然后开源给大家免费使用,行动才能推动开源,而不是靠嘴
● 我十几年的Emacs插件和贴心配置,那时候还没有 spacemacs 存在呢:那些鄙视deepin只会开发图形应用的喷子, 命令行操作先超过我再来喷吧, https://www.emacswiki.org/emacs/AndyStewart , 我Emacs做任何事情全程不用一下鼠标
国内生态应用
● 2013年联合搜狗开发了搜狗输入法 for Linux
● 2015年联合网易开发了有道词典 for linux
● 2016年联合网易开发了网易云音乐 for linux
为什么开源的轮子不能用?
● 社区技术大拿很多,但是技术强大的同时能把一个应用的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就应该花更多时间去学习新的知识或享受生活, 而不是一直都在折腾,然后鄙视不会折腾的人
前途漫漫,还需努力
● 让国内喜欢开源的开发者能够做自己喜欢的事情,养活自己,养活家人
● 功能像Windows那样丰富,界面像Mac那样美观,而且源代码还全部开源, 帮助更多人学习开源技术
推荐阅读:
这 5 个 Linux 发行版,2021 年再错过就是罪过了
支持下