AICon日程100%就绪,9折倒计时最后一周 了解详情
写点什么

Linux 版微信正式官宣,居然选了这个 90 年代的老牌小众框架

  • 2024-11-12
    北京
  • 本文字数:3925 字

    阅读完需:约 13 分钟

大小:1.74M时长:10:06
Linux版微信正式官宣,居然选了这个90年代的老牌小众框架

长期以来,Linux 下的微信体验一直是用户讨论的焦点,如今大家期待的原生 Linux 版本终于来了。

 

前几天,微信上线了 Linux 客户端的下载页,提供了适用于 x86、Arm 和龙芯 LoongArch 三种架构的测试版应用下载。其中,x86 和 Arm 平台支持 deb、rpm 和 AppImage 三种包格式,而 LoongArch 平台目前仅提供 deb 版本。

 

选用 Qt 进行全面重构

 

根据公开资料,微信 PC 4.0 版已开始公测,不但 Windows、macOS 系统下保持同步,还首次同步上架了统信 UOS、deepin 深度系统、麒麟系统的应用商店,无论界面还是功能都保持一模一样。可支持消息撤回、支持浏览、刷新朋友圈,通讯录界面改版,支持深色与浅色模式切换等功能。官方表示,微信 Linux 4.0 公测版全面重构,不仅架构上实现了突破,更在功能上实现了不同平台的全面对齐。

 

这是 Linux 系统在国内普及的重要一步。如今,国内两大主流 IM 工具都实现了跨平台,这无疑会让腾讯在 Linux 用户群体中赢得一些认可。

 

不少人对新版本微信实现跨平台的方式颇感兴趣。有知乎网友通过分析微信 4.0 的安装目录文件,发现其中的 Weixin.dll 文件包含了 Qt 库,由此推测微信或许是通过 Qt 来实现跨平台支持的。另外,客户端中的“关于”信息,也显示了微信 4.0 是基于 Qt 开发。





图片来源:https://www.zhihu.com/question/2731975763

 

Qt 和 MFC 一样古老,同属于上世纪使用 C++ 开发 Windows 应用程序的重要框架。只是自 1990 年代中期发布以来,Qt 不断发展,逐渐能够支持广泛的平台和多种使用场景。如今,使用 Qt,开发者只需编写一次代码,即可在多个平台上部署,包括 Windows、Linux、macOS 以及移动平台如 Android 和 iOS。并且 Qt 还提供丰富的库和工具,支持 GUI 开发、网络连接、数据库访问等功能,不仅适用于桌面应用,还适用于嵌入式和物联网 (IoT) 开发方面。QT 官网列出的典型客户案例,主要是松下机上娱乐系统、AMD 图形软件之类。

 


虽然 Qt 在 C++ 社区中享有盛誉,拥有强大的跨平台能力、丰富的组件库和灵活的架构,但始终未能走出小众圈子。特别是在 Flutter、Electron 和 React Native 等跨平台框架大行其道的今天,Qt 似乎已经逐渐淡出了大众的视野。

 

在各大技术论坛上,我们经常能看到这样的讨论:“为什么没有更多的桌面应用选择 Qt 开发?”、“Qt 功能如此强大,为什么不够流行?”甚至有人直接提出“Qt 快要死了吗?”这样的疑问。就连 Qt 官方的技术论坛上也存在类似的讨论,可见开发者对 Qt 的未来发展充满了疑虑。

 

QQ 选择 Electron 而不是 Qt 开发桌面应用,也从侧面反映出了 Qt 目前所面临的困境。QQ 官方曾表示,选择 Electron 的主要原因是考虑到人才储备。在国内,熟练掌握 Qt 技术栈的开发者相对较少,这无疑增加了开发和维护成本。

 


被智能手机时代抛弃的、最好的 C++ GUI 框架

 

Qt 诞生于 1991 年,由 Haavard Nord 和 Eirik Chambe-Eng 两位挪威程序员共同开发。他们因对跨平台 GUI 开发的需求,创立了 Qt。1992 年,他们引入了创新的“信号与槽”机制,为 Qt 奠定了基础。

 

1994 年,他们正式成立公司,立志打造一个“世界最佳 C++ GUI 框架”。该公司最初名为 Quasar Technologies,后来更名为 Trolltech。然而,创业初期并不顺利。作为两个年轻的程序员,他们想要进入一个已经相对成熟的市场,但面临着客户少、产品未完成、资金不足等困境。幸运的是,他们的妻子都有工作,因此能够在 Eirik 和 Haavard 预计开发产品并开始赚钱的两年时间内养活丈夫。

 

Qt 的命名颇有趣味:选择字母“Q”作为类前缀,因为这个字母在 Haavard 的 Emacs 字体中看起来很漂亮。添加“t”代表“toolkit”,灵感来自 Xt,即 X Toolkit。1995 年 5 月,Qt 首次公开发布,并提供了商业和开源两种许可。同年,挪威公司 Metis 成为 Qt 的首个商业客户。

 

