昨天,一整天都在折腾,用 Python 写出来一个挺简单的 POV-Ray 代码生成器,解决了三维点集的可视化问题。今天对它又作了一些改进,之后又写了一个无向图的 POV-Ray 代码生成器。以后再有需要,还得为向量场、曲线等几何对象的可视化写相应的代码生成器。
这些举动,起因是系统里的一个软件包死活安不上。这个软件包的名字叫 PySide,我给它取了个好听的名字:趴边。
事情还得从 Qt 讲起。众所周知……不知道也无所谓,我以前经常用的一个三维软件叫 FreeCAD,因为它不仅支持三维点集的显示,而且还支持用户通过 Python 脚本对其进行功能的扩展,恰好我对 Python 的熟悉程度超过 C 之外的其他语言。我只需要写几份很简单的脚本就能在 FreeCAD 里绘制一大堆盒子与一大堆向量,这一切都令人身心舒畅。不过,这与 Qt 有什么关系呢?FreeCAD 的 GUI 是用 Qt 写的。更确切的说,是用了 Qt 的 一种 Python 绑定—— PySide 写的。
我的 Gentoo 系统里存在着两个版本的 Qt,即 Qt4 与 Qt5。之前一直都觉得无所谓,但是前些天忽然觉得有些不对。掐值一算,Qt5 都已经问世将近 5 年了,怎么我的系统里还有依赖 Qt4 的软件呢?之后,内心就开始不舒服了起来。又查了查,发现 Gtk+ 2 也还在我的系统里被一些包依赖着。
显然,现在还依赖 Qt4 或 Gtk+ 2 的软件包,这在很大程度上意味着它们正在走向坟墓。我送它们一程。先送 Qt4 的那堆,Gtk+ 2 再缓缓。因为我经常需要用 xournal 这个工具给他们批改论文,而它依赖 Gtk+ 2。
我检查了一下系统里所有依赖 Qt4 的包,发现只有 FreeCAD 依赖它。不过,FreeCAD 一直是我自行编译安装的,我看过它的编译配置选项,是支持 Qt5 的。所以,我决定把 Qt4 包删掉,然后重新编译一下 FreeCAD 就是。本以为很顺利,没成想上上个周,整个周末都没搞定。
问题出在 PySide2 上。PySide2 是对 Qt5 的绑定。之前,FreeCAD 用的是 Qt4 的绑定,即 PySide1。这个 PySide2 在 Gentoo 里装不上,因为它用了 clang 来解析 Qt5 的 C++ 头文件以实现绑定过程的自动化,可是它又用得不够好,以至于在 Gentoo 里,总是出现 stddef.h 找不到之类的错误,而这种错误显然很低级。Gentoo 开发者似乎也没搞清楚是怎么回事,他以为是 clang 版本的问题,并且是 PySide2 那边的问题 [1]。
在找办法的过程中,顺便了解了一下 PySide 的一些事。之前,我一直以为 Qt 的 Python 绑定是 PyQt。现在才知道,PyQt 就跟早期的 Qt 一个操性,商业使用要花钱买,免费使用就得遵守 GPL 协议。PySide 是 LGPL 协议,商业软件公司显然更喜欢 LGPL。所以,又出现了明明一个软件包就能解决的问题,非得分化出两个包。
PyQt 是一个商业公司开发的。PySide 这个包是之前收购了 Qt 的诺基亚公司开发的。微软收购了诺基亚公司之后,PySide 可能死过一段时间,后来又有人继续开发,直到今年的年初才发布 PySide2,并支持 Qt5。
它们这样起来一茬,倒了一茬,此起彼伏的搞,不令人厌倦誓不罢休。这让我再一次确信,几年前作出的「珍惜生命,远离 GUI 和 3D」的决定是绝对正确的。
我常用的 fish 终端、Emacs、gcc、nikola、Pov-Ray、ConTeXt、sed、gpg 之类的软件,这么多年了,从未坏过,而许多桌面软件,时不时就陷入半死不活的境地,甚至慢慢地就销声匿迹了。
问题出在哪呢?还要让 X11 背锅么?Wayland 要取代 X11 的呼声也喊了快有 7 年了吧?似乎不仅没有改变什么,反而把许多原本挺不错的软件送进了坟墓。GNOME 3 的革命也有 7 年了吧?说好的要运行在平板上,要运行在手机上,要运行在……今年 Ubuntu 又上演了剧情逆转的一幕,扔掉了自家开发的那堆,重新拥抱 GNOME 的大腿。
我觉得就是精英主义作祟,把原本很务实的东西随手就扔掉了,去追求一些镜花水月的东西。前段时间又有人开始埋怨 DBus 有这个问题那个问题,然后另起炉灶,要弄一个比 DBus 更好的 DBus……歪国人喜欢中国式的革命的人似乎不太多,但是实际上自由/开源软件社区里的人一直都在前仆后继地这么干。
Systemd 已经是许多 Linux 发行版的标配了,因为不用这个,就没法装 GNOME。我的一个笔记本上跑的 Debian,它前两年经过公投用上了 Systemd,结果它给我带来了什么呢,结果就是我经常不能迅速关机,时不时的就会让我等待 1 m 30 s。众人赞赏 Systemd 开机速度快,那关机速度慢的问题,难道就只有我一个人遇到?我台式机的 Gentoo 依然是 openrc,一直都没出过问题,尽管它开机并不是很快,但关机很快。
一个更先进的但是 Bug 迭出的软件,与一个性能虽然不太好,但是很稳定的软件,它们能做同样的事,选哪个?我选后者。所以,我宁愿用 Python 去写 POV-Ray 的生成器,然后很缓慢地渲染三维图形,也不愿意再用一个连安装都安不上的 PySide2 以及那些依赖它的软件。
以上,看似是在对开源软件发牢骚。非也。与 iPhone 每年都发布新款而导致 iPhone 爱好者在去年的 iPhone 还能用的情况下不得不扔掉也要「升级」为新款相比,开源软件社区里的这点破事也不值一提。
说到手机,我现在用于通话和短信的依然是一部诺基亚全键盘功能机。我也有一部智能手机,红米……想不起来是哪个版本了,没有插电话卡,平时就是当电子书和 MP3 用,有时不得不用微信或 QQ,也要用它。
[1] https://bugs.gentoo.org/624682