Ubuntu 放弃了战斗向微软投降

news2024/10/5 19:14:26
导读这几天看到 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系统得到最高的用户量,原因我觉得主要有两个:

  1. PC这种生产力的工具最重要的是高效,非常酷炫的特效长时间用,反而会极大干扰用户视觉,进而影响用户对内容的专注力,而且时间长了也很容易引起用户的视觉疲劳,反而是Mac那种恰到好处的轻微动画让用户感到优雅和舒服, 这方面Linux发行版 Elementary OS 做的要好很多。
  2. 任何操作系统需要长久留住用户,还是需要靠优秀的人机交互设计和丰富的应用来留住用户,操作系统只有给用户带来真实的价值,让用户工作更高效和生活更快乐,用户才会长期坚持下去,光靠酷炫的动画吸引,用户一旦视觉疲劳以后,最终还是会放弃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 产品的特点主要定位在几点:

  1. HUD 的左上角搜索设计,快速搜索应用和很多插件提供的搜索结果,这一点和 Gnome3 的Launcher插件体系非常像,通过插件,可以搜索除应用外的更多搜索结果(比如天气、在线视频、计算器结果等)
  2. 任务栏固定在左边,对宽屏更加优化,相对于程序员有更多的纵向空间
  3. 全局菜单,通过合并顶部栏和窗口标题栏,进一步节省纵向空间

我个人并不喜欢这些面向开发人员(而不是面向普通用户)的设计,但是撇开个人的主观设计喜好外,我认为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自己进行渲染,所以很多画面撕裂和闪屏的现象从原理上就避免了。

大家可以看一下下面的两张架构图来理解两者的差别:

X-architecture.png

Wayland-architecture.png

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难产的重要原因。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/743196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSM+Shiro安全框架整合(完成安全认证--登录+权限授权)+ssm整合shiro前后端分离

目录 1.搭建SSM框架 1.1.引入相关的依赖 1.2. spring配置文件 1.3. web.xml配置文件 1.4.配置Tomcat并启动 2.ssm整合shiro---认证功能 (1).引入依赖 (2).修改spring配置文件 (3).修改web.xml文件 (4).新建login.jsp(登录页面) (5).新建success.jsp(登录成功后跳转到此…

POLARDB IMCI 白皮书 云原生HTAP 数据库系统 一 列式数据是如何存储与处理的

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…

VMware ESXi 7.0 U3n macOS Unlocker OEM BIOS (标准版和厂商定制版)

VMware ESXi 7.0 U3n macOS Unlocker & OEM BIOS (标准版和厂商定制版) ESXi 7.0 标准版和 Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科) 定制版镜像 请访问原文链接:https://sysin.org/blog/vmware-esxi-7-u3-oem/,查看…

第一代Spring Cloud核心组件

第一代Spring Cloud核心组件(Spring Cloud Netflix) Eureka服务注册中心(服务注册中心:Eureka,Nacos,Zookeeper,Consul) Ribbon负载均衡 Hystrix熔断器 Feign远程调用组件(Feign RestTemplate Ribbon Hystrix) GateWay网关组件 Config分布式配置中心 …

刘铁猛C#教程笔记——详解类型,变量,和对象第1节

强/弱类型语言 强类型语言:所谓强类型语言就是变量的值十分依赖变量的类型,也就是说假如一个变量其类型是整型,那么你在为该整型变量进行赋值的时候就不可以为其赋值一个字符串类型的常量,C#语言就是典型的强类型语言弱类型语言&…

C# 颠倒二进制位

190 颠倒二进制位 颠倒给定的 32 位无符号整数的二进制位。 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的…

微软MFC技术中的消息循环

我是荔园微风,作为一名在IT界整整25年的老兵,今天来聊聊微软MFC技术中的消息循环。 在很多windows程序中,都有如下代码: //Win32应用程序入口函数WinMain() int WINAPI WinMain(HINSTANCE hInstance, //指向当前实例的句柄…

全链路Python环境迁移

全链路Python环境迁移 在当前的Python环境中,安装一些库以后,如果换了一套Python环境,难道再来一次不停的pip install?当然不是。 第一步,使用pip freeze(冻结)备份当前Python库的环境 pip f…

《微服务架构设计模式》第六章 使用事件溯源开发业务逻辑

