[转]著名的自由软件圣战- “KDE/QT .VS. Gnome/Gtk”

本文回顾了Qt与GTK的发展历程,探讨了它们在Linux桌面环境中的竞争,包括KDE与GNOME之间的较量。文章详细介绍了两个项目的起源、发展历程以及它们在技术许可方面的不同选择。

想看看MeeGo的QT,这是一篇很好的历史故事,收纳之。Tom同学很久没有发言了……还记得Tom同学show的私家摄影网站。文章来源:http://software.intel.com/zh-cn/blogs/2010/03/31/meegoqt/?cid=sw:prccsdn1024

在 Unix 的图形界面一向是以 MIT 的 X Window 系统为标准, 可是在商业应用上有两大流派,一派是以 Sun 公司领导的 Openlook 阵营,一派是 IBM/HP 领导的OSF (Open Software Foundation) 的 Motif, 双方经过多年竞争之后, Motif 最终胜出,成为最普遍使用的界面库, 后来双方又妥协出一个 CDE(Common Desktop Enviroment) 作为一个标准的图形界面。 但是 Motif/CDER 的价格非常昂贵,在这同时微软的 Windows 图 形界面发展速度非常快,而 Unix 界的后起之秀 Linux 也急需一个可靠并且免费的图形界面。

1996 年 10 月,由开发图形排版工具Lyx的德国人 Matthias Ettrich 发起了 KDE 计划。 KDE 的全称为 K Desktop Environment,可以看出是针对 CDE。 KDE 本身 是采用 GPL 宣言的,但是 KDE 却是使用 Qt 来作为其底层库,因为当时 Qt 已经将其 Unix 版本自由发布了,但是 Qt 并不遵循 GPL, 因此 KDE 被很多自由软件的作者攻击,认为利用非自 由软件开发违背了 GPL 的精神,于是 GNU 的狂热信徒兵分两路,一路是去制作 Harmonny,试图重写一套兼容于 Qt 的替代品,另一路是由一个 26 岁的墨西哥程序员 Miguel De Icaza 领导 下重新开发一套叫 GNOME(GNU Network Object Enviroment)来替代 KDE。 feedom.net

由于 Linux 界的老大 RedHat 不喜欢 KDE/Qt 的版权,因此 RedHat 甚至专门派出了几个全职程序员来加入 GNOME 进行开发工作,于是一场同 Motif VS Openlook 相似的圣战就这么打起来了。 Trolltech 为了 KDE 曾数次修改 Qt 的版权,从成立 KDE Free Qt 基 金会到采用 QPL,可谓是费尽心机,但是 GNOME 采用的 GTK 一开始就是完全的 GPL,因此在这个方 面 GNOME 有一定的优势,加上 Qt/KDE 采用 C++ 开发,入门的门槛比较高,而 GTK/Gnome 采用 C, 因此 GNOME 吸引了更多的自由软件开发者,但是 KDE 毕竟先走了一步, 推出的 KDE1.1.2 十分稳定, 而当时急忙中推出的 GNOME1.0 的系统稳定性奇差,有人甚至笑称 GNOME1.0 还没有 KDE 1.0 Alpha 稳定。但是 GNOME 后来发展比较快,大有迎头赶上的势头。当时双方的开发者在网络 上炒得天翻地覆,连 Linux 之父 Linus 只是说了一句喜欢用 KDE 都倍受指责。

战争到了第三个年头,也就是2000年,可谓是风云突变,一个接一个重大的事件先后发生: 首先是一批从 Apple 公司出来的工程师成立了一个叫 Eazel 的公司替 GNOME 设计界面,然后是一批 GNOME 程序员成立了一个 Helix Code 公司替 GNOME 提供商业支持,而大家期待以久的 KDE 2.0 也终于发布了,这恐怕是目前最为庞大的自由 软件了之一, 除了 KDE 本身,还包括 Koffice 套件,和集成开发环境 Kdevelop 等等大批软件,其主力软件 Kounqueror 也是第一个可以同微软的 Internet Exploer 相抗衡的浏览器。 而 Sun 公司,Red Hat 公司, Eazel 公司,Helix Code 等一批公司成立了一个GNOME 基金会, Sun 还宣布将把重量级办公软件 Star office 同 GNOME 集成, Trolltech 公司自然不能坐以 待毙,于今年 10 月 4 日将 Qt 的 free edition 变为 GPL 宣言,彻底解决了 KDE 的版权问题, 又推出了嵌入式 Qt ,给了 GNOME 阵营一个有力的回击。

到现在为止,这场战争还在继续,相信我们不能很快看到结果。一般说来, 目前 GNOME 吸引的公司比较多,但是 KDE/Qt 的开发的效率和质量比 GNOME 高,而且在 Office/嵌入式 环境中先走一步,在一定时间内还将处于优势地位。