1996 年,欧洲航天局也采用了 Qt,他们购买了 10 个商业许可证,而 Matthias Ettrich 则使用 Qt 构建了 KDE,这使得 Qt 成为 Linux 上 C++ GUI 开发的事实标准,为 Qt 的发展奠定了坚实基础。

 

2008 年初,意识到自研软件平台竞争力不足的诺基亚,以 1.53 亿英镑收购了 Trolltech,并将其 C++ 框架作为其开发者战略的核心。彼时,诺基亚的软件平台在用户体验上已明显落后于苹果和谷歌。其界面设计老旧,操作繁琐,与竞争对手的简洁直观形成了鲜明对比。而 Qt 已用于构建成功的消费软件产品,如 Google Earth 和 Skype 客户端,因此这是一笔不错的生意。

 

诺基亚的管理层希望通过引入 Qt,为开发者提供一个更现代、更灵活的开发平台,以提升其软件的竞争力。Qt 作为一款成熟的 C++ 框架,具有强大的跨平台能力和丰富的功能,Qt 也没有固定的外观和风格,这给了诺基亚很大的定制空间。

 

Trolltech 团队在 Symbian 平台上引入了 Qt,并对用户界面进行了现代化改造。他们认为,简单地对旧界面进行修补是毫无意义的,只有全新的设计才能满足用户不断变化的需求。

 

另一方面,诺基亚内部存在着激烈的竞争,不同团队之间缺乏协作,导致了资源的浪费和重复开发。这种内部竞争的文化,源于诺基亚 2004 年的一项重组,旨在避免官僚主义的形成。然而,这种做法却导致了多个相互竞争的 UI 框架的出现,包括 Symbian 原有框架团队设计的名为 Orbit 的项目,以及 Linux 团队开发称为 libdui 或 Direct UI 的框架。

 

Qt 框架原本被视为统一诺基亚设备开发的工具,但工程师们却开发了两个不兼容的 UI API。这严重影响了源代码的兼容性,导致开发效率低下。诺基亚管理层似乎并未意识到这一问题的严重性,继续支持这两个并行的 UI 项目。经验丰富的 Epoc 开发者 Sander van der Wal 对此感到非常失望,他指出诺基亚再次犯了碎片化 API 的错误。

 

2010 年诺基亚换了一位新 CEO,他很快就认定 Qt 不足以为诺基亚赢回开发者或客户,并果断地取消了 Orbit 和 Linux 团队的 DirectUI 项目。

 

然而,在这些内耗的过程中,Symbian UI 的现代化工作被严重耽误。诺基亚的产品设计师仍然不得不与一个过时的、用户体验糟糕的界面打交道。

 

知情人士曾评价诺基亚的失败是因为“在无效的用户界面上浪费了 2000 人年”:拥有 Linux 和 Symbian 两个平台后,80% 的代码无需更改即可让诺基亚重获竞争力。而 Symbian 的代码已经投入了数千人年的开发,只有前 20% 的代码(最多)需要更新。然而,诺基亚未能实现这一点。正所谓“因缺少一颗钉子,整个王国都消失了”。

 

随着苹果和 Android 在市场上独占鳌头,Qt 对诺基亚来说也就变得毫无意义了。2012 年,诺基亚正式放弃了这项技术,Qt 被无情地“转手”给了 Digia。诺基亚放弃 Qt 之后,人们对该平台的信心一直在逐渐减弱。

 

从 Trolltech 到诺基亚,再到 Digia,应用框架 Qt 的发展历程充满波折,尽管它始终在开发者中保有拥趸。2014 年,Qt 从 Digia 分离出来成立了一个独立子公司,专注于将商业版和开源版 Qt 重新对齐。

 

复杂的使用条款

 

事实上,Qt 从第一天起就有两种许可证:商业开发需要商业许可证,而开源开发则提供免费软件版本。

 

其许可证多次变更,最终在 2022 年形成了一套很复杂的许可方式:商业开发者在购买 Qt 框架及相关工具时,可以在应用程序开发和设备创建两类许可中进行选择。这些版本在提供的功能数量、工具支持以及部署目标方面有所不同。价格从每月 302 美元起(仅适用于选择一年预付的用户),适用于专业应用程序开发许可;企业版则起价 329 美元,现有的 Qt 应用程序开发许可将自动转换为此企业版。

 



其许可也是导致 Qt 不够流行的原因之一。

 

在 2000 年以前,Qt 的许可证并不友好于开源软件开发。这在当时导致许多注重开源的人士拒绝使用 Qt。这也正是 GNOME 桌面环境诞生的部分原因。直到 2005 年,Qt 才允许开发适用于 Windows 的免费软件。因此,许多早于这些年份启动的开源项目无法采用 Qt 进行开发。对于商业软件开发,则需要支付许可费用。

 

