Sailfish OS Rokua 3.3.0
-
来自 https://www.deepl.com/translator 翻译
Rokua是芬兰第一个联合国教科文组织地质公园的一部分。在Rokua,你很容易看到冰河时代的痕迹。公园里的许多山脊和林间沙丘被银色的地衣覆盖着。公园内有许多水壶洞湖,散布在沙丘中。
自从我上一篇博文针对更多科技爱好者的博文发表以来,已经快一年了。随着Sailfish OS Rokua的推出,我觉得这又是一个很好的机会来发表这样的博文。关于Sailfish OS用户体验的变化,如果你想跳过技术话题,可以在文末找到。
有很多东西对于一个普通的Sailfish OS用户来说是看不到的。这个3.3.0版本包含了大量的底层栈的更新。比如说我们包括了更新的工具链,新版本的Python和许多核心库的更新,比如glib2。在这篇博客中,我将介绍其中的一些变化,以及它们对用户、开发者和Sailfish OS的实际意义。
这不仅仅是关于更新一个组件--"分布式珍宝 "的更新。
很多人都知道,操作系统是由数百个组件组成的。这些组件在编译时、链接时或运行时都会相互连接。当我们进行低级更新时,就像这次发布的版本一样,一个组件的变化会成倍增加,最终我们会因为依赖性而更新几十个组件。
其中一个例子是将gobject-introspection包更新到1.63.2版本。在这个过程中,librsvg库开始出现了故障。这个 librsvg 失败看起来像是 vala 的问题。我们决定把vala也更新一下,以减少以后的维护工作。这需要我们之前没有提供的autoconf-archive包。然后打包最新的autoconf-archive与gnome-common发生了冲突,需要对其进行小的修改,使其与autoconf-archive兼容。经过上面的这些,我们终于安装好了autoconf-archive,然后回到vala,把所有的部分编译到一起。
在把这些改动编译在一起后,我们不得不把所有的东西都整合在一起,以防止开发分支被破坏。这只是我们在这个版本中提供的众多改动中的一个例子。有了工具链,实际修复所有的构建故障需要花费更多的时间。
与工具链更新的二进制兼容性
最困难的,同时也是整个Sailfish OS开发社区最期待的更新之一,就是工具链的更新。其中包括GCC的更新,从4.9.4版本更新到8.3版本。我们没有更新到9.x或10.x版本,因为这项工作是在linaro/ARM最新发布的8.3版本时开始的。我们希望在采取下一步行动之前,最后确定这个版本。在Hossa的博文中也提到过,在更新复杂的组件时,最好采取较小的步骤。虽然我们没有得到最新的、最大的版本,但变化仍然很广泛。GCC 4.9.x系列是2014年发布的,而GCC 8.3是2019年2月开始的。即使变化很大,我们还是设法保留了二进制的兼容性。所有使用旧工具链编译的二进制文件和应用程序应该可以像以前一样工作。
新的代码优化和对最新的C++标准的支持是我们在这次更新中获得的一些可能性。由于代码中存在着循环依赖关系,GCC的更新如预料的那样,对整个操作系统进行了多次重建。这个过程中发现了几十个需要修复的包。其中有些修复是微不足道的,比如bluetooth-rfkill和buteo-mtp。有时,我们不得不使用之前的工具链中已经存在的修复。例如gst-plugins-base就是这种情况。有几十个类似的PR必须在整个堆栈中完成,才能让所有的东西都建立起来。
有些问题在编译或链接时并不明显,因此很难被发现。例如,我们遇到了旧perl的问题。我们考虑过先把perl更新到较新的版本,但决定开发一个小的补丁来代替。这个决定的理由是为了降低发布的风险,因为所有的改动加起来已经相当多了。此外,需要注意的是,perl默认情况下并没有安装在设备上,它是在堆栈中,因为它是构建所需要的。尽管如此,我们以后还需要研究一下更新perl。
综上所述,工具链的更新是一个重大的进步,有了这个变化,我们将有一些我们还不知道的开发机会。我们邀请你来评论和合作,如果你想到了新的方法或有更多关于这些变化将如何使我们大家受益的想法,请你来评论和合作。
Python 2 支持结束
Python 2支持于2020年1月1日结束。默认情况下,Python并没有安装在Sailfish OS设备上,它被用于我们的构建环境中。它还为我们提供了与Qt的pyotherside绑定,允许开发者使用python创建基于Qt的应用程序。在这个版本中,python3更新到了3.8.1版本,python2更新到了最新的2.7.17版本。在堆栈中拥有两个Python版本意味着增加了维护量,因此我们决定开始弃用Python2,并在未来专门关注Python3。
移除Python 2可能会给我们的开发社区带来额外的工作,因为有些人可能还在使用Python 2。尽管如此,删除Python 2并集中精力升级堆栈的决定是必要的,也是显而易见的。Python 2 软件包将保留在我们的版本库中,并且在下一个版本中也会保留一部分,因为删除依赖关系需要时间。尽管如此,请考虑尽快将所有的代码转移到Python 3。
作为这项工作的一个副作用,我们能够改善我们的构建时间,例如 dsme。许多对Python的依赖关系并不是真正需要的,所以删除这些依赖关系可以减少重构的需求。
QEMU
QEMU是我们工具链的重要组成部分,用于编译基于x86的机器的ARM和aarch64二进制文件。随着时间的推移,我们在QEMU上遇到了一些问题,很明显我们需要将其更新到一个新的版本。尽管这次发布的版本包括4.2.0版本(从旧的2.x分支更新),但我们在内部进行了两步升级,首先是升级到4.0版本,然后是4.2版本。
这个改动需要做大量的工作,对Sailfish OS终端用户来说,并没有明显的改进。但是,开发者现在可以享受到新的功能了。
库更新
有些更新是以前版本的工具链无法实现的,比如glibc,我们现在已经从以前的2.28版本更新到了2.30版本。
我们还对不同的系统组件进行了工作,如expat、file、e2fsprogs、libgrypt、libsoup、augeas、wpa_supplicant、fribidi、glib2、nss和nspr等,作为我们正常维护工作的一部分。
其中还包括对低级组件的更新,改善了用户体验。更新后的Gstreamer 1.16.1提供了对特定视频和音频编解码器的更好支持。我们还将gstreamer切换到了设备上所有SW编解码器使用ffmpeg。
技术债务分期付款
作为我们转向更可维护的系统的一部分,我们也在更广泛地使用 busybox。在这个版本中,我们将 coreutils、tar 和 vi 移到了 busybox。使用 busybox 的另一个好处是,它减少了我们的镜像的内存占用。使用 coreutils 替换后,我们节省了 ~4.2MB,而使用 tar 则节省了 ~1.4MB。vim-minimal替换后,在开发者模式下,从图像中节省了约1.6MB的空间。
就像任何平台一样,有的时候需要回头看一下,以便考虑将来如何进行。我们在使用statefs时遇到过一些问题,我们得出的结论是,它不值得再维护了。因此,我们将在3.3.0版本之后取消statefs。我们将不再使用statefs,而是转向其他的API。例如,在未来的状态信息将转移到libqofono中,而libqofono已经在堆栈中可用。其他过去需要statefs的例子还有maliit和浏览器。
我们也开始禁用qtaround。Qtaround是一个小的辅助函数库,现在已经不使用了,因此在堆栈中维护它没有意义。我们还删除了其他不再使用的版本库和包,比如cutes-js、cutes-qt5、meego-lsb和libtalloc等。
沙箱系统服务
还做了一些工作来进一步限制对系统服务的访问,这主要是利用systemd沙盒功能实现的。当然,这只是一小步,我们目前使用的旧的systemd并没有包含所有最新的功能,但仍然为限制我们的攻击面提供了明确的路径。在mce和sensorfw仓库中可以看到这样做的例子。
虽然systemd沙盒是个小东西,目前只在系统服务中使用,但我们也一直希望为应用提供类似的功能。在这个版本中没有关于这个问题的更新,但已经有了Firejail的封装,供想做早期实验的人使用。我们是否会把它作为官方API的一部分,还有待观察,我们也欢迎大家一起提出反馈意见。
即将推出的功能变化
正如我们之前的博客文章中提到的,我们正在努力提供多用户功能。这也是我们的合作伙伴所要求的。在同一设备上的不同用户的访问是需要的,尤其是在企业环境中,例如,设备可能被安装在汽车上。一些低级的使能器已经包含在这个3.3.0版本中。
我们还注意到,社区一直在为FlatPak工作。为了帮助社区的工作,我们将 libseccomp 和 json-glib 合并到 Sailfish OS 中。我们与合作伙伴一起进行了关于FlatPak的内部研究,虽然FlatPak看起来很不错,但结论是我们不认为FlatPak是Sailfish OS的应用捆绑框架,主要原因是它的资源占用率很高。应用沙盒技术还需要进一步研究,我们还在寻找合适的方法。
可见的变化
Sailfish OS 3.3是一个重要的版本,包括也是可见的变化。以下是其中的一些变化。
天气图标
新的图标集是基于当前的设计语言。我们突出了太阳、月亮和雨等关键元素,使它们在视觉上从符号中脱颖而出。因此,无论是在暗色还是在浅色环境中,太阳都会显得 "阳光明媚"。
EAP-TLS支持
在这个版本中,增加了对WPA-EAP(TTLS)和WPA-EAP(TLS)网络的支持,可以用证书连接到WPA-EAP(TTLS)和WPA-EAP(TLS)网络。
全球地址列表(GAL)支持
对于所有 Exchange Active Sync 用户来说,您现在可以从全局地址列表 (GAL) 中搜索联系人,当您将收件人添加到电子邮件中时,您将发现支持从全局地址列表 (GAL) 中搜索联系人。这项支持将在未来进一步扩展。
Nextcloud账户
现在可以直接添加Nextcloud账户。支持的功能包括备份、联系人、日历、图片和通知等功能,是迄今为止任何集成账户中最全面的功能集合。
位置堆栈
一段时间以来,我们一直在为我们的社区提供Mozilla定位服务。正如他们的博客上所解释的那样,Mozilla将很遗憾地终止对这一服务的支持。这在社区发布的定位性能中可以看到。虽然我们的商业合作伙伴都有自己的辅助定位提供商的解决方案,但我们目前还没有为我们的社区提供替代方案。
我们已经在定位堆栈中找到了一些改善性能的修复方案,我们正在寻找更多的修复方案。我们也在检查我们可以接受的替代服务,我们也在检查可供选择的服务。
因此,相当多的事情发生了,还有更多的东西要来,敬请关注 。
为了庆祝新版本的发布,我们提供Sailfish X特价。您可以在Jolla Shop结账时输入优惠券代码VAPPU即可获得此优惠。此优惠仅在有限的时间内有效。
Br,
Sage -