AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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:525182

评论 1 条评论

发布
用户头像
是老牌,但是不能说小众吧... 以前公司做车载导航设备,Qt基本行业首选啊. 桌面应用来说,Maya、Photoshop 的 GUI 也是用 Qt 写的,小众吗....
2025-01-07 15:53 · 湖北
回复
没有更多了
发现更多内容

TiDBv6.5离线部署

TiDB 社区干货传送门

6.x 实践

MobPush iOS端合规指南

MobTech袤博科技

数据可视化:相关类可视化图表大全

2D3D前端可视化开发

数据可视化控件 数据可视化工具 可视化数据 可视化图表 数据可视化设计

深度解析 slab 内存池回收内存以及销毁全流程

bin的技术小屋

Linux 内存管理 Linux Kenel 内存池 slab

JVM——解析运行期优化与JIT编译器

Java你猿哥

JVM ssm 虚拟机 编译器 JIT编译器

TiDB x Flink x Iceberg 实时 ODS 实践

TiDB 社区干货传送门

实践案例 大数据场景实践 实时数仓场景实践 数据中台场景实践 OLAP 场景实践

生态伙伴 | 携手深圳科创学院,持续推动项目落地与成长

华秋电子

手机一开,说办就办!指尖上的“数字江西”

OceanBase 数据库

数据库 oceanbase

网闸、防火墙、堡垒机三大定义说明

行云管家

防火墙 堡垒机 网闸

Github标星78k,Alibaba最新发布的Spring Boot项目实战文档!太强了

Java你猿哥

Java 面试 Spring Boot ssm Spring MVC

TiDB 使用国内公有云和私有部署的 S3 存储备份指南

TiDB 社区干货传送门

数据库架构设计 6.x 实践

AI 换脸技术:你的照片可能被滥用了!

郑州埃文科技

AI 数据治理

微服务是不是金科玉律?基于Spring Cloud如何构建分布式系统?

做梦都在改BUG

Java 架构 微服务 Spring Cloud

阻抗板是否高可靠,华秋有话说

华秋电子

官宣!时序数据库 TDengine 与天翼云完成产品兼容性认证

爱倒腾的程序员

涛思数据 时序数据库 ​TDengine

【5.19-5.26】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

SpringBoot 实现启动项目后立即执行方法的几种方式

Java你猿哥

源码 jdk Spring Boot ssm

Bytebase:更好地管理你的 OceanBase 数据库

OceanBase 数据库

数据库 oceanbase

深度学习进阶篇-预训练模型[3]:XLNet、BERT、GPT,ELMO的区别优缺点,模型框架、一些Trick、Transformer Encoder等原理详细讲解

汀丶人工智能

自然语言处理 深度学习 预训练模型 Transformer GPT

杜绝开源依赖风险,许可证扫描让高效&合规「两不误」

极狐GitLab

DevOps DevSecOps 开源许可证 极狐GitLab 安全合规

C4D 常用 14 款插件

Finovy Cloud

C4D 3D软件

基于openfaas托管脚本的实践

百度Geek说

数据库 百度 企业号 5 月 PK 榜

面试进阶齐飞!Github一天万赞的阿里Java系统性能优化有多牛?

Java你猿哥

Java JVM ssm Java性能优化

TiDB x Flink 数据集成实践

TiDB 社区干货传送门

实践案例 大数据场景实践 数据中台场景实践 OLAP 场景实践

阿里全新推出:微服务突击手册,把所有操作都写出来了|超清PDF

Java你猿哥

Java spring Spring Cloud ssm Ribbon

GitHub上标星75k+超牛的《Java面试突击离线版》够你润进去了

程序知音

Java java面试 Java进阶 Java面试题 Java面试八股文

堡垒机免费版有哪些功能啊?后面需要过等保怎么办?

行云管家

安全运维 运维软件 免费运维

揭秘百度IM消息中台的全量用户消息推送技术改造实践

JackJiang

消息推送 即时通讯IM im开发

7个工程应用中数据库性能优化经验分享

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

软件测试/测试开发丨Web自动化测试中显式等待的高级使用

测试人

程序员 软件测试 自动化测试 测试开发

3D LED显示屏选购指南

Dylan

3D LED显示屏 避坑指南

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