内容总结自《微服务架构设计模式》 使用事件溯源开发业务逻辑 一、传统持久化技术的问题二、什么是事件溯源三、好处和弊端四、实现事件存储库五、与Saga结合六、总结 一、传统持久化技术的问题 1、对象与关系的"阻抗失调" 所谓的对象与关系的“阻抗失调”是一个古…

ThreadLocal与InheritableThreadLocal及线程池的影响

在web开发中使用了ThreadLocal本地线程存储拦截器解析的用户信息,方便在下文代码中调用,但是在springboot中使用Async开启异步操作时,就会造成,子线程无法拿到父本地线程数据。拿到一些脏数据。 1.InheritableThreadLocal 在这个…

常用技巧总结

本文总结了本人在日常工作学习中遇到的问题及其解决方法,没有固定的涉及领域 目的就是为了在下一次遇到类似问题的时候方便查找,从而快速解决问题 本文不定时更新~ 目录 Windows使用 如何实现桌面图标随意排列 文件资源管理器相关 显示隐藏文件 修改…

深度学习06-深度卷积生成对抗网络(DCGAN)

文章目录 概述原理简介专业术语零填充转置卷积 生成动漫图像算力选择数据集目录规划源代码数据源加载定义配置类定义模型 训练可视化绘制损失绘制生成器图像变化 其他项目CycleGANstargan 概述 GAN(Generative Adversarial Network)是一种生成模型&…

flutter开发实战-日志logger写入文件及print

flutter开发实战-日志logger写入文件及print 在开发中,需要日志logger写入文件,方便日后查看出现的问题。这里记录之前的实现方案。 使用的日志插件是logger 一、引入日志插件 在工程中pubspec.yaml引入logger logger: ^1.4.0二、代码实现 使用比较…

听GPT 讲K8s源代码--pkg(一)

在 Kubernetes 代码仓库中,pkg/api和pkg/apis目录都包含用于定义 Kubernetes API 对象的代码,但它们的作用略有不同。 pkg/api目录包含 Kubernetes 的旧版本 API 对象定义,这些定义在 Kubernetes 1.7 版本之前使用。这些对象定义已经过时&…

第四课:Figma 图标设计

图形绘制小技巧 绘制正圆 O shift 正方体 R shift,右侧属性面板可调整描边显示方向,描边类型; 直线 L shift 带角度的箭头 shift L ,按住 shift 键调整以 45 度角调整箭头方向,右侧属性面板可调节箭头方向和线条…

文献里的分子对接方法2

珍珠贝肉水解物中的新型抗氧化肽以及它们的抗氧化活性机制。 关于摘要: 自由基和衰老以及很多疾病都有关联。 抗氧化肽具有良好的抗氧化活性和吸收性,是抗氧化剂研究的热点之一。 这篇文献的研究中,纯化珍珠贝肉水解液、经过蛋白质组学鉴定…

大模型与端到端会成为城市自动驾驶新范式吗?

摘要: 最近可以明显看到或者感受到第一梯队的城市自动驾驶量产已经进入快车道,他们背后所依靠的正是当下最热的大模型和端到端的技术。 近期,城市自动驾驶量产在产品和技术上都出现了新的变化。 在产品层面,出现了记性行车或者称…

【python】逻辑中断(and or)

今天学习javascript的时候竟然有一个额外收获:逻辑中断。而且我实验了一下,逻辑中断同样适用于python。 0 and 2返回: 0 1 and 2返回: 2 0 and 2返回的是0,而1 and 2返回的是2。就是因为在0那里出现了逻辑中断。 解…

Git的使用以及在IDEA2022中使用Git

目录 前言 一、Git下载与安装 二、Git常用命令 1.全局设置 2.获取Git仓库-在本地初始化Git仓库 3.获取Git 仓库-从远程仓库克隆 4.Git工作区、暂存区、版本库 概念以及工作区中文件状态 (1)工作区、暂存区、版本库 (2) G…

centos7.9 rc.local启动失败

最近在虚拟机上整个centos7.9,想要把程序设置成开机自启动,发现rc.local状态是failed,重启服务器也没用。 自己之前写过两篇相关的博客 centos7重启后/etc/rc.local中的脚本没有执行_lanren312的博客-CSDN博客 centos7开机运行java的sh脚本…