另外,一些应用程序的许可要求与 GPL、LGPL 或 Qt 的商业许可不兼容。GPL 不适用于商业软件,LGPL 不适用于静态链接软件,而商业许可需要花钱——许多人都不愿意花钱。

 


截图来源:https://news.ycombinator.com/item?id=14068652

 


截图来源:https://www.v2ex.com/t/1023458

 

在社交平台咨询 Qt 许可模式的不在少数。近期,还有开发者在使用 Qt 开发软件后收到了 Qt 代理商的告知函,称其可能侵权。 尽管开发者仅是动态链接了 Qt 的核心库和控件库,并未修改源代码,但仍感到困惑。这是因为 Qt 使用了 LGPL 许可证,该许可证的条款相对复杂,尤其是关于修改源代码和开源方面的规定,让开发者难以完全理解。此外,国内外 Qt 授权的差异,以及代理商的告知函,加剧了开发者对 Qt 商用许可的困惑。

 

社区中对此也存在诸多争议,一些开发者建议避免使用 Qt,而另一些开发者则建议在软件中明确标明使用了 LGPL 协议。

 

总的来说,Qt 的商业化应用涉及到复杂的法律问题,开发者在使用 Qt 进行商业开发时,务必谨慎对待,并寻求专业的法律建议。

 

参考链接:

https://www.zhihu.com/question/3360014967

https://www.zhihu.com/question/2731975763

https://www.infoq.cn/article/99suibztx2be1fwvqjwg

https://doc.qt.io/qt-5/licensing.html

https://doc.qt.io/qt-5/licenses-used-in-qt.html

https://www.theregister.com/2011/03/10/nokia_ui_saga/?page=3

https://www.theregister.com/2011/03/07/nokia_qt_bye/

https://www.theregister.com/2012/08/29/qt_android/

https://rtime.felk.cvut.cz/osp/prednasky/gui/the-qt-story/

https://softwareengineering.stackexchange.com/questions/88685/why-arent-more-desktop-apps-written-with-qt

https://devclass.com/2022/02/02/qt-company-commercial-license-change/

https://news.ycombinator.com/item?id=14068652

 

2024-11-12 10:523602

评论

发布
暂无评论

Java并发原理抽丝剥茧,读写锁ReadWriteLock实现深入剖析

Java 程序员 后端

王者荣耀商城异地多活架构设计

Rabbit

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day14,mybatis常见面试题

Java 程序员 后端

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day20,从java后端到全栈百度云

Java 程序员 后端

linux中删除特殊文件

入门小站

Linux

Java应用日志如何与Jaeger的trace关联,mybatis多表查询原理

Java 程序员 后端

文本前后空格去除工具

入门小站

工具

Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day34,rabbitmq集群同步原理

Java 程序员 后端

JAVA数组,nginx教程从入门到精通

Java 程序员 后端

Java常用类使用总结,linuxshell教程

Java 程序员 后端

Java是未来的第一编程语言吗?,linux内核架构pdf免费下载

Java 程序员 后端

java教程——注解,Java程序员校招蚂蚁金服

Java 程序员 后端

java架构师常见的基础面试题及答案(一),这个回答让我错失offer

Java 程序员 后端

Java架构师面试之Netty面试专题及答案(共10题,含详细解答

Java 程序员 后端

Java异常架构与异常关键字,java引用类型和基本类型的区别面试

Java 程序员 后端

Java异常面试题(2020最新版),mongodb入门

Java 程序员 后端

Java性能优化的35个细节(珍藏版),文末有福利

Java 程序员 后端

Java并发系列终结篇:彻底搞懂Java线程池的工作原理(1)

Java 程序员 后端

Java并发系列终结篇:彻底搞懂Java线程池的工作原理,nginx性能优化面试题

Java 程序员 后端

Java异常处理的误区和经验总结,2021最新网易Java面试题目

Java 程序员 后端

Java学到什么程度才算精通?,springmvc原理图解

Java 程序员 后端

Java安全之反序列化回显与内存码,java面试个人规划

Java 程序员 后端

Java实现文件切割拼接,MongoDB数据分布不均的解决方案

Java 程序员 后端

Java并发编程---Java多线程基本概念,java高并发编程详解pdf百度网盘

Java 程序员 后端

[ CloudWeGo 微服务实践 - 03 ] 小项目尝试

baiyutang

golang 微服务 10月月更

java教程——泛型,java反射原理三种

Java 程序员 后端

Java是动态语言吗?JavaCompiler实现动态编译,并通过反射赋值

Java 程序员 后端

Java是未来的第一编程语言吗?(1),java多线程常见面试题

Java 程序员 后端

Java并发编程---Java多线程基本概念(1),java多线程下载视频

Java 程序员 后端

Java开发必须要会!java微服务技术栈,菜鸟教程linux教程

Java 程序员 后端

Java开源生鲜电商平台-支付模块的设计与架构(源码可下载)

Java 程序员 后端

Linux版微信正式官宣,居然选了这个90年代的老牌小众框架_架构/框架_Tina_InfoQ精选文章