这几天看到 Ubuntu 放弃 Unity 和 Mir 开发,转向 Gnome 作为默认桌面环境的新闻,作为一个Linux十几年的老兵和Linux桌面的开发者,内心颇感良多。
Ubuntu 做为全世界Linux界的桌面先驱者和创新者,突然宣布放弃自己多年开发的Unity, 相当于在桌面领域,直接放弃了战斗向微软投降,不仅仅是Linux桌面的悲哀,更是对于全球Linux黑客坚信Linux必胜信心的极大打击。
曾经的Ubuntu粉丝
我还记得2006~2007年,那时候我还在成都写手机游戏,当时年少轻狂的我,一直幻想自己要做最牛掰的开发者,就像科幻电影里面的黑客一样,无所不能。那时候虽然Windows玩的很溜,但是一直都在核心技术外徘徊,不知道如何达到个人目标。
上学的时候玩过 RedHat 6.0, 也装过 KDE/Gnome 的桌面环境,但是系统中的各种问题,比如无法使用输入法、中文字体配置很差,甚至因为显卡驱动的原因都无法正常开机,所以Linux对于当年的我来说,就像神话一样,只有顶级黑客才能玩的转的系统。
直到后面用了 Ubuntu 6.10 和 Ubuntu 7.04, 当时的Ubuntu可以说是非常惊艳,原来RedHat和Suse在桌面端的各种细节问题一扫而光,装上系统以后就可以直接用,而且还可以非常容易的安装应用软件来深入学习Linux。可以说是Ubuntu带领我真正的入门了Linux, 经过很多年的深入学习Linux, 到后来在Linux上开发Emacs和Haskell相关的项目,直至后面创业做 deepin 操作系统。
从我个人来说,对Ubuntu系统以及背后的开发者都是怀着无比的敬畏和崇拜。
我看这么多年 Ubuntu 的发展
Ubuntu从当年最佳的Linux桌面操作系统到今天宣布放弃自己研发的Unity桌面,已经有13年历史了,在我看来主要有以下几个阶段:
最初的惊艳
Ubuntu最初的发展目标就是把原来Linux系统需要手动操作的基本配置,比如字体、输入法和显卡驱动等问题内置到操作系统中,用户不用安装系统后还需要跟乱码、中文输入以及显示等问题斗智斗勇, 可以说那个时代的Ubuntu是解决了当时Linux普及的几个重要问题,把Linux系统从当时只有开发者才能玩转的高手系统普及到普通的电脑爱好者就可以折腾使用。
酷炫的Compiz管理器
我相信很多Linux爱好者都惊叹于当年 Compiz 这个3D窗口管理器能够达到的酷炫效果,比如3D旋转桌面、拖动窗口的果冻效果、一把火烧掉窗口的效果... 特别是同时代的Windows系统都还是非常原始的2D效果,甚至XP的窗口连窗口阴影都还没有的时候。当时的Linux系统的,特别是Compiz吸引大部分用户去尝试Linux系统,即使最后大家仅仅只是因为好奇或是玩玩,也大大增强了Linux系统的曝光率。
从另外一方面,Linux从当年Compiz发展十年以后,反而是那些简单特效甚至没有特效的Linux系统得到最高的用户量,原因我觉得主要有两个:
- PC这种生产力的工具最重要的是高效,非常酷炫的特效长时间用,反而会极大干扰用户视觉,进而影响用户对内容的专注力,而且时间长了也很容易引起用户的视觉疲劳,反而是Mac那种恰到好处的轻微动画让用户感到优雅和舒服, 这方面Linux发行版 Elementary OS 做的要好很多
- 任何操作系统需要长久留住用户,还是需要靠优秀的人机交互设计和丰富的应用来留住用户,操作系统只有给用户带来真实的价值,让用户工作更高效和生活更快乐,用户才会长期坚持下去,光靠酷炫的动画吸引,用户一旦视觉疲劳以后,最终还是会放弃Linux, 因为一个操作系统不能解决用户日常遇到的各种问题,在用户心中最多就是一个好玩的玩具而已
Gnome3 vs Unity
在 2011 年底, Gnome 发布了它最新的 Gnome3 系统, 当时 Gnome3 以酷炫的特效加上 JavaScript 的插件体系而吸引了开源社区开发者的兴趣,特别是 Gnome3 内置 GJS 引擎,可以直接在桌面环境中编写 JavaScript 插件后直接 reload 即可更新桌面环境的功能和视觉效果,还有吊炸天的 inspector 特性,可以直接通过鼠标点击界面后定位到对应的代码位置,再加上 GJS 可以从屏幕顶部打开一个类似 quake terminal 的下拉调试环境,在调试环境中直接像脚本语言那样实时列出任何对象的属性和方法,立即改立即生效。
上面这些开发者特性,在那时候 Google 满天吹嘘 Html5/JavaScript 的美好未来的大环境下,对于开发者有极大的诱惑力,很多开发者都奔着 Gnome3 这些类似 Web 的开发方式而去,并贡献了大量好玩的插件。
在 Gnome3 之前, Ubuntu 一直都在用 Gnome2 桌面环境,其实 Gnome3 在 2011 年发布之前已经规划了2年,从当时的宣传来说是下一代桌面环境,2009, 2010年Gnome3还在社区发布了大量吊炸天的预览视频。作为当时桌面系统先锋的 Ubuntu 也非常期待能用上 Gnome3。 而无奈 Gnome3 一次又一次跳票,最后Ubuntu实在等不及了,就在 Gnome2 桌面环境后台服务的基础之上,开发了自己的 Unity UI。
当时社区也因为 Unity 和 Gnome3 的很多设计理念类似谴责Ubuntu在进行分裂行为。
Unity 产品的特点主要定位在几点:
- HUD 的左上角搜索设计,快速搜索应用和很多插件提供的搜索结果,这一点和 Gnome3 的Launcher插件体系非常像,通过插件,可以搜索除应用外的更多搜索结果(比如天气、在线视频、计算器结果等)
- 任务栏固定在左边,对宽屏更加优化,相对于程序员有更多的纵向空间
- 全局菜单,通过合并顶部栏和窗口标题栏,进一步节省纵向空间
我个人并不喜欢这些面向开发人员(而不是面向普通用户)的设计,但是撇开个人的主观设计喜好外,我认为Unity 是相对于 Gnome3 更成熟的产品,Unity 的很多改动都是针对 PC 桌面系统的真实痛点来改进的,特别是一些程序员的用户很喜欢 Unity 诸多设计。而不是像 Gnome3 那样一味的追求平板用户体验,极大降低了PC桌面用户的习惯和易用性, Gnome3的槽点我后面详细说。
不论从商业公司的独立性发展考虑还是产品质量负责的角度,我都是非常支持 Ubuntu 当时独立开发自己Unity 桌面环境的行为,Unity 确实在随后的几年证明了自己的产品质量和设计细节都比 Gnome3 要好很多。
Wayland vs Mir
在 Gnome3 和 Unity 发展的同时,Intel的雇员 Kristian Høgsberg 正在领导开发新的显示服务器。Wayland相对于古老的X11来说最大的提升是,Gtk/Qt 这些图形库进行图形绘制时,不用像X11那样发送绘制消息到XServer来进行绘制,而是由Client自己进行图形绘制,Wayland只用担任图层混合器的作用。这样不但减少了X Client和X Server之间不必要的通讯,而且因为由Client自己进行渲染,所以很多画面撕裂和闪屏的现象从原理上就避免了。
大家可以看一下下面的两张架构图来理解两者的差别:
Wayland 因为要彻底从技术架构上颠覆Linux几十年X11的渲染方式,不论从架构设计还是代码实现上都会非常复杂,不但要开发协议本身,还需要开发适合Wayland的混合器和窗口管理器,最后导致Wayland 1.0稳定版一再跳票。
而Ubuntu在独立开发Unity桌面环境的同时,也仿造了Wayland的架构开发了自己的Mir显示服务器,除了等不及Wayland稳定之外,更重要的是Ubuntu要为了它的下一步宏伟计划 "Ubuntu Touch" ,按照Mark的设想,Mir不仅仅要像Wayland那样从原理上提升Linux图形渲染效率,而且Mir还得担负起手机和电脑融合的使命,可以让Ubuntu Touch的手机在插上显示器底座时,手机的应用通过Mir的支持,可以直接在外接显示器上显示手机应用窗口,最终达到“当你手机放到底座时就是电脑,拿走就是手机”的设想。
不论Wayland还是Mir,虽然底层架构都非常先进,但是为了兼容现有的X11程序,它们分别开发了 XWayland 和 XMir 用于在新的显示服务器协议上支持现有的大多数 X11 程序(主要是Gtk2/Qt3/Qt4开发的大多数应用)。
具有讽刺意味的是,Wayland和Mir本来就是要解决 X11 那种不适合现代PC场景繁琐的通讯协议,甚至很多开发者为了技术的洁癖都在大力安利 Wayland/Mir ,但是最后 XWayland 和 XMir 本身的兼容实现却比 X11 的实现更加“恶心”和繁琐,包括Mir的开发者最后都放弃 XMir 的开发。
正是因为Wayland/Mir这样的技术无法彻底解决和大部分原本就基于X11协议而开发的应用的兼容性问题,最后导致基于Wayland/Mir开发的桌面系统从 ”解决渲染性能问题“ 转变到 “无法运行很多现有Linux应用” 这一个更加让用户难以接受的结果。这也是后面基于Mir开发的新版Unity难产的重要原因。
Ubuntu Touch
就像每一个程序员都有一个黑客梦一样,每一个Linux开发者都希望能用上纯粹的Linux手机操作系统,特别是Linux技术圈领域,大家更希望有一个面向开发者可玩性更强的Linux手机操作系统。
Mark从2011年宣布开发Ubuntu Touch到2015年第一只搭载Ubuntu的智能手机在欧洲上市,Ubuntu把大多数主力开发都投入到Ubuntu Touch手机操作系统的开发中,整整4年,世界上最好的Linux桌面开发团队把4年的时间浪费在开发一个在PC、手机、平板和电视上拥有强迫症般统一界面的Unity上,而且希望Ubuntu Touch能够占领低端的智能手机操作系统市场,或者像Mark说的那样在Android外给世界另外一个选择。
这4年的时间,因为主力开发Ubuntu Touch的原因,Ubuntu桌面操作系统从原来的高速创新到鲜有改动,往往版本的发布就是软件仓库更新加上壁纸更新就发布新版了,不再像原来一样,每个版本都来易用性的提升和功能增强。
而且大家都知道,2011年~2015年这几年正是安卓系统从起步到发展成全球移动操作系统霸主的4年,Ubuntu闭门造车了4年到2015年发布第一台Ubuntu Touch手机以来,Ubuntu Touch手机在全球销售惨淡,甚至无人问津。
Ubuntu今天放弃自己开发的Unity重要原因,就是因为Ubuntu耗费了公司所有资源在开发一个用户根本就不会买的手机操作系统,Ubuntu Touch可以说是Ubuntu最愚蠢的决策:
- 今天的手机和手机操作系统的发展就像当年 Wintel 的PC时代一样,芯片和硬件越来越快,硬件的快速迭代更新速度都快于软件层面的优化速度,就算最低端的手机性能甚至都比十几年前电脑更快,而手机作为现代消费品来说,用户更关心的是手机是不是新款的,能否打游戏,美颜拍照功能是否更好?智能手机时代,大家不再对低端智能手机感兴趣,所以“低端智能手机操作系统”本身就是一个伪命题
- 智能手机作为最方便的通讯和娱乐工具,能否打游戏和基本应用是大家用一款手机最最最基本的要求了,可Ubuntu Touch不能玩游戏、不能上QQ和微信,只能打开终端和一些网页应用,不要说普通用户,我想就连那些天天嚷嚷 ”我们需要一款Linux手机操作系统“ 的开发者都不会用它
- 强迫症般的统一设计:在5寸大屏的手机,整个任务栏切换全部在左侧,大家可以试一下,你在正常拿手机的情况下,能否方便的用大拇指去够最左侧的Launcher, 甚至还要在手机左侧的顶部和底部上下移动?把手指移动到手机顶部左右移动查看状态栏(你的手指够的到顶部吗?然后再做左右运动?)也做为一个创新设计宣传,这些反人类的设计是我作为一个产品经理非常无法忍受的,我经常吐槽Ubuntu Touch: Ubuntu Touch的交互设计师平常要不就是把手机放到桌子上设计的(而不是单手体验一下),要不就是Ubuntu Touch手机是屏幕厂商开的,Ubuntu Touch的很多交互设计都非常容易让手机从手里面滑落
Ubuntu Touch不论从公司战略、产品时机、应用生态还是交互设计各方面来看都是非常愚蠢和非常失败的产品,而这一切都要怪罪于Mark本人开发者的产品思维和一意孤行,白白浪费了世界顶尖开发者的精力和理想。
FlatPak vs Snap
Linux桌面发展到今天依然无法和微软以及苹果系统本身竞争的一个重要原因就是,Linux系统软件包之间的依赖问题,系统和应用之间的紧耦合,应用和应用之间的依赖库紧耦合,只要底层库升级了,系统升级有可能会把应用升级挂,一个应用升级很有可能会导致另外一个应用无法使用。
如果把系统所有的软件包和应用的依赖打印出来,你会发现整个桌面Linux操作系统就像一张巨大的错综复杂的蜘蛛网,蜘蛛网的任何一环坏掉都会引起系统和应用不稳定甚至无法使用的问题,同时应用厂商为了开源社区的诸多底层库升级疲于奔命, 最后的结果是,Linux操作系统在底层5万个软件包,2000多个应用,700个精品应用的时候,就已经非常非常的不稳定了,如果有一天Linux平台有上十万个应用的时候,系统和应用一定是崩溃的,因为任何底层的技术革新都会带来应用厂商的应用会失效或者因为API不兼容最后无法运行。
所以,为了迎接将来Linux操作系统应用生态爆发的那一天,Linux操作系统必须像微软和苹果那样,在系统和应用之间构建一条抽象API层,有点类似微软的 Win32 API和.Net 的意思,只要应用遵守中间层的运行时API和接口以及应用之间做到互相隔离开,应用升级就不会影响到其他应用,系统底层做再多规模的底层库革新,只要革新完以后保证中间层调用接口不要变,系统的升级就完全不会影响到应用的稳定。
举一个最简单的例子,微软从Windows XP开始,操作系统底层技术一直在变,但是你会发现十几年前应用厂商为Windows XP开发的应用依然可以在Windows 10最新的操作系统上运行,这种类型的兼容性才是桌面应用生态赖以生存的重要技术保障。
而Gnome开发的FlatPak和Ubuntu开发的Snap就是为了解决应用之间的隔离而生的技术,这两个技术都通过Linux内核的cgroups技术,FlatPak是通过OsTree来解决应用多版本的问题。通过把应用之间隔离在沙盒之内,保证不同应用之间或者应用不同版本之间完全在文件系统上进行隔离,这样就彻底解决应用之间升级互相影响的问题,而且这两种技术通过引入应用程序运行时的runtime接口,保证了系统和应用之间有一个稳定的接口,从侧面也保证了系统和应用之间的依赖分离。
FlatPak和Snap都能解决Linux系统依赖的问题,FlatPak的目标是解决Linux桌面现有应用的问题,Snap则是为了解决Ubuntu Touch而生的。
听说Mark希望Snap不但能够运行在Linux上,还能运行到别的操作系统上。在我看来这也是一个错误的选择,微软和苹果找就有相关的成熟技术,根本不需要snap, 反而是Linux才需要这样的技术,希望 Ubuntu 能够把 snap 的技术发展壮大,有利于Linux操作系统的应用生态。
Gnome是一个比Unity更差的选择
从Ubuntu放弃Unity的那一刻起,Ubuntu已经放弃桌面了。很多不了解桌面环境开发的用户会觉得Ubuntu不是回归Gnome了吗?应该是开源社区的好事啊?
桌面操作系统的用户体验和交互细节息息相关的就是桌面环境,而Gnome3桌面环境从各方面来说都不是面向普通用户的高质量产品。
核心开发者更关心技术折腾, 不再关心产品质量和API兼容性
Gnome好的地方是开发了封装了大量基于GObject的库,外部开发者能够快速基于这些GObject库来开发程序。
但是从开发者的技术选型来说,比如最开始做vala, gnome shell的时候做 GJS/JavaScript, 到最近讨论用rust, 这些都可以看出Gnome3的开发者更关注的是实现桌面环境后台的编程语言和技术是否是最酷最新的,追求这个世界上最先进的技术是每个开发者的源动力,但是Linux桌面这十几年之所以发展停止不前的重要原因是:用户喜欢一个开箱即用、美观和稳定的桌面系统,用户不关心实现这些的后台技术是否是最屌的。对于真正理想的研发团队,或者真正的顶尖开发者来说,编程语言和最新的开发库只是工具和程序表达方式而已,只要编程能力高,什么程序都是可以开发的。
而Linux社区的开发者,大多数开发者本身都是喜欢折腾最新技术的,因为最新的技术对于开发者来说可以学到很多新的知识,他们在新的编程语言和新的技术基础之上能够做出自己的东西,让自己更有价值和快乐,而这些都是非常自然的地方。但是我们应该考虑在先进技术的同时,面向真正的桌面用户做出稳定可靠的产品。
Gnome3即使面向开发者都是极度不友好的,整个桌面环境就完全在一个JavaScript的环境中,中间没有任何整体的API设计和插件接口,Gnome3的插件作者都是通过 Gnome Shell 调试器追踪到一个JavaScript的Object对象,通过属性链的方式魔改很多对象的属性方式,最后来开发出 Gnome3 的插件。不通过插件API接口,而是通过对象的属性来编写的插件,导致只要 Gnome3 的核心代码一改变,或者属性链中的任一一个变量发生了变化,Gnome3插件就失效了,目前Gnome3在线插件的页面也只有20%的插件能够在最新版的Gnome3环境中安装运行。
Gtk+已经无力和Qt抗衡
我个人作为Gtk+骨灰粉,也是Gtk2hs的核心开发者,对Gtk+ 2000多个API以及很多GObject库(比如vte,webkit,poppler等)都非常熟悉。但是自从Gnome3弄伤心以后(我曾经写了12个Gnome3插件,1万多行代码都因为Gnome3各种乱改API后升级失效),我对Gtk+的信心也随之大大降低。
特别是Gtk+3这个被Gtk+/Gnome开发者盛赞的版本,除了添加了一下 Overlay 的控件和CSS属性功能外,再没有大的功能改进。反观Qt, 从Qt4时代的各有千秋到Qt5的大幅度提升质量和功能,包括最新的QML大大提升了图形应用程序的开发(虽然QML对显卡兼容性还是有点问题)。
Gtk+的很多API至今多有很多隐藏的小技巧,需要多年的踏坑经验才能完全掌握,而Qt本身的API设计要优秀的多。
Gnome3 不是一个产品质量的桌面环境
Gnome3 并不是一个产品质量的桌面环境:
- JavaScript本身不适合作为桌面环境这种常驻程序的开发语言,不论在执行速度,特别是在内存的控制上非常容易导致长时间运行不关机,内存越用越多的情况
- Gnome3除了窗口管理器mutter是单独一个进程外,所有的桌面模块(任务栏、顶部条、启动器、工作区)都是在同一个进程中运行,这样就导致只要有任何插件发生错误,整个桌面环境的所有模块都会连带崩溃而无法使用
- Gnome3的整个设计理念都是面向平板的,比如托盘区域默认隐藏,任务栏要戳一下热点才能显示,启动器图标过于巨大等,这些设计都会严重的影响PC日常使用的习惯和易用性
所以Gnome3与其说是不如Unity桌面环境(我相信Ubuntu的Mark也知道),还不如说Ubuntu彻底放弃在桌面上的创新和主力研发,彻底向微软投降了。
开源社区 vs 商业产品
从最初的RedHat放弃桌面系统,Suse和微软深入合作,2016年Ubuntu移植Bash到Win10, 到如今Ubuntu放弃Unity和Mir后,这么多年,大家在开源事业上努力奋斗,但是从最开始的斗志昂然到如今的放弃,为什么开源的桌面系统做不好呢?
我个人也在带领团队开发deepin操作系统,这么多年开发Linux桌面操作系统的经历,我个人对于开源社区和商业产品的理解有几点:
Geek是这个世界的革命先锋,但不能以Geek理念做产品
电脑极客在以飞快的速度在改变世界,正是有这些非常聪明的极客和开源黑客,全世界的科技发展,特别是开源技术的在最近十年获得了极大的发展。
电脑极客在所有人的类型是非常稀少的,这些全世界1%的人用各自的聪明才智推动开源运动的发展,包括Ubuntu的CEO Mark本人也是极客中的极客,曾经的Debian开发者,在推动Ubuntu初期解决了很多Linux桌面易用性的问题。
电脑极客与其说是一种职业,还不如说是一种生活方式,电脑极客希望全世界都像电脑运行那样:刚正不阿、完美、统一的美,没有一丝一毫的例外情况,所有的结果都应该在预计和期望范围。
但是不能用极客的思维去做产品,因为这个世界本质就是混沌的、有各种各样缺陷、更强调社会习惯和协作,而普通用户组成的非电脑社会,更多人只在乎这个社会都在怎么使用电脑?大家在流行使用什么?他们更在于电影明星在用什么,模仿各种潮流,而不在于一个程序员内心在想什么。
Ubuntu最开始推崇Unity,是从产品质量和公司的掌控力出发的,开源社区指责的分裂我觉得是不客观的。但是后面为了统一PC、手机、平板、电视的整个操作界面,所有界面都基于左侧任务栏+顶部任务栏+搜索导向的Unity启动器来设计的,从极客爱好者来看,这是一种从程序代码到总体实现的一种统一,一种认为世界会赞赏的方式来构建Ubuntu系统。
反观我们自己作为一个普通人,我们会怎么对待这几样设备?
- PC: 作为生产力工具,比如要写一个文档,写段代码,做一个复杂的表格和图像时,PC绝对是生产力的代表,但是因为PC大多数都需要一个人在固定的地方长时间的工作,所以现在PC不是沦落了,而是专注于工作环境的计算平台,所以PC感觉给人很严肃很累,而人做为一个天性懒惰的动物,大多数人是尽量干完工作就离开PC的,但是无论如何,PC作为整个社会的生产力工具,确实必不可少
- 手机:手机作为大家最顺手的工具、玩游戏、聊天、浏览页面等,可以说是现代人的第三只手,大部分时间都离不开手机这种移动计算设备
- 平板:一种非常轻量的电脑,不需要过多的知识,不需要看着密密麻麻的的键盘,只用直觉化的操作即可
- 电视:我能想到的最佳状态就是,躺在沙发上,拿着遥控板,看电影,上下左右确定,这就是最常用的操作
我们认真的总结,即可发现这几个设备的常用交互方式:
- PC: 鼠标+键盘
- 手机: 大拇指
- 平板: 食指
- 电视: 遥控板
所以电脑极客经常问的一句话 "为什么不做手机操作系统?”,更多的时候是在问 "为什么不能像PC那样把别的计算平台做的更加赋予生产力?”,所以当初Ubuntu Touch追求的 “同一套Unity界面,让不同的计算平台用统一套界面和交互设计来满足”,这本身就是一个伪命题,或者说是电脑极客自己的一厢情愿。
这几个计算平台不论从使用场景、用户交互习惯还是用户对这些计算设备的期望都完全不同,当初微软融合电脑和平板本身,都已经让喜欢PC的用户大大不爽,最后迫使微软停止融合的设计,改回最初的PC操作设计。而Ubuntu所有计算平台的操作融合更是错的非常离谱,当第一代Ubuntu Touch手机推出市场后,先不论应用的稀缺,光是操作系统就和主流的 “看到图标就点,返回就按Home键” 的主流手机操作系统截然不同,最后惨淡收场。
所以,极客本身是世界革命的科技先锋,但是不能用极客思维去做产品,因为极客毕竟还是这个世界上的非常少数的人,极客思维本身无法代表更为广泛的普通用户。
底层技术的革新需要采用温水煮青蛙的方式,而不是激进的踏进沙漠去构建大海
很多人经常问我 “deepin什么时候用wayland?" ,我首先想回答的是 “合适的时候就会用”,但是我更想回答的是 ”deepin只会推动稳定的技术和产品给用户,而不是拿用户当小白鼠”。
Wayland和Mir本身都是非常革新的显示技术,我相信也是Linux未来显示技术的主流,但是作为现阶段来说,Wayland依然不是一个稳定的产品级方案:
1、显卡厂商原来都是基于X11的libGL进行驱动编写的,虽然现在很多显卡厂商也在往Wayland迁移,但是整体的显卡驱动兼容性还不如X11, 直接的问题就是,一旦用了Wayland后,桌面系统会相对于X11更容易遇到花屏和无法登入图形界面的情况
2、Wayland本身就是对于X11协议是一种颠覆,大量的现有Linux程序依然是Gtk+2/Qt4开发的,这些应用程序依然无法在Wayland运行,而新的Gtk+3/Qt5虽然都已经对Wayland进行了支持,但是这类应用还非常少,导致移植到Wayland会有大量的应用程序无法使用,虽然有XWayland项目,但应用兼容性和重写的问题短期之内还不会有很大的改善
3、在X86这种CPU性能过剩的平台,Wayland的性能提升并不明显,最起码普通用户无法察觉这种性能提升,我认为Wayland现阶段更适合那种能够完全控制显卡和应用本身,并且对渲染性能特别敏感的计算平台,不适合PC这种开放式的高性能计算平台
在显卡厂商逐渐支持Wayland改善显卡驱动的情况下,在Linux桌面,我觉得应该大力把桌面环境已经应用迁移到Gtk+3/Qt5的图形库上,等有一天显卡厂商驱动兼容性足够好以后,通过修改窗口管理器和移植应用的方式,直接把上层的桌面环境和应用软件整体迁移到Wayland上。
当迁移完成后,用户在显卡驱动以及应用方面完全感受不到差异的时候,才能说是负责任和持续的迁移方案。而不是很多开源社区的用户说的先迁移到Wayland上去再说,这样会导致使用Wayland的时候,让用户同时面临显卡驱动和更加匮乏的应用生态问题。
如果打个比方,整个开源社区是整个世界,革新技术是革命领袖的话。任何一个Linux桌面系统从X11迁移到Wayland更应该考虑策略和渐进的替换方式,而不是一脚踏进沙漠以后要构建整个海洋。任何一项革新的技术除了技术先进性一定要考虑革命时期的群众基础,只有在革新的时候解决用户的问题,得到用户支持,这样的技术革新才能完成底层核心技术的切换,否则就和当年Intel/HP大力推崇的安腾CPU,虽然各种技术先进,但是因为不兼容现有操作系统和应用,最后不得已而抛弃。
安卓生态时代,不要做Linux手机操作系统,这不仅仅只是一个技术问题
Linux桌面面对的是微软的生态帝国,如果拼尽全力,可能还有1%的成功可能性。而Linux手机操作系统面对安卓的时候,会死的一点都不剩的。
为什么会这么说?因为微软花了几十年构建的生态帝国,是靠当时微软在PC行业的势,当时的时势加上微软自身的努力(只有做过操作系统生态的团队才能理解微软当年有多苦逼)做到今天的地步的。做操作系统系统这种承上启下+白菜钱白粉心的企业一般都是前期是孙子后期是爷的命,前期遇到硬件应用和各种各样奇怪的问题,操作系统厂商各种背锅(为啥别的操作系统没有这个问题?)干各种不是操作系统应该干的活,以一己之力推动整个生态的发展。而现在PC的所有生态和需求都已经定型了,微软不会鸟你,也没有各种不懂的媒体跟风干扰你(他们最多就说PC是夕阳产业,哈哈),你和你的团队只需要一点一点的努力,用十倍于微软苦逼的努力,只要在某些行业和开源社区做出成绩,就会有用户认同你,PC再夕阳大家也不可能离开它,因为生产力是整个社会最基本的动力,大家都用手机和平板办公,整个社会的生产力就会成倍的降低,所以大家离不开PC,我经常会讽刺那些说PC没用,平板才是未来的朋友: “你用平板写代码或者你们公司的财务用平板给你算工资,我就愿意相信你” 。
移动终端本身就是面向普通老百姓的新一代计算设备,在这个行业,所有的人,所有的企业都在围绕安卓构建新的应用,面临一个日新月异更新换代的行业,对于操作系统厂商来说,这些不是机会,而是你无法挑战安卓系统的巨大阻碍,而且每天都会更大,因为有更多的开发者和开发厂商自己掏钱投入安卓阵营。人类社会是一个以跟风和模仿为基调的动物群体,当你做的和大多数人都不一样,各种人就会干扰你,导致你无法专心做好操作系统,而且面对一个不断发展的生态,整个行业的切换成本是你现在无法撼动安卓的重要原因,因为安卓构建的不光光是操作系统本身,构建更多的是日益越大的行业投入和切换成本。
反观PC行业,在真正有下一代生产力计算平台出现之前(安卓只是娱乐平台),PC依然是整个社会生产力的核心,大家不可能离开PC,PC也不会像很多没有思考能力的人期望的那样消失殆尽。任何PC操作系统厂商只要一步一步的花费数十年的时间,终有一天会构建庞大的桌面应用生态,在生产力上和开放源代码上给这个社会带来更多的价值,其实Mac系统本身就是一个很好的例子。
PC操作系统不是未来,但是PC操作系统是现代还不可或缺的计算平台,而且PC操作系统是全世界对软件工程要求最高的挑战。当一个团队具备实力能够完整构建像微软那样的PC操作系统能力和知识积累后,这个团队的实力能够在下一代计算平台掌握绝对的控制力。
大家熟知的励志故事就是:苹果在PC被微软打爆以后,用iPhone让微软再也爬不起来。
包格式只对系统核心有用,对于应用厂商毫无意义
我一直认为包格式是服务器操作系统和桌面操作系统系统核心才需要的东西,因为具有依赖关系的包特别适合构建相互关联的操作系统底层核心库,只要你升级一下核心库,整个操作系统的核心技术就升级了,不用担心冗余和更新问题。
但是包格式对于应用厂商无意义,操作系统站在应用厂商的出发点最应该考虑的是提供一套接口抽象层和应用隔离机制,抽象接口层的目的是分离系统和应用,应用隔离机制的目的是隔离应用之间在文件系统上的依赖。
只有这样,才能真正构建一个Linux桌面的生态:
- 抽象层做好以后,操作系统可以在保持接口不变的同时,随意革新操作系统核心技术,而不用担心操作系统升级以后,应用程序无法运行的问题
- 应用隔离机制做好以后,应用厂商的不同版本和不同应用厂商的应用之间不会互相影响
- 开发者不用再写完软件还要考虑构建不同发行版的打包格式,这也是阻碍软件无法在所有Linux发行版运行的重要原因
这样做的目的是让彻底解放操作系统厂商,操作系统厂商的开发人员可以把所有精力放在核心技术的开发和应用开发接口的维护上,而不用每天除了开发操作系统还需要打包各种应用软件包。
应用的质量和功能应该由应用厂商自己维护,而不是丢锅给操作系统开发人员,应用的好坏本质山应该通过用户评价和经济刺激让应用厂商自己维护,如果应用长期没有作者维护,用户自然会抛弃应用的,进行自然淘汰,就像Windows上的应用,哪个作者更努力做的鞥好,用户就会越多。
而不是像现在Linux发行版的打包人员,固定的几十个人面对着成千上万的应用软件打包工作,不论从工作量还是持续发展来说,这种分担工作量的组织方式本来就是不合理的,如果每个应用都需要操作系统开发人员来维护,固定人数和固定时间面对无穷的应用时,势必会导致精力不够,甚至核心的系统开发者不再给开源社区做贡献时,他维护的应用的更新和质量就会下降,最后损害的还是用户。
所以应用隔离的技术不仅仅只是技术上模仿微软和苹果,而是从社会的生产力上彻底解决工作分担组织的问题,只有把应用的维护工作丢给应用开发者这些直接利益关系者才能持续的推动整个生态的前进,而不仅仅通过开源精神和信仰把所有的维护负担都丢给Linux发行版的开发者。
Linux桌面的未来在哪里?
说了这么多,Linux桌面的未来在哪里?
实话实说,我不知道,我要是知道的话,deepin早已经打败微软了,哈哈哈。
但是从我这么多年开发桌面系统的精力,我总结了几条经验:
- PC不需要革命性创新,只需满足桌面用户长期的习惯+微创新, 大多数Linux发行版自嗨式的折腾后,用户告诉我们他们最需要的PC操作系统就是那些尽量满足他们PC操作习惯的系统,如果有一些局部的微创新能够形成自己的特色就很好了
- 大力发展应用生态才是王道: Linux精品应用还在千这个量级,不论自己研发,还是和应用厂商合作开发,抑或通过商业来刺激应用厂商自己开发,才会有越来越多的用户和行业去使用Linux操作系统,Linux桌面要成功,这是最最重要的一个一点,而不仅仅是拿开源作者或学生业余写的软件当做产品去忽悠现代这些越来越挑剔的桌面用户
- Linux桌面需要更深入的去解决普通用户的问题: 需要针对Linux桌面用户的痛点进行更深入的解决,除了上面说的应用外,比如显卡驱动、打印机驱动以及行业应用都是非常必要和重要的
- 更多的用户基数才能引爆Linux桌面生态: Ubuntu聚集了大多数Linux开发者,真正的Linux桌面成熟,需要面对更为广阔的普通用户需求,只有解决了10%以上用户的需求(苹果Mac系统也就这个占有率),Linux桌面才能自豪的说终于成功了
Linux桌面是世界上最大的软件工程挑战, 也是所有Linux爱好者的希望
Linux桌面以及桌面应用生态的构建是世界上最大的软件工程挑战,几十年各种伟大的开源公司和开源社区在为这个目标努力,我相信只要持续努力,最终可以从希望变成理想成真的。
Ubuntu今天放弃战斗了,非常可惜一面Linux桌面的旗帜倒下了。
做为依然奋斗在Linux桌面事业的开发者,想跟未来的开源开发者说一句话:
累了就休息一下,但千万不要放弃!