那么对于用户来说,如何在 Qt/GTK 中作出选择呢?一般来说,如果用户使用 C++,对库的稳定性,健壮性要求比较高,并且希望跨平台开发的话,那么使用 Qt 是较好的选择, 但是值得注意的是,虽然 Qt 的 Free Edition 采用了 GPL 宣言,但是如果你开发 Windows 上的 Qt 软件或者是 Unix 上的商业软件,还是需要向 Trolltech 公司支付版权费用的。

摘抄部分:
GTK 是用C, Qt 用的是C++ ,这是一个最简单的区别,所以开发程序相对来说,只是相对,GTK 的程序执行效率会高些,QT 的程序开发环境成熟,效率高,代码重用高, 维护也方便。可能以前由于授权方面的问题,很多程序员选择了GTK, 但是现在NOKIA 已经发布了开源的版本,这个版权已经不是问题了!而且目前Qt 已经支持下述平台:Windows 、Unix/X11 – Linux 、Sun Solaris 、HP-UX 、Compaq Tru64 UNIX 、IBM AIX 、SGI IRIX 和其它很多X11 平台、 Mac OS X 、Windows CE 、Symbian 。T 最为双重授权的中间件,在客户需要的情况下,可以提供充足的技术支持,毕竟这些人是nokia 在发工资的。在QT 官方网站上找到的一些资料:

Qt Licenses

We offer Qt under the following licenses:

Qt
Commercial Developer License
The Qt Commercial Developer License is the appropriate version to use for the development of proprietary and/or commercial software. This version is for developers who do not want to share the source code with others or otherwise comply with the terms of the GNU Lesser General Public License version 2.1 or GNU GPL version 3.0. Read more
Qt GNU LGPL v. 2.1
This version of Qt is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions contained in the GNU LGPL version 2.1. Read more
Qt GNU GPL v. 3.0
This version of Qt is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU General Public License version 3.0 or where you are otherwise willing to comply with the terms of the GNU General Public License version 3.0. Read more

License Comparison Chart


Commercial
LGPL
GPL
License cost
License fee chargedNo license feeNo license fee
Must provide source code changes to Qt
No, modifications can be closedSource code must be providedSource code must be provided
Can create proprietary applications
Yes - No source code must be disclosedYes, in accordance with the LGPL v. 2.1 termsNo, applications are subject to the GPL and source code must be made available
Updates provided
Yes, immediate notice sent to those with a valid support and update agreementYes, made availableYes, made available
Support Yes, to those with a valid support and update agreementNot included but available separately for purchaseNot included but available separately for purchase
Charge for Runtimes
Yes, for some embedded usesNoNo

简单说,如果基于商业版本,你可以做任何的修改/开发不需要公布,而且有相应的技术支持;基于LGPL你也可以开发自己的商业版本,但对QT的修改 要回馈回去,如果要技术支持,当然要单独付钱了。GPL适用于完全的open source项目,你也可以强制要求别人给予你的软件的开发是GPL的。

<think> 我们针对用户的问题,需要解决两个主要错误: 1. 无法解析kde_plugin_version符号(多个ktexteditor插件中) 2. DBusMenuExporterDBus::GetLayout条件失败 根据引用[4]的内容,无法解析外部符号通常是因为找不到符号(函数)。可能的原因包括: - 编译库的位数不对(32位与64位不匹配) - 库文件损坏或版本不兼容 - 缺少必要的依赖库 另外,引用[2]提到了Kubuntu(使用KDE Plasma桌面)以及Ubuntu中安装KDE桌面,这暗示我们可能涉及KDE桌面环境的相关库。 因此,解决方案可能包括: 1. 重新安装相关KDE库,确保版本和位数一致。 2. 检查并修复损坏的包。 3. 确保DBus相关的库正确安装并配置。 具体步骤: ### 一、解决kde_plugin_version符号未定义问题 1. **重新安装ktexteditor插件及相关库** 终端执行以下命令: ```bash sudo apt --reinstall install kate ktexteditor-katepart ktexteditor-plugin-kateproject ktexteditor-plugin-katefiletree ktexteditor-plugin-katesearch ktexteditor-plugin-tabswitcher ``` 这将重新安装Kate编辑器及其插件,确保所需的库被正确安装。 2. **检查依赖关系和库的完整性** 使用`apt`检查依赖关系: ```bash sudo apt install -f sudo apt --fix-broken install ``` 然后更新系统: ```bash sudo apt update && sudo apt upgrade ``` 3. **验证库的位数是否一致** 使用`file`命令检查库文件(以katefiletreeplugin.so为例): ```bash file /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/katefiletreeplugin.so ``` 应该显示为64位(ELF 64-bit)。如果显示32位,则说明安装的库与系统位数不匹配,需要重新安装对应位数的包。 4. **清理并重建符号链接(可选)** 有时符号链接可能出错,可以尝试: ```bash sudo ldconfig ``` ### 二、解决DBusMenuExporterDBus::GetLayout条件失败 1. **重新安装DBus相关库** 错误提示来自DBus菜单,重新安装相关库: ```bash sudo apt --reinstall install libdbusmenu-qt5-2 libdbusmenu-qt5-dev ``` 2. **检查DBus服务状态** 重启DBus服务: ```bash sudo systemctl restart dbus ``` 3. **清除Kate的配置文件(可能配置损坏)** 有时用户配置文件可能导致问题,尝试移除Kate配置(备份后): ```bash mv ~/.config/kate ~/.config/kate.bak mv ~/.local/share/kate ~/.local/share/kate.bak ``` 然后重新启动Kate,系统会重新生成配置文件。 4. **检查Qt的DBus模块** 确保Qt5DBus模块已安装: ```bash sudo apt install qtbase5-dev qt5-default qttools5-dev ``` ### 三、综合验证 完成以上步骤后,重新启动系统或至少重启桌面环境(如通过`sudo systemctl restart gdm`或对应显示管理器),然后尝试启动Kate。 如果问题仍然存在,考虑升级KDE框架和Qt版本(如果Ubuntu版本较老,可以使用PPA): ```bash sudo add-apt-repository ppa:kubuntu-ppa/backports sudo apt update sudo apt full-upgrade ``` 注意:升级整个系统可能会带来其他兼容性问题,请谨慎操作。 如果上述方法都不能解决问题,可以考虑安装更新的Ubuntu版本(如20.04或22.04)或KDE Plasma桌面(通过PPA安装最新版)。 --- §§相关问题§§ 1. 如何在Ubuntu中完全卸载并重新安装KDE桌面环境? 2. 如何诊断并修复Linux中的动态链接库错误? 3. DBus在Linux桌面环境中起什么作用? 4. 如何为特定应用程序(如Kate)生成详细的调试日志? </think> ### 解决Ubuntu运行kate时kde_plugin_version符号解析失败及DBusMenuExporterDBus::GetLayout条件失败问题 #### 一、解决kde_plugin_version符号解析失败 该错误通常由KDE库版本冲突或插件加载失败引起,解决方法如下: 1. **修复KDE插件依赖** ```bash sudo apt --reinstall install \ kate ktexteditor-katepart \ ktexteditor-plugin-kateproject \ ktexteditor-plugin-katefiletree \ qtbase5-dev \ libkf5coreaddons-bin ``` 重新安装核心KDE组件修复符号缺失问题[^2][^4] 2. **检查库文件兼容性** ```bash # 验证库文件架构(应显示ELF 64-bit) file /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/*.so # 检查符号定义(应有kde_plugin_version输出) nm -D /usr/lib/x86_64-linux-gnu/libKF5CoreAddons.so.5 | grep kde_plugin_version ``` 确保64位库与系统架构匹配[^4] 3. **重建QT插件缓存** ```bash sudo rm /usr/lib/x86_64-linux-gnu/qt5/plugins/ktexteditor/*.qcow2 kbuildsycoca5 --noincremental ``` #### 二、解决DBusMenuExporterDBus::GetLayout条件失败 该错误通常由DBus菜单服务异常或桌面环境冲突导致: 1. **重置DBus菜单配置** ```bash # 停止菜单服务 sudo systemctl stop dbus # 清除损坏配置 rm ~/.config/dbus-1/session.conf ~/.config/menus/* # 重启服务 sudo systemctl start dbus ``` 2. **修复桌面会话冲突** ```bash # 安装完整会话支持(尤其KDEGNOME共存时) sudo apt install ubuntu-session plasma-desktop # 重建菜单缓存 sudo update-menus ``` 解决混合桌面环境导致的菜单加载问题[^3] 3. **启用QT调试模式** ```bash # 启动kate时显示DBus通信详情 QT_LOGGING_RULES="qt.dbus.*=true" kate ``` 输出示例: ``` DBus: GetLayout call for menu /MenuBar failed: "Menu structure not initialized" ``` #### 三、终极解决方案 若上述步骤无效,建议: 1. 创建新用户配置文件: ```bash mv ~/.config ~/.config.bak && mv ~/.local/share ~/.local/share.bak ``` 2. 完全重装KDE桌面: ```bash sudo apt install --reinstall kubuntu-desktop^ ``` 3. 检查系统日志定位根源: ```bash journalctl -b -0 | grep -E "kate|DBusMenu" ``` > **数学验证**:菜单初始化时序应符合不等式: > $$ > t_{\text{menu\_init}} < t_{\text{DBus\_export}} > $$ > 其中$t_{\text{menu\_init}}$为菜单构建完成时间,$t_{\text{DBus\_export}}$为DBus导出时间 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值