移动版 GNOME Shell：希望之始，期望满满

看着很不错

# 移动版 GNOME Shell：希望之始，期望满满

>
> GNOME 开发人员在最近的一篇博文中提出了将 GNOME Shell 完全移植到手机上的想法。下面是我对这个项目的一些看法。
>
>
>

### 移动版 GNOME Shell

作为一个桌面环境，GNOME 在过去的十年中发展成为了 [GNOME 40](https://www.debugpoint.com/tag/gnome-40)。GNOME 40 是一个重要的版本，它以一种现代的方式改变了完整的用户界面设计。

看着 GNOME 40 的设计方式，你可能会觉得 Shell 和它的底层技术已经为小屏幕做好了准备。手势驱动的工作区、图标网格和停靠区 —— 在某种程度上感觉更接近于像安卓这样的移动操作系统，而不是桌面环境。

此外，系统托盘、日历、通知和原生的应用程序，可以有效地在较小尺寸的设备上工作。得益于 GTK4 和 libadwaita，其设计是响应式的，应用程序和控件的外观与移动平台很匹配。

在 GNOME 40 之后，GNOME 开发者为较小尺寸的设备（如平板电脑和手机）设计了几个 GNOME Shell 的概念验证。

#### 为什么是现在？

任何项目的开发和研究工作都要花费时间和金钱。虽然有来自主要科技公司对 GNOME 的捐赠，但这次有一个 “<ruby> 原型基金 <rt>  Prototype Fund </rt></ruby>” 帮助该团队继续进行这项努力。[原型基金](http://www.prototypefund.de) 是德国教育部（BMBF）支持公共利益软件的资助项目。

#### 包括什么？

设计一个完整的移动用户界面，并将其与移动操作系统整合是一个非常复杂的项目。它需要一个精心设计的愿景来支持成千上万的移动硬件和用户支持。更不用说，用户在移动设备上的隐私和安全问题了。

因此，有了这个基金，团队可以集中精力进行概念验证，以满足 GNOME Shell 中一些基本的用户互动。

* 启动器
* 应用程序网格
* 轻扫、手势和导航
* 用手机键盘搜索
* 检测屏幕大小和支持屏幕旋转
* 工作空间和多任务
* 设置
* 屏幕键盘

始终要记住的是，移动体验远不止用户界面这么简单。另外，GNOME 本身并不是一个操作系统。它由底层的稳定的操作系统组成，它提供了非常需要的隐私和安全。另外，“应用商店”的概念也是如此。手机制造商需要与 GNOME 开发者合作，让他们的产品采用这个概念。

#### 进展如何？

在写这篇文章时，团队给我们快速演示了取得的进展。在下面的视频中可以看到：

*Phone*

复杂的任务是识别触摸屏手机中的各种手势。例如，你可能会使用长触摸、短触摸、双指轻扫和拖动，以及许多只有在小尺寸设备中才可行的可能性。这需要在各自的 GNOME Shell 组件中推倒重构。

而完全在现有的 GNOME Shell 基础上开发它们是很有挑战性的工作。

此外，该团队使用著名的 Pinephone Pro 进行开发和测试。Pinephone 已经是一个商业产品，装有 “友商” KDE Plasma 手机和其他 Linux 操作系统。

*Tablet*

### 结语

如果一切按计划进行，我们可能在一个完整的开源手机中获得原生的 GNOME 体验。而你可以重新拥有你的隐私!

另外，我不确定 Phosh（它也是基于 GNOME 的）会发生什么。虽然 Phosh 是由 Purism 开发和管理的，但看看 GNOME Shell 在移动设备上的努力和 PHosh 在未来一段日子的发展方向将是很有趣的。

那么，你对这个项目的前景怎么看？请在下面的评论栏里告诉我。

*图片和视频来源：GNOME 开发者 [博客](https://blogs.gnome.org/shell-dev/2022/05/30/towards-gnome-shell-on-mobile/)*

---

via: <https://www.debugpoint.com/2022/06/gnome-shell-mobile-announcement/>

作者：[Arindam](https://www.debugpoint.com/author/admin1/) 选题：[lkxed](https://github.com/lkxed) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


龙芯 CPU 已经一只脚迈入 Linux 5.19

这文章是故意弄混 LoongISA 和 LoongArch 吧？

老外有偏见是正常的

# 龙芯 CPU 已经一只脚迈入 Linux 5.19

在本周为龙芯 CPU 架构支持进入 [Linux 5.19](https://www.phoronix.com/scan.php?page=search&q=Linux+5.19) 而进行的疯狂冲刺之后，Linus Torvalds 今天成功地将这个受 MIPS64 启发的中国架构代码合并到了 Linux 主线内核中。然而，由于一些代码尚未通过审查，虽然该 CPU 架构代码已经到位，但一些关键的驱动程序还没有到位，因此 Linux 5.19 还无法龙芯架构上启动。

如果你不太了解这件事的进展，我来补充介绍一下：<ruby>   龙芯架构  <rp>  （ </rp> <rt>  LoongArch </rt> <rp>  ） </rp></ruby> 是由龙芯公司开发的 CPU 架构，长期以来以其基于 MIPS64 的系统而为人所熟知。但是随着上游 MIPS64 架构已经实际消亡，龙芯公司开始开发他们自己的 ISA。龙芯架构自称受到了 MIPS64 和 RISC-V 的启发，但一些龙芯架构的内核代码实际上是重新使用或精密复制自现有的 MIPS 代码。

今年早些时候，龙芯架构被 [添加到 GCC 12](https://www.phoronix.com/scan.php?page=news_item&px=LoongArch-Merged-GCC-12) 中作为主要系统编译器。与其他 Arm 或 RISC-V 设计相比，目前这一代 [龙芯 3A5000 CPU 的性能](https://www.phoronix.com/scan.php?page=news_item&px=Loongson-3A5000-Benchmark) 在现今阶段并不太诱人。不过我们将拭目以待这个中国国产 CPU 架构在未来几年的发展情况。

正如本周早些时候所写的，有迫切的压力促使 [龙芯架构进入 Linux 5.19](https://www.phoronix.com/scan.php?page=news_item&px=LoongArch-Maybe-For-5.19)，即使这意味着系统还无法启动。开发人员希望将 CPU 架构的代码主线化，这样他们就能腾出手来为 GNU C 库（Glibc）提交龙芯架构的支持代码。主线化他们的 Glibc 目标首先需要有一个坚实的用户空间 ABI 来解决内核支持。但由于 Glibc 2.38 预计在 8 月发布，龙芯架构需要合并到 Linux 5.19，以便有足够的时间在 7 月发布，才能使龙芯架构的代码赶得上 Glibc 的下一个版本截止线。

现在合并龙芯架构也减少了对 Linux 5.20 中可能出现的任何主线树范围变化的维护负担。

因此，大部分的龙芯架构代码已经出现在 Linux 5.19 中了，但缺少一些启动所需的 EFI 代码，IRQ 驱动与 Linux 的 MIPS 支持共享同一段代码，但由于情况复杂，还不能使用，PCI 部分的龙芯代码需要修改并通过 PCI 子系统区域进行合并。

[龙芯架构的合并](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c6f2f3e2c80e975804360665d973211e4d9390cb) 对内核来说意味着增加了 21000 行的新代码，这还不包括尚未到达的所需驱动程序。据推测，到今年夏天晚些时候的 Linux 5.20 内核开发周期时，其余所需的驱动支持将会通过审查，从而产生一个可启动的龙芯架构系统。

就在四年前，著名的 Linux 内核开发者 Arnd Bergmann [预测](https://www.phoronix.com/scan.php?page=news_item&px=C-SKY-Approved-Last-Arch) C-SKY 将是“我们最后一个添加到内核的新 CPU 架构”。C-SKY 是另一个中国架构，当时的想法是所有未来的 CPU 工作都将走向 RISC-V，但现在发现龙芯架构也许将是最后一个添加到 Linux 内核的新 CPU 架构。

---

via: <https://www.phoronix.com/scan.php?page=news_item&px=LoongArch-Merged-Linux-5.19>

作者： [Michael Larabel](https://www.michaellarabel.com/) 选题：[wxy](https://github.com/wxy) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](/article-14671-1.html) 荣誉推出


硬核观察 #657 开源固件基金会发布公开信要求英特尔开源 FSP

Summary: • 开源固件基金会发布公开信要求英特尔开源 FSP • Zstd 压缩固件的支持提交到 Linux 5.19 • Facebook 正在开发“隐私安全”广告产品

# 硬核观察 #657 开源固件基金会发布公开信要求英特尔开源 FSP

### 开源固件基金会发布公开信要求英特尔开源 FSP

开源固件基金会发起一封给英特尔的公开信，呼吁英特尔开源其固件支持包（FSP）。FSP 二进制文件对英特尔系统的固件开放程度有很大的限制，也是在英特尔硬件上支持 Coreboot、LinuxBoot 和其他技术的一个限制因素。而行业对拥有开源固件的兴趣越来越大。开源固件有助于从解决安全问题到在系统的低层次上推动创新功能。

>
> **[消息来源：Phoronix](https://www.phoronix.com/scan.php?page=news_item&px=Open-Letter-Intel-FSP)**
>
>
>

>
> 老王点评：开源固件是自由硬件、自由软件的一块重要基石，也是英特尔一直舍不得放开的部分，不过我觉得以英特尔的对开源开放的态度，应该比英伟达更容易接受社区倡议。
>
>
>

### Zstd 压缩固件的支持提交到 Linux 5.19

多年来，一直有人提议在 Linux 内核的固件处理中增加对 Zstd 压缩的支持，取代现有的 XZ 压缩，以节省磁盘空间，同时提供快速的解压缩。但这些补丁从未进入主线，而最终随着 Linux 5.19 的推出，它将会到位。以 .zst 结尾的固件文件将由 Linux 内核的固件加载器进行解压。

>
> **[消息来源：Phoronix](https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.19-Zstd-Firmware)**
>
>
>

>
> 老王点评：有时候不得不说，Linux 对于新技术的采纳太过于谨慎了。
>
>
>

### Facebook 正在开发“隐私安全”广告产品

据称，Facebook 正在早期开发一个不依赖任何匿名用户个人信息的产品。Facebook 的工程师们称之为“基本广告”，它针对的是那些试图建立知名度和塑造产品认知的品牌广告商。该产品似乎与广告商使用 Facebook 的目标工具背道而驰。但是，既能提供规模，又能绕过 CCPA 和 GDPR 等数据法规的广告仍然会得到广告商的青睐。

>
> **[消息来源：businessinsider](https://www.businessinsider.com/facebook-developing-ads-product-no-user-data-amid-privacy-changes-2022-6?IR=T)**
>
>
>

>
> 老王点评：那不就是随意投放么？确实是保护了隐私，不过你也可能会看到更多的广告。
>
>
>


软件包 “被标记为手动安装”？这是什么意思？

Summary: 让我在本篇中分享一些细节。

让我在本篇中分享一些细节。

# 软件包 “被标记为手动安装”？这是什么意思？

如果你使用 `apt` 命令在终端中安装软件包，你将看到各种输出。

如果你注意并查看输出，有时你会注意到一条消息：

```
package_name set to manually installed

```

你有没有想过这条消息是什么意思，为什么你没有在所有包上看到它？让我在本篇中分享一些细节。

### 理解 “软件包被标记为手动安装”

当你尝试安装已安装的库或开发包时，你会看到此消息。此依赖包是与另一个包一起自动安装的。如果删除了主包，则使用 `apt autoremove` 命令删除依赖包。

但是由于你试图显式安装依赖包，你的 Ubuntu 系统认为你需要这个包独立于主包。因此，该软件包被标记为手动安装，因此不会自动删除。

不是很清楚，对吧？以 [在 Ubuntu 上安装 VLC](https://itsfoss.com/install-latest-vlc/) 为例。

由于主 VLC 包依赖于许多其他包，因此这些包会自动安装。

如果你检查名称中包含 `vlc` 的 [已安装软件包列表](https://itsfoss.com/list-installed-packages-ubuntu/)，你会看到除了 VLC，其余都标记为“自动”。这表明这些软件包是（跟着 vlc）自动安装的，当 VLC 被卸载时，它们将使用 `apt autoremove` 命令自动删除。

现在假设你出于某种原因考虑安装 `vlc-plugin-base`。如果你在其上运行 `apt install` 命令，系统会告诉你该软件包已安装。同时，它将标记从自动更改为手动，因为系统认为在尝试手动安装表明你明确需要此 `vlc-plugin-base`。

可以看到它的状态已经从 `[installed,automatic]` 变成了 `[installed]`。

现在，让我删除 VLC 并运行 `autoremove` 命令。你可以看到 `vlc-plugin-base` 不在要删除的软件包列表中。

再次检查已安装软件包的列表。`vlc-plugin-base` 仍然安装在系统上。

你可以在这里看到另外两个与 VLC 相关的包。这些是 `vlc-plugin-base` 包的依赖项，这就是为什么它们也存在于系统上但标记为 `automatic` 的原因。

我相信现在有了这些例子，事情就更清楚了。让我给你一个额外的技巧。

### 将包重置为自动

如果包的状态从自动更改为手动，你可以通过以下方式将其设置回自动：

```
sudo apt-mark auto package_name

```

### 结论

这不是一个重大错误，也不会阻止你在系统中进行工作。但是，了解这些小事会增加你的知识。

**好奇心可能会害死猫，但它会让企鹅变得更聪明**。这是为这篇原本枯燥的文章增添幽默感的原始引述 : )

如果你想阅读更多这样的文章，这些文章可能看起来微不足道，但可以帮助你更好地了解您的 Linux 系统，请告诉我。

---

via: <https://itsfoss.com/package-set-manually-installed/>

作者：[Abhishek Prakash](https://itsfoss.com/author/abhishek/) 选题：[lkxed](https://github.com/lkxed) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


机器学习：使用 Python 进行分类

# 机器学习：使用 Python 进行分类

>
> 机器学习（ML）就是，分析一组数据以预测结果。Python 被认为是 ML 的最佳编程语言选择之一。在本文中，我们将讨论使用 Python 进行分类的机器学习。
>
>
>

<img src="content_image/album_202206_05_161359nxsazihpel8opwqh.jpg" alt="machine-learning-classification" title="machine-learning-classification">

假设你想教孩子区分苹果和橙子。有多种方法可以做到这一点。你可以让孩子触摸这两种水果，让他们熟悉形状和柔软度。你还可以向她展示苹果和橙子的多个例子，以便他们可以直观地发现差异。这个过程的技术等价物被称为机器学习。

机器学习教计算机解决特定问题，并通过经验变得更好。这里讨论的示例是一个分类问题，其中机器被赋予各种标记示例，并期望使用它从标记样本中获得的知识来对未标记样本进行标记。机器学习问题也可以采用回归的形式，其中期望根据已知样本及其解决方案来预测给定问题的<ruby> 实值 <rt>  real-valued </rt></ruby>解决方案。<ruby> 分类 <rt>  Classification </rt></ruby>和<ruby> 回归 <rt>  Regression </rt></ruby>被广泛称为<ruby> 监督学习 <rt>  supervised learning </rt></ruby>。机器学习也可以是<ruby> 无监督 <rt>  unsupervised </rt></ruby>的，机器识别未标记数据中的模式，并形成具有相似模式的样本集群。机器学习的另一种形式是<ruby> 强化学习 <rt>  reinforcement learning </rt></ruby>，机器通过犯错从环境中学习。

### 分类

分类是根据从已知点获得的信息来预测一组给定点的标签的过程。与一个数据集相关的类别或标签可以是二元的，也可以是多元的。举例来说，如果我们必须给与一个句子相关的情绪打上标签，我们可以把它标记为正面、负面或中性。另一方面，我们必须预测一个水果是苹果还是橘子的问题将有二元标签。表 1 给出了一个分类问题的样本数据集。

在该表中，最后一列的值，即贷款批准，预计将基于其他变量进行预测。在接下来的部分中，我们将学习如何使用 Python 训练和评估分类器。

| 年龄 | 信用等级 | 工作 | 拥有房产 | 贷款批准 |
| --- | --- | --- | --- | --- |
| 35 | 好 | 是 | 是 | 是 |
| 32 | 差 | 是 | 不 | 不 |
| 22 | 一般 | 不 | 不 | 不 |
| 42 | 好 | 是 | 不 | 是 |

*表 1*

### 训练和评估分类器

为了训练<ruby> 分类器 <rt>  classifier </rt></ruby>，我们需要一个包含标记示例的数据集。尽管本节不涉及清理数据的过程，但建议你在将数据集输入分类器之前阅读各种数据预处理和清理技术。为了在 Python 中处理数据集，我们将导入 `pandas` 包和<ruby> 数据帧 <rt>  DataFrame </rt></ruby>结构。然后，你可以从多种分类算法中进行选择，例如<ruby> 决策树 <rt>  decision tree </rt></ruby>、<ruby> 支持向量分类器 <rt>  support vector classifier </rt></ruby>、<ruby> 随机森林 <rt>  random forest </rt></ruby>、XG boost、ADA boost 等。我们将看看随机森林分类器，它是使用多个决策树形成的集成分类器。

```
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics

classifier = RandomForestClassifier()

#creating a train-test split with a proportion of 70:30
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)

classifier.fit(X_train, y_train) # 在训练集上训练分类器

y_pred = classifier.predict(X_test) # 用未知数据评估分类器

print("Accuracy: ", metrics.accuracy_score(y_test, y_pred)) # 用测试计划中的实际值比较准确率

```

虽然这个程序使用准确性作为性能指标，但应该使用多种指标的组合，因为当测试集不平衡时，准确性往往会产生非代表性的结果。例如，如果模型对每条记录都给出了相同的预测，而用于测试模型的数据集是不平衡的，即数据集中的大多数记录与模型预测的类别相同，我们就会得到很高的准确率。

### 调整分类器

调优是指修改模型的<ruby> 超参数 <rt>  hyperparameter </rt></ruby>值以提高其性能的过程。超参数是可以改变其值以改进算法的学习过程的参数。

以下代码描述了随机搜索超参数调整。在此，我们定义了一个搜索空间，算法将从该搜索空间中选择不同的值，并选择产生最佳结果的那个：

```
from sklearn.model_selection import RandomizedSearchCV

#define the search space
min_samples_split = [2, 5, 10]
min_samples_leaf = [1, 2, 4]
grid = {‘min_samples_split’ : min_samples_split, ‘min_samples_leaf’ : min_samples_leaf}

classifier = RandomizedSearchCV(classifier, grid, n_iter = 100)

# n_iter 代表从搜索空间提取的样本数
# result.best_score 和 result.best_params_ 可以用来获得模型的最佳性能，以及参数的最佳值

classifier.fit(X_train, y_train)

```

### 投票分类器

你也可以使用多个分类器和它们的预测来创建一个模型，根据各个预测给出一个预测。这个过程（只考虑为每个预测投票的分类器的数量）被称为硬投票。软投票是一个过程，其中每个分类器产生一个给定记录属于特定类别的概率，而投票分类器产生的预测是获得最大概率的类别。

下面给出了一个创建软投票分类器的代码片段：

```
soft_voting_clf = VotingClassifier(
estimators=[(‘rf’, rf_clf), (‘ada’, ada_clf), (‘xgb’, xgb_clf), (‘et’, et_clf), (‘gb’, gb_clf)],
voting=’soft’)
soft_voting_clf.fit(X_train, y_train)

```

这篇文章总结了分类器的使用，调整分类器和结合多个分类器的结果的过程。请将此作为一个参考点，详细探讨每个领域。

---

via: <https://www.opensourceforu.com/2022/05/machine-learning-classification-using-python/>

作者：[Gayatri Venugopal](https://www.opensourceforu.com/author/gayatri-venugopal/) 选题：[lkxed](https://github.com/lkxed) 译者：[geekpi](https://github.com/geekpi) 校对：[turbokernel](https://github.com/turbokernel)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #658 Doom 游戏被移植到 BIOS 中运行

Summary: • Doom 游戏被移植到 BIOS 中运行 • UNISOC 固件中的一个关键缺陷可阻断通讯 • 谷歌助手正在失去基于位置的提醒

本质上很多恶意代码都可以被植入BIOS或者更底层的固件里执行，所以我觉得自由开源软件对个人安全具有更大的社会意义！！！

# 硬核观察 #658 Doom 游戏被移植到 BIOS 中运行

### Doom 游戏被移植到 BIOS 中运行

Coreboot 是一个自由开源的 BIOS 实现，支持许多被称为“载荷”的扩展。用户可以通过选择不同载荷来自定义 BIOS ROM 所包含的功能。在刚刚发布的 Coreboot 4.17 中，除了支持新的主板、提供新的启动程序、支持 AMD 平台安全启动、有一些修正之外，还有……一个 1993 年的移植版 Doom（毁灭战士）游戏。虽然有些“小小”的不足，比如没有声音、不能保存游戏、退出游戏时系统会挂起，但是他们说，“如果你厌倦了太空入侵者和俄罗斯方块等游戏载荷，将 3D 游戏带入你的 BIOS，是一个很棒的新选择！”

>
> **[消息来源：Phoronix](https://www.phoronix.com/scan.php?page=news_item&px=Coreboot-4.17)**
>
>
>

>
> 老王点评：嗯，我启动机器是准备干什么来着？为什么我一直玩游戏……
>
>
>

### UNISOC 固件中的一个关键缺陷可阻断通讯

研究人员发现，攻击者可以向附近带有 UNISOC 固件的设备发射一个特别设计的无线电数据包，可以使固件崩溃，在设备重新启动之前，会终止该设备的蜂窝网络连接。事实证明，这个缺陷不仅适用于低端智能手机，而且也适用于一些智能电视。研究人员说该漏洞是在 UNISOC 芯片组的固件中，而不是在安卓操作系统中。UNISOC 是一家有 21 年历史的芯片设计公司，总部设在中国，是世界上第四大智能手机芯片商，仅次于联发科、高通和苹果。

>
> **[消息来源：The Register](https://www.theregister.com/2022/06/03/uisoc-chip-flaw-check-point/)**
>
>
>

>
> 老王点评：最糟糕的就是这种硬件中的安全缺陷，无论是升级还是替换，都非常麻烦。
>
>
>

### 谷歌助手正在失去基于位置的提醒

这些是非常有用的命令，你可以告诉谷歌助手，比如，“提醒我回家后把垃圾倒掉”，而你的手机一直在追踪你的位置，当你进门时就会提示你。现在谷歌正在发出通知，告诉用户这项功能已经失效，而建议采用定时重复的提醒替代。目前还不清楚为什么谷歌突然要砍掉一个有用的、易于使用的功能。

>
> **[消息来源：Arstechnica](https://arstechnica.com/gadgets/2022/06/the-google-assistant-is-losing-location-reminders-one-of-its-best-features/)**
>
>
>

>
> 老王点评：看来不是好的功能都能留下，有时候你不知道厂商在想什么，如果产品是开源的会怎么样？
>
>
>


Linux 桌面刻薄版点评

“ubuntu是一个古老的非洲单词，意思是‘我用不来debian’”<br />
笑不活了

你的翻译好，采纳！

深刻，却赞同。我基本上都用过。。。<br />
后面就不折腾了，尤其是对 Arch 的评价。没时间玩不起。。。

服务器可能没什么不同，桌面debian比不上ubuntu，安装驱动、按教程安装解码器等ubuntu都很方便，不过最好用的《linux发行版》还是mac

对于媒体工作者来说，确实是mac（尽管它只能叫类unix）

这。。。 机器翻译的  ？

如果你有工作要做，那就不太好了，适用每一种发行版，毕竟office套件和设计类软件不太行。看到最后，还是只能arch和其衍生版。不过话说回来，这篇文章明显只适用于国外，国内zf强推，之前那篇文章不是说25年国内桌面电脑出货量预装Linux的要占20%吗？

突然不想再把时间浪费在学习Linux上了，换Ubuntu，有机会试试Mac，珍惜生命

# Linux 桌面刻薄版点评

>
> 厌倦了 Windows 却买不起 Mac？这里有一份讲道理的最不坏发行版清单供你参考。
>
>
>

众所周知，所有的操作系统都很糟糕，只是有些比其他的更差一些。

在几乎在每一篇关于 Linux 的文章下都有这样的评论：*有太多的发行版了，不知道该试试哪个*。因此，我们觉得应该帮你简化一下，列出不同的发行版到底怎么样，告诉你它们在哪些方面很 [糟糕](http://harmful.cat-v.org/software/operating-systems/os-suck)。

由于 Distrowatch 目前列出了多达 [270](https://distrowatch.com/dwres.php?resource=popularity) 个发行版，如果我们把所有的发行版都体验一遍，那简直是件不可能完成的事。因此，我们需要对这个列表做个瘦身。

如果你对这样的比较感兴趣，那么可能你还没有找到最喜欢的。

### 0. 小众而寂寂无名的发行版，我说的是全部

避免在所有的小众的发行版上费劲。原因如下：首先，它们很小众。没有多少人使用它们，所以你很难找到可以寻求帮助的人。其次，第三方硬件和软件可能无法开箱即用，如果你向供应商寻求帮助，无论是游戏、显卡还是打印机，他们都不会听说过 Ultimate SuperL33tOS 树莓派版。然后就完了。不要选它们，坚持主流。

### 1. ChromeOS Flex

年年都在喊 Linux 桌面年来了，然而根本没有人注意到它是不是来了 —— 也许是因为上面没有写 “Linux” 吧。ChromeOS 只能运行在 ChromeBook 和 ChromeBox 上，但在全球疫情大流行之前，它们的销量曾一度超过 Mac。“Flex” 是适用于普通 PC 的版本，大概因为它是 1.5 万亿美元的谷歌做的而因此得名吧。ChromeOS Flex 非常好用，因为它只做一件事：浏览网页。你不能安装应用程序，甚至不能安装安卓应用程序：只有官方套件才可以。你可以运行 Debian 容器：如果你知道这意味着什么，就去运行 Debian。如果你不知道这意味着什么，相信我们，你不会想知道的。

### 2. Ubuntu

>
> “Ubuntu 是一个古老的非洲单词，[意思](https://www.urbandictionary.com/define.php?term=ubuntu) *是我用不来 Debian*。”
>
>
>

Ubuntu 一开始是为了通过制造一个更容易安装和运行的 Linux 来取代 Windows 的头号消费操作系统的地位。它成功了。于是微软 [威胁要起诉](https://www.theregister.com/2007/05/24/microsoft_novell_patents/) 它，因为如果你不细看的话，它看起来有点像 Windows，[所以取代失败了](https://www.theregister.com/2013/06/03/thank_microsoft_for_linux_desktop_fail/)。Ubuntu 决定，如果它不能看起来像 Windows，那么就 [让它就像 Mac OS X](https://www.theregister.com/2011/04/01/ubuntu1004_beta_review/)。然后它又 [回到了 GNOME](https://www.theregister.com/2017/04/05/ubuntu_euthanizes_unity/)。

Ubuntu 曾经是显而易见的选择，但是它把目光从“<ruby>   为人类服务  <rp>  （ </rp> <rt>  for human beings </rt> <rp>  ） </rp></ruby>”的球上移开了（解释得很好，伙计们），转而关注服务器 —— 公平地说，这是赚钱的地方 —— 并且确实赚到了。当它放弃了所有内部的东西时，它保留了 Snap，这是它的通用应用程序打包格式，其他发行版都不用。这东西能用，但会占用磁盘空间，并使开机速度变慢。如果你只是想继续使用它，而不是摆弄和与之战斗，可以试试 Ubuntu MATE 或 Xubuntu，但这时你再想想我们对小众发行版的警告。

>
> 玩笑归玩笑，“Ubuntu” 是<ruby> 恩古尼 <rp>  （ </rp> <rt>  Nguni </rt> <rp>  ） </rp></ruby>语（<ruby> 恩德贝莱语 <rp>  （ </rp> <rt>  Ndebele </rt> <rp>  ） </rp></ruby>、<ruby> 科萨语 <rp>  （ </rp> <rt>  Xhosa </rt> <rp>  ） </rp></ruby>、<ruby> 祖鲁语 <rp>  （ </rp> <rt>  Zulu </rt> <rp>  ） </rp></ruby>）的一个词，在南部非洲是一个更广泛的哲学概念，与社区中的尊重、仁慈和慷慨有关。其理念是，只有通过与他人进行亲社会互动，你才是一个人类。“umuntu ngumuntu ngabantu” —— “我是，因为你是”。
>
>
>

### 3. Linux Mint

Mint 是一个微调版的 Ubuntu 翻版。多年来它一直是个卢瑟，但是当 Ubuntu 变得像 Mac 一样时，它看到了机会并抓住了它 —— 同时也够到了榜单上第一的位置。它摒弃了 Ubuntu 中一些有问题的部分，比如 GNOME 和 Snap，但却用自己的不可靠的东西取代了它们，比如不是一个、不是两个、而是三个类 Windows 桌面的混乱选择，以及对更新和升级过于谨慎的态度。

### 4. Debian

Debian 是自由发行版的鼻祖，它发明了一种自动安装依赖关系的打包工具。它让安装 Linux 比以前更容易，但却陷入了 [政治](https://www.theregister.com/2022/04/25/debian_firmware_debate/) 的 [泥潭](https://www.theregister.com/2020/09/10/debian_project_address/)。它有点像 Ubuntu，但更过时，[更难安装](https://www.theregister.com/2021/01/22/debian_free_hard_to_install/)，而且驱动程序更少。如果这听起来正是你所需要的，那就去安装它吧。

### 5. Fedora

红帽公司通过从免费发行版转而销售异常无聊的企业服务器版而赚取了数十亿美元。这让那些吃白食的人很不高兴。Fedora 是红帽公司扔给他们的骨头。它已经成熟到可以与 Ubuntu 相媲美，但没有稳定的版本。你将会每年升级两次，除非你推迟升级，躺平啥都不干，并希望跳过每一个其他版本。除非你的日常工作是试图阻止你的 RHEL 机器倒下，或者试图构建能在 RHEL 机器上运行而不倒下的代码，否则可能不值得使用它。

### 6. openSUSE

SUSE 比红帽公司整整大半岁，它是另一个昂贵的企业发行版供应商，把免费的东西丢到了墙外。它对 Fedora 的不稳定版本问题的创新解决方案是有两个不同的发行版。一个是 “Leap”，与付费的 SUSE Linux Enterprise（SLE）同步 —— 也就是说，它的发布周期慢得令人痛苦。另一个，“Tumbleweed”，有一个滚动的发布模式，这意味着每天都有可能出现令人刺激的破坏性变化。

作为补偿，它使用 Btrfs 和快照来使回滚更新变得容易 —— 但软件包管理器不知道快照，也不了解 Btrfs 有名的无法告诉你有多少可用的磁盘空间的 [习惯](https://btrfs.wiki.kernel.org/index.php/FAQ#Help.21_Btrfs_claims_I.27m_out_of_space.2C_but_it_looks_like_I_should_have_lots_left.21)，所以它偶尔会填满你的文件系统并破坏它。沮丧的无聊或畏缩的恐怖，这是你的选择：愿你玩得开心！

SUSE 和 KDE 都产自于德国，它大约永远是 KDE 的最佳发行版。为了显示对 Linux 世界的深刻理解，Novell 收[购了 SUSE](https://www.theregister.com/2003/11/04/novell_bags_suse_for_210m/)，然后又 [收购](https://www.theregister.com/2003/08/04/novell_buys_ximian/) 了 GNOME 供应商 Ximian，然后强迫他们进行了一场 [包办婚姻](https://www.theregister.com/2004/01/07/novell_marries_suse_to_ximian/)。所以现在 SLE 甚至不提供 KDE 作为选项。

### 7. RHEL 一家

IBM 的子公司红帽仍然是 Linux 世界的巨人。特别像克洛诺斯，他吃了自己的孩子。所以它 [买下了 CentOS](https://www.theregister.com/2014/01/08/red_hat_to_team_up_with_communitybased_rhel_lookalike_centos/)，然后把它 [干掉](https://www.theregister.com/2021/01/26/killing_centos/)，就像它 [对 CoreOS 所做](https://www.theregister.com/2018/01/31/red_hat_coreos_acquisition/) 的那样。

让我们随便混用一下古典典故，这导致了一个九头蛇的局面：又有许多脑袋冒了出来。如果 Fedora 是 RHEL 的一个 alpha 版本，那么 CentOS Stream 就是一种 beta 版本。

还有 Rocky Linux 和 AlmaLinux，它们是锉掉了序列号的 RHEL。如果你以后要在 RHEL 上部署东西，或者如果你正在为在红帽商店工作而提高技能，或者如果你只是买不起真货，这都是理想的选择。如果你觉得现在 Oracle 比红帽更值得信赖，那么还有 Oracle 的版本。

对于你自己的笔记本电脑来说，这些都是长期以来有点落后于时代的东西：如果你是一个大企业，这正是你想要的，但如果你在家里运行它，就不是了。

### 8. Pop!\_OS

Pop!\_OS 可以说是最有趣的 Ubuntu 翻版之一。说到这里，请记住那句关于生活在 [有趣的时代](https://quoteinvestigator.com/2015/12/18/live/) 的名言，而开源世界的座右铭是 [快速行动和打破常规](https://www.theregister.com/2017/11/28/break_up_google_and_facebook_if_you_want_tech_innovation_ever_again/)。如果你一定要这么做，那就把它放在一台全新的电脑上，不要尝试双启动。另外，请记住我们对小众发行版说的话，这也适用于所有的 Ubuntu 翻版。

### 9. Arch Linux

最后，我们来到了名单上的第 10 个条目，因为 Unix 人要的就是不同，喜欢从零开始计算。作为最初的滚动发布的发行版之一，Arch 是快速行动和打破常规的体现。如果你是一个业余爱好者或游戏玩家，那就太好了，如果你有工作要做，那就不太好了。这也适用于它的后代，如 EndeavourOS、Manjaro 和 Garuda。

### 结论

有很多值得一试的发行版没有进入我们讽刺而（实则）深情的名单。这是列入前十名的原因：这个名单上的所有发行版都是目前领先的 Linux 发行版，这里的每一个都以自己的方式成为一个很好的、可靠的竞争者。

自由软件的世界之所以存在，是因为人们对正确的做事方式有强烈的感受，因此，它既有强烈的社区意识，也有深刻的、根本上对立的派别，如<ruby> 蝶变党 <rp>  （ </rp> <rt>  Debianistas </rt> <rp>  ） </rp></ruby>与<ruby> 帽子客 <rp>  （ </rp> <rt>  Hatters </rt> <rp>  ） </rp></ruby>的对立。而这还没有涉及到桌面或编辑器的战争。

还有很多其他的发行版也有完全合理的存在理由，比如我们的办公桌面就主要运行一个根本不在这个名单上的 [发行版](https://www.theregister.com/2022/04/26/ubuntu_unity_and_ubuntu_cinnamon/)。

都挺好，真的。

---

via: <https://www.theregister.com/2022/05/31/the_cynics_guide_to_linux/>

作者：[Liam Proven in Prague](https://www.theregister.com/Author/Liam-Proven "Read more by this author") 选题：[wxy](https://github.com/wxy) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](/article-14675-1.html) 荣誉推出


使用 Linux 上的开源财务工具 Skrooge 管理你的预算

Summary: 使用开源预算工具 Skrooge 让你的财务管理更加轻松。

使用开源预算工具 Skrooge 让你的财务管理更加轻松。

# 使用 Linux 上的开源财务工具 Skrooge 管理你的预算

>
> 使用开源预算工具 Skrooge 让你的财务管理更加轻松。
>
>
>

2021 年，人们喜欢 Linux 的理由比以往任何时候都多。在本系列中，我将分享使用 Linux 的 21 个不同理由。本篇介绍的是个人财务管理。

个人财务可能很难管理。当你没有足够的钱在没有经济援助的情况下度日时，这可能是令人沮丧甚至不安的，而当你确实有所需的钱却又不清楚每个月的去向时，这可能会令人惊讶地难以接受。更糟糕的是，我们经常被告知要“制定预算”，好像宣布你每个月的花销就能在某种程度上体现出你需要多少钱。底线是：制定预算是困难的，没有达到你的财务目标是令人沮丧的。但这仍然很重要，Linux 有几个工具可以帮助使任务变得可管理。

### 理财

就像生活中的其他事情一样，我们都有自己的方法来跟踪我们的财务。我过去常常采取一种简单而直接的方法：我的薪水支票被存入一个账户，然后我会提取一定比例的现金。一旦我钱包里的钱没了，我就得等到下一个发薪日才能花钱。我用了一天没有午餐的时间，就明白了我必须认真对待我的目标，并相应地调整了我的消费行为。对于当时我的简单的生活方式来说，这是一种让我对自己的收入保持诚实的有效手段，但它并不能很好地转化为在线商业交易、长期公用事业合同、投资等等。

随着我不断完善我的财务跟踪方式，我了解到个人会计始终是一个不断发展的过程。我们每个人都有独特的财务状况，这告诉我们可以或应该使用什么样的解决方案来跟踪我们的收入和债务。如果你失业了，那么你的预算目标可能是尽可能少花钱。如果你在工作，但在还学生贷款，那么你的目标可能是向银行汇款。如果你在工作，但计划退休，那么你可能会尽可能多地存钱。

关于预算，要记住的一点是，它是为了将你的财务现实与你的财务 *目标* 进行比较。你无法避免一些开支，但在这些之后，你可以设定自己的优先事项。如果你没有达到你的目标，你可以调整自己的行为或改写你的目标，使其更好地反映现实。调整你的财务计划并不意味着你失败了，这只是意味着你最初的预测并不准确。在困难时期，你可能无法达到任何预算目标，但如果你坚持你的预算，你会学到很多关于维持你目前的生活方式（无论它是什么）所需要的财务手段。随着时间的推移，你可以学习调整你可能从未意识到的变化。例如，由于远程工作已成为一种被广泛接受的选择，人们正在搬到农村城镇以降低生活成本。看到这样一种生活方式的转变可以改变你的预算报告，真是令人震惊。

重点是，预算编制是一项经常被低估的活动，这在很大程度上是因为它令人生畏。重要的是要认识到，无论你的专业水平或对财务的兴趣如何，你都可以进行预算。无论你 [只使用 LibreOffice 电子表格](https://opensource.com/article/20/3/libreoffice-templates)，还是尝试专用的财务应用程序，你都可以设定目标，跟踪自己的行为，并学到许多宝贵的经验教训，这些经验教训最终可能会带来回报。

### 开源会计

有几个专用于 [Linux 的个人理财应用程序](https://opensource.com/life/17/10/personal-finance-tools-linux)，包括 [HomeBank](http://homebank.free.fr/en/index.php)、[Money Manager EX](https://www.moneymanagerex.org/download)、[GNUCash](https://opensource.com/article/20/2/gnucash)、[KMyMoney](https://kmymoney.org/download.html) 和 [Skrooge](https://apps.kde.org/en/skrooge)。所有这些应用程序本质上都是账本，你可以在每个月底（或每当你查看帐户时）退回到一个地方，从你的银行导入数据，并审查你的支出如何与你为自己设定的预算保持一致。

我使用 Skrooge 作为我的个人预算跟踪器。即便面对多个银行账户，它也能轻松自如的设置。与大多数开源金融应用程序一样，Skrooge 可以导入多种文件格式，因此我的工作流程大致如下：

1. 登录我的银行。
2. 将当月的银行对账单导出为 QIF 文件。
3. 打开 Skrooge。
4. 导入 QIF 文件。每个文件都会自动分配到相应的帐户。
5. 对照我为自己设定的预算目标审查我的支出。如果我超支了，那么我就会扣减下个月的目标（这样我就会理性地少花钱来弥补差额）。如果我尚未超出我的目标预算，那么我会把多余的部分移到 12 月的预算中（这样我在年底就会有更多的支出份额）。

我只跟踪了 Skrooge 中的家庭预算的一部分。Skrooge 通过一个动态数据库简化了这一过程，该数据库允许我使用自定义标签一次对多个交易进行分类。这使我可以轻松地从一般家庭和公用事业支出中提取我的个人支出，并且我可以在查看 Skrooge 提供的自动生成的报告时利用这些类别。

最重要的是，流行的 Linux 财务应用程序使我能够以最适合我的方式管理我的预算。例如，我的合作伙伴更喜欢使用 LibreOffice 电子表格，但我只需要付出很少的努力就可以从家庭预算中提取 CSV 文件，将其导入到 Skrooge，并使用一组更新的数据集。不存在供应商锁定和不兼容。该系统灵活敏捷，使我们能够在更多地了解有效预算和生活中的情况时调整我们的预算和跟踪支出的方法。

### 开放选择

世界各地的货币市场各不相同，我们每个人与之互动的方式也决定了我们可以使用哪些工具。归根结底，你对财务类软件的选择必须基于自己的需求。开源做得特别好的一件事是为用户提供了选择的自由。

在设定自己的财务目标时，我很欣赏我可以使用最适合我个人计算风格的任何应用程序。我可以控制我在生活中如何处理数据，即使是我不一定喜欢处理的数据。Linux 及其令人惊叹的应用程序集使它不再是一件苦差事。

在 Linux 上尝试一些财务应用程序，看看你是否可以激励自己设定一些目标并节省开支吧！

---

via: <https://opensource.com/article/21/2/linux-skrooge>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[hanszhao80](https://github.com/hanszhao80) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #659 AI 机器船“五月花”号航行五周后到达了北美

Summary: • AI 机器船“五月花”号航行五周后到达了北美 • 谷歌研究在 Chromium 上安全使用 C++ • 让区块链管理能源使其不再浪费能源

为什么不抛弃高考，用别的方式选拔人才？<br />
因为这是已知的最好的方式。POW也是。如果换了别的方式，有人就可以耍流氓。

# 硬核观察 #659 AI 机器船“五月花”号航行五周后到达了北美

### AI 机器船“五月花”号航行五周后到达了北美

一艘曾试图追溯 1620 年“五月花”号海上航行的无人驾驶的机器船，在五周之后，从英国到达了美国马萨诸塞州的普利茅斯岩。IBM 负责该项目的的一位主管说，“构成自主系统的技术工作得非常完美，毫无瑕疵”，但是“在机械上，我们确实遇到了问题”。这并不是它的第一次航行，去年它曾经因为故障而折返，而今年的航程也出现过一些故障，不过，好歹是到达了目的地。

>
> **[消息来源：apnews](https://apnews.com/article/technology-north-america-atlantic-ocean-robotics-36357894ef5b4a346346a2d53a6f4cf3)**
>
>
>

>
> 老王点评：AI 在帮助自动驾驶机器了解其周围环境和自我驾驶方面越来越好，但当硬件出现问题时，大多数机器人没办法自己解决。不过，我在想，如果有一天他们连硬件故障也能解决的话……
>
>
>

### 谷歌研究在 Chromium 上安全使用 C++

谷歌 Chrome 安全团队在最近的一篇博文中说，“C++ 允许编写高性能的应用程序，但这是有代价的，安全……”。虽然如此，他们讨论了使用堆扫描技术来提高 C++ 的内存安全的历程，并提出了一些思路，基本的想法是把明确释放的内存放入隔离区，只有在达到一定的安全条件时才让它可用。在微软改用基于 Chromium 的浏览器之前，也曾在其浏览器中推出了这种缓解措施的版本。

>
> **[消息来源：谷歌](https://security.googleblog.com/2022/05/retrofitting-temporal-memory-safety-on-c.html)**
>
>
>

>
> 老王点评：我倒是觉得，这或许给浏览器漏洞又打开了一道大门，为什么不用内存安全的语言呢。
>
>
>

### 让区块链管理能源使其不再浪费能源

区块链技术最被人诟病地方之一是其能源浪费，大多数区块链需要计算机反复进行无意义的计算。明显的解决方案是将区块链建立在有用的计算之上，该解决方案必须难以计算，但容易验证。本周发布的一篇论文提供了一种选择。优化问题在计算方面是出了名的昂贵，但解决方案的质量相对容易评估。这里被优化的系统是小型电网，在能源分配中存在需要优化的地方：供应与需求相匹配，找出最经济的发电源组合。随着能源市场逐渐分散化，管理复杂性也在相应增加，而小型子电网可以通过区块链的计算优化进行自我管理。

>
> **[消息来源：Arstechnica](https://arstechnica.com/science/2022/06/making-blockchain-stop-wasting-energy-by-getting-it-to-manage-energy/)**
>
>
>

>
> 老王点评：这倒是一个有趣而值得探索的道路，不但可以部分解决能源浪费问题，而且有助于利用区块链的其它去中心化特性。
>
>
>


# Linux Mint 接管 Timeshift 备份工具的开发，并作为一款 XApp 来维护

>
> Linux Mint 接管了 Timeshift 备份/恢复工具的开发。你可以在它新的 GitHub 仓库中找到它。
>
>
>

Timeshift 可以说是 [备份和恢复 Linux 系统的最佳工具](https://itsfoss.com/backup-restore-linux-timeshift/)。

Linux Mint 也利用它帮助用户在系统更新时更方便地创建快照，确保快捷无碍的操作。

当然，这不是 [Linux Mint 可能比 Ubuntu 更好的唯一原因](https://itsfoss.com/linux-mint-vs-ubuntu/)。

不幸的是，Timeshift 背后的开发者（[Tony George](https://teejeetech.com/)）计划把注意力集中在其他项目上，将不再继续维护这个项目。

Linux Mint 团队联系了这位开发者，并愿意为这个项目提供任何可能的帮助。最终，它们接管了 Timeshift 的开发。

所以，现在 Linux Mint 团队会对 Timeshift 的发布和修复，以及任何与之相关的开发工作负责。

### 将 Timeshift 调整成 XApp

Linux Mint 倾向于将某些应用作为“XApp”来维护，以确保它们能在各种不同的桌面环境下工作，不会依赖于某个特殊的桌面。

考虑到他们计划将 Timeshift 调整成一个XApp，你可以期待该工具在很长一段时间内维持当前的外观和功能，而不用顾虑你的桌面环境是什么。

不像一些 GNOME 应用程序，为了获得最好的体验，它们通常会变成 GNOME 专用的应用程序。

Timeshift 是一个必不可少的备份/恢复工具。所以，Linux Mint 接管 Timeshift 的开发并作为一个 XApp 来维护的计划听上去相当完美！

如果你想知道的话，那不妨告诉你，Timeshift 的迁移已经在 [Launchpad](https://github.com/linuxmint/timeshift) 上完成了。

新的 [GitHub仓库](https://github.com/linuxmint/timeshift)（由 Linux Mint 复刻的）可以给你提供这个应用的更多细节以及它最近的开发活动。

你也可以在 [最近每月发布的博文](https://blog.linuxmint.com/?p=4323) 中查阅官方对此的声明。

### 结语

作为 Timeshift 的维护者，Linux Mint 希望在不久的将来带来更多的新特性和改进。

你如何看待 Linux Mint 将 Timeshift 接管为一款 XApp？欢迎在下方的评论区内分享你的想法。

---

via: <https://news.itsfoss.com/linux-mint-timeshift/>

作者：[Ankush Das](https://news.itsfoss.com/author/ankush/) 选题：[lkxed](https://github.com/lkxed) 译者：[hadisi1993](https://github.com/%E8%AF%91%E8%80%85ID) 校对：[校对者ID](https://github.com/%E6%A0%A1%E5%AF%B9%E8%80%85ID)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Simula 诞生之前的面向对象程序设计

# Simula 诞生之前的面向对象程序设计

想象一下，你坐在河边，河岸上如茵绿草，不远处湍急河流；午后的阳光慵懒惬意，使人陷入冥想哲思，不觉开始思考眼前的河流是否真实存在。诚然，几米外确实有河水奔流而下。不过，我们所称为“河流”的存在究竟是什么呢？毕竟，河水奔流不息，一直处于变化之中。似乎，“河流”这个词无法指代任何固定不变的事物。

2009 年，Clojure 的创始人 <ruby> 里奇·希基 <rt>  Rich Hickey </rt></ruby> 发表了 [一场精彩的演讲](https://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey)，探讨了为什么上文那样的哲学窘境会给面向对象程序的编程范式带来难题。他认为，人们看待计算机程序中的对象与看待河流的逻辑是一样的：我们想象对象是固定不变的，即使对象的许多或者说全部的属性都无时无刻不处于变化之中。所以，这种逻辑并不正确，我们无法区分在不同状态下同一对象实例的不同之处。程序中没有明确的时间的概念。人们只是单纯地用着同一个名字，以期在引用对象时，对象能够处于预期的状态中。这样，我们也就难免会遇到 <ruby> 故障 <rt>  bug </rt></ruby>。

希基总结道，这一难题的应对办法就是人们应该将世界建模成作用于不可变数据的 <ruby> 进程 <rt>  process </rt></ruby> 的集合，而不是可变的对象的集合。换句话说，我们应把每个对象看作一条“河流”，因果相连。总结说来，你应该使用 Clojure 等函数式语言。

*作者在远足途中思考面向对象程序设计的本体论问题。*

自从希基发表演讲之后，人们对函数式编程语言的兴趣不断提升，主流的面向对象编程语言也大多都采用了函数式编程语言。尽管如此，大多数程序员依旧沿用自己的老一套，继续将对象实例化，不断改变其状态。这些人长此以往，很难做到用不同的视角看待编程。

我曾经想写一篇关于 Simula 的文章，大概会写到我们今天所熟知的面向对象的理念是何时又是如何应用到程序语言之中的。但是，我觉得写当初的 Simula 与如今的面向对象程序设计的 *迥然不同之处*，会更有趣一些，这我敢打包票。毕竟，我们现在熟知的面向对象程序设计还未完全成型。Simula 有两个主要版本：Simula I 和 Simula 67。Simula 67 为世界带来了 <ruby> 类 <rt>  class </rt></ruby>、 <ruby> 类的继承 <rt>  class hierarchy </rt></ruby> 以及 <ruby> 虚拟方法 <rt>  virtual method </rt></ruby>；但 Simula I 是一个初稿，它实验了如何能够将数据和进程捆绑起来的其他设想。Simula I 的模型不是希基提出的函数式模型，不过这一模型关注的是随时间展开的 *进程*，而非有着隐藏状态的对象之间的相互作用。如果 Simula 67 采用了 Simula I 的理念，那么我们如今所知的面向对象程序设计可能会大有不同——这类偶然性启示我们，不要想着现在的程序设计范式会一直占据主导地位。

### 从 Simula 0 到 Simula 67

Simula 是由两位挪威人 <ruby> 克里斯汀·尼加德 <rt>  Kristen Nygaard </rt></ruby> 和 <ruby> 奥利-约翰·达尔 <rt>  Ole-Johan Dahl </rt></ruby> 创建的。

20 世纪 50 年代末，尼加德受雇于 <ruby> 挪威防务科学研究中心 <rt>  Norwegian Defense Research Establishment </rt></ruby>（NDRE），该研究中心隶属于挪威军方。在那里，他负责设计 <ruby> 蒙特卡洛模拟方法 <rt>  Monte Carlo simulations </rt></ruby>，用于核反应堆设计与操作研究。最初，那些模拟实验是由人工完成的；后来，实验在 Ferranti Mercury 电脑    [1]  上编入程序运行。尼加德随后发现，将这些模拟实验输入电脑需要一种更有效的方式。

尼加德设计的这种模拟实验就是人们所知的“<ruby> 离散事件模型 <rt>  discrete event model </rt></ruby>”，这种模拟记录了一系列事件随着时间改变系统状态的进程。但是问题的关键在于模拟可以从一个事件跳跃到另一个事件中，因为事件是离散的，事件之间的系统不存在任何变化。根据尼加德和达尔在 1966 年发表的一篇关于 Simula 的论文，这种模型被迅速应用于“神经网络、通信系统、交通流量、生产系统、管理系统、社会系统等”    [2]  领域的分析。因此，尼加德认为，其他人描述模拟实验时，可能也需要更高层级的模型。于是他开始物色人才，帮助他完成他称之为“<ruby> 模拟语言 <rt>  Simulation Language </rt></ruby>”或者“<ruby> 蒙特卡洛编译器 <rt>  Monte Carlo Compiler </rt></ruby>”的项目    [3] 。

达尔当时也受雇于挪威防务科学研究中心，专攻语言设计，此时也加入了尼加德的项目，扮演“沃兹尼亚克”的角色（LCTT 译注：指苹果公司联合创始人斯蒂夫·盖瑞·沃兹尼亚克）。在接下来一年左右的时间，尼加德和达尔携手开发了 Simula 0 语言。   [4]  这一语言的早期版本仅仅是在 ALGOL 60 基础上进行的较小拓展，当时也只是打算将其用作预处理程序而已。当时的语言要比后来的编程语言抽象得多，其基本语言结构是“<ruby> 车站 <rt>  stations </rt></ruby>”与“<ruby> 乘客 <rt>  customers </rt></ruby>”，这些结构可以用于针对具体某些离散事件网络建立模型。尼加德和达尔给出了一个模拟飞机离港的例子。   [5]  但是尼加德和达尔最后想出了一个更加通用的语言结构，可以同时表示“车站”和“乘客”，也可以为更广泛的模拟建立模型。这是两个主要的概括，它改变了 Simula 作为 ALGOL 专属包的定位，使其转变为通用编程语言。

Simula I 没有“<ruby> 车站 <rt>  stations </rt></ruby>”和“<ruby> 乘客 <rt>  customers </rt></ruby>”的语言结构，但它可以通过使用“<ruby> 进程 <rt>  process </rt></ruby>”再现这些结构。（LCTT 译注：此处使用的“进程”，与当前计算机中用来指代一个已执行程序的实体的概念不同，大致上，你可以将本文中所说的“进程”理解为一种“对象”。）一个进程包含大量数据属性，这些属性与作为进程的 *操作规程* 的单个行为相联系。你可能会把进程当作是只有单个方法的对象，比如 `run()` 之类的。不过，这种类比并不全面，因为每个进程的操作规程都可以随时暂停、随时恢复，因为这种操作规程属于 <ruby> 协程 <rt>  coroutine </rt></ruby> 的一种。Simula I 程序会将系统建立为一套进程的模型，在概念上这些进程并行运行。实际上，一个时间点上能称为“当前进程”的只有一个进程。但是，一旦某个进程暂停运行，那么下一个进程就会自动接替它的位置。随着模拟的运行，Simula 会保持一个 “<ruby> 事件通知 <rt>  event notices </rt></ruby>” 的时间线，跟踪记录每个进程恢复的时间。为了恢复暂停运行的进程，Simula 需要记录多个 <ruby> 调用栈 <rt>  call stacks </rt></ruby> 的情况。这就意味着 Simula 无法再作为 ALGOL 的预处理程序了，因为 ALGOL 只有一个 <ruby> 调用栈 <rt>  call stacks </rt></ruby>。于是，尼加德和达尔下定决心，开始编写自己的编译器。

尼加德和达尔在介绍该系统的论文中，借助图示，通过模拟一个可用机器数量有限的工厂，阐明了其用法。   [6]  在该案例中，进程就好比订单：通过寻找可用的机器，订单得以发出；如果没有可用的机器，订单就会搁置；而一旦有机器空出来，订单就会执行下去。有一个订单进程的定义，用来实例化若干种不同的订单实例，不过这些实例并未调用任何方法。该程序的主体仅仅是创建进程，并使其运行。

历史上第一个 Simula I 编译器发布于 1965 年。尼加德和达尔在离开挪威防务科学研究中心之后，就进入了 <ruby> 挪威计算机中心 <rt>  Norwegian Computer Center </rt></ruby> 工作，Simula I 也是在这里日渐流行起来的。当时，Simula I 在 UNIVAC 公司的计算机和 Burroughs 公司的 B5500 计算机上均可执行。   [7]  尼加德和达尔两人与一家名为 ASEA 的瑞典公司达成了咨询协议，运用 Simula 模拟加工车间。但是，尼加德和达尔随后就意识到 Simula 也可以写一些和模拟完全不搭边的程序。

<ruby> 奥斯陆大学 <rt>  University of Oslo </rt></ruby>教授 <ruby> 斯坦因·克罗达尔 <rt>  Stein Krogdahl </rt></ruby> 曾写过关于 Simula 的发展史，称“真正能够促使新开发的通用语言快速发展的催化剂”就是 [一篇题为<ruby> 《记录处理》 <rt>  Record Handling </rt></ruby>的论文](https://archive.computerhistory.org/resources/text/algol/ACM_Algol_bulletin/1061032/p39-hoare.pdf)，作者是英国计算机科学家 <ruby> 查尔斯·安东尼·理查德·霍尔 <rt>  C.A.R. Hoare </rt></ruby>。   [8]  假如你现在读霍尔的这篇论文，你就不会怀疑这句话。当人们谈及面向对象语言的发展史时，一定会经常提起霍尔的大名。以下内容摘自霍尔的《记录处理》一文：

>
> 该方案设想，在程序执行期间，计算机内部存在任意数量的记录，每条记录都代表着程序员在过去、现在或未来所需的某个对象。程序对现有记录的数量保持动态控制，并可以根据当前任务的要求创建新的记录或删除现有记录。
>
>
> 计算机中的每条记录都必须属于数量有限但互不重合的记录类型中的一类；程序员可以根据需要声明尽可能多的记录类型，并借助标识符为各个类型命名。记录类型的命名可能是普通词汇，比如“牛”、“桌子”以及“房子”，同时，归属于这些类型的记录分别代表一头“牛”、一张“桌子”以及一座“房子”。
>
>
>

霍尔在这片论文中并未提到子类的概念，但是达尔由衷地感谢霍尔，是他引导了两人发现了这一概念。   [9]  尼加德和达尔注意到 Simula I 的进程通常具有相同的元素，所以引入父类来执行共同元素就会非常方便。这也强化了“进程”这一概念本身可以用作父类的可能性，也就是说，并非每种类型都必须用作只有单个操作规程的进程。这就是 Simula 语言迈向通用化的第二次飞跃，此时，Simula 67 真正成为了通用编程语言。正是如此变化让尼加德和达尔短暂地萌生了给 Simula 改名的想法，想让人们意识到 Simula 不仅仅可以用作模拟。   [10]  不过，考虑到 “Simula”这个名字的知名度已经很高了，另取名字恐怕会带来不小的麻烦。

1967 年，尼加德和达尔与 <ruby> 控制数据公司 <rt>  Control Data </rt></ruby> 签署协议，着手开发Simula 的新版本：Simula 67。同年六月份的一场会议中，来自控制数据公司、奥斯陆大学以及挪威计算机中心的代表与尼加德和达尔两人会面，意在为这门新语言制定标准与规范。最终，会议发布了 [《Simula 67 通用基础语言》](http://web.eah-jena.de/~kleine/history/languages/Simula-CommonBaseLanguage.pdf)，确定了该语言的发展方向。

Simula 67 编译器的开发由若干家供应商负责。<ruby> Simula 用户协会 <rt>  The Association of Simula Users </rt></ruby>（ASU）也随后成立，并于每年举办年会。不久，Simula 67 的用户就遍及了 23 个国家。   [11]

### 21 世纪的 Simula 语言

人们至今还记得 Simula，是因为后来那些取代它的编程语言都受到了它的巨大影响。到了今天，你很难找到还在使用 Simula 写程序的人，但是这并不意味着 Simula 已经从这个世界上消失了。得益于 [GNU cim](https://www.gnu.org/software/cim/)，人们在今天依然能够编写和运行 Simula 程序。

cim 编译器遵循 1986 年修订后的 Simula 标准，基本上也就是 Simula 67 版本。你可以用它编写类、子类以及虚拟方法，就像是在使用 Simula 67 一样。所以，用 Python 或 Ruby 轻松写出短短几行面向对象的程序，你照样也可以用 cim 写出来：

```
! dogs.sim ;
Begin
    Class Dog;
        ! The cim compiler requires virtual procedures to be fully specified ;
        Virtual: Procedure bark Is Procedure bark;;
    Begin
        Procedure bark;
        Begin
            OutText("Woof!");
            OutImage;           ! Outputs a newline ;
        End;
    End;

    Dog Class Chihuahua;        ! Chihuahua is "prefixed" by Dog ;
    Begin
        Procedure bark;
        Begin
            OutText("Yap yap yap yap yap yap");
            OutImage;
        End;
    End;

    Ref (Dog) d;
    d :- new Chihuahua;         ! :- is the reference assignment operator ;
    d.bark;
End;

```

你可以按照下面代码执行程序的编译与运行：

```
$ cim dogs.sim
Compiling dogs.sim:
gcc -g -O2 -c dogs.c
gcc -g -O2 -o dogs dogs.o -L/usr/local/lib -lcim
$ ./dogs
Yap yap yap yap yap yap

```

（你可能会注意到，cim 先将 Simula 语言编译为 C 语言，然后传递给 C 语言编译器。）

这就是 1967 年的面向对象程序设计，除了语法方面的不同，和 2019 年的面向对象程序设计并无本质区别。如果你同意我的这一观点，你也就懂得了为什么人们会认为 Simula 在历史上是那么的重要。

不过，我更想介绍一下 Simula I 的核心概念——进程模型。Simula 67 保留了进程模型，不过只有在使用 `Process` 类 和 `Simulation` 块的时候才能调用。

为了表现出进程是如何运行的，我决定模拟下述场景。想象一下，有这么一座住满了村民的村庄，村庄的旁边有条小河边，小河里有很多的鱼。但是，村里的村民却只有一条鱼竿。村民们胃口很大，每隔一个小时就饿了。他们一饿，就会拿着鱼竿去钓鱼。如果一位村民正在等鱼竿，另一位村民自然也用不了。这样一来，村民们就会为了钓鱼排起长长的队伍。假如村民要等五、六分钟才能钓到一条鱼，那么这样等下去，村民们的身体状况就会变得越来越差。再假如，一位村民已经到了骨瘦如柴的地步，最后他可能就会饿死。

这个例子多少有些奇怪，虽然我也不说不出来为什么我脑袋里最先想到的是这样的故事，但是就这样吧。我们把村民们当作 Simula 的各个进程，观察在有着四个村民的村庄里，一天的模拟时间内会发生什么。

完整程序可以通过此处 [GitHub Gist](https://gist.github.com/sinclairtarget/6364cd521010d28ee24dd41ab3d61a96) 的链接获取。

我把输出结果的最后几行放在了下面。我们来看看一天里最后几个小时发生了什么：

```
1299.45: 王五饿了，要了鱼竿。
1299.45: 王五正在钓鱼。
1311.39: 王五钓到了一条鱼。
1328.96: 赵六饿了，要了鱼竿。
1328.96: 赵六正在钓鱼。
1331.25: 李四饿了，要了鱼竿。
1340.44: 赵六钓到了一条鱼。
1340.44: 李四饿着肚子等着鱼竿。
1340.44: 李四在等鱼竿的时候饿死了。
1369.21: 王五饿了，要了鱼竿。
1369.21: 王五正在钓鱼。
1379.33: 王五钓到了一条鱼。
1409.59: 赵六饿了，要了鱼竿。
1409.59: 赵六正在钓鱼。
1419.98: 赵六钓到了一条鱼。
1427.53: 王五饿了，要了鱼竿。
1427.53: 王五正在钓鱼。
1437.52: 王五钓到了一条鱼。

```

可怜的李四最后饿死了，但是他比张三要长寿，因为张三还没到上午 7 点就饿死了。赵六和王五现在一定过得很好，因为需要鱼竿的就只剩下他们两个了。

这里，我要说明，这个程序最重要的部分只是创建了进程（四个村民），并让它们运行下去。各个进程操作对象（鱼竿）的方式与我们今天对对象的操作方式相同。但是程序的主体部分并没有调用任何方法，也没有修改进程的任何属性。进程本身具有内部状态，但是这种内部状态的改变只有进程自身才能做到。

在这个程序中，仍然有一些字段发生了变化，这类程序设计无法直接解决纯函数式编程所能解决的问题。但是正如克罗达尔所注意到的那样，“这一机制引导进行模拟的程序员为底层系统建立模型，生成一系列进程，每个进程表示了系统内的自然事件顺序。”   [12]  我们不是主要从名词或行动者（对其他对象做事的对象）的角度来思考正在进行的进程。我们可以将程序的总控制权交予 Simula 的事件通知系统，克罗达尔称其为 “<ruby> 时间管理器 <rt>  time manager </rt></ruby>”。因此，尽管我们仍然在适当地改变进程，但是没有任何进程可以假设其他进程的状态。每个进程只能间接地与其他进程进行交互。

这种模式如何用以编写编译器、HTTP 服务器以及其他内容，尚且无法确定。（另外，如果你在 Unity 游戏引擎上编写过游戏，就会发现两者十分相似。）我也承认，尽管我们有了“时间管理器”，但这可能并不完全是希基的意思，他说我们在程序中需要一个明确的时间概念。（我认为，希基想要的类似于 [<ruby> 阿达·洛芙莱斯 <rt>  Ada Lovelace </rt></ruby> 用于区分一个变量随时间变化产生的不同数值的上标符号](https://twobithistory.org/2018/08/18/ada-lovelace-note-g.html)。）尽管如此，我们可以发现，面向对象程序设计前期的设计方式与我们今天所习惯的面向对象程序设计并非完全一致，我觉得这一点很有意思。我们可能会理所当然地认为，面向对象程序设计的方式千篇一律，即程序就是对事件的一长串记录：某个对象以特定顺序对其他对象产生作用。Simula I 的进程系统表明，面向对象程序设计的方式不止一种。仔细想一下，函数式语言或许是更好的设计方式，但是 Simula I 的发展告诉我们，现代面向对象程序设计被取代也很正常。

*如果你喜欢这篇文章，欢迎关注推特 [@TwoBitHistory](https://twitter.com/TwoBitHistory)，也可通过 [RSS feed](https://twobithistory.org/feed.xml) 订阅，获取最新文章（每四周更新一篇）。*

---

1. Jan Rune Holmevik, “The History of Simula,” accessed January 31, 2019, <http://campus.hesge.ch/daehne/2004-2005/langages/simula.htm>. [↩](#fnref1)
2. Ole-Johan Dahl and Kristen Nygaard, “SIMULA—An ALGOL-Based Simulation Langauge,” Communications of the ACM 9, no. 9 (September 1966): 671, accessed January 31, 2019, <http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.95.384&rep=rep1&type=pdf>. [↩](#fnref2)
3. Stein Krogdahl, “The Birth of Simula,” 2, accessed January 31, 2019, <http://heim.ifi.uio.no/~steinkr/papers/HiNC1-webversion-simula.pdf>. [↩](#fnref3)
4. 出处同上。 [↩](#fnref4)
5. Ole-Johan Dahl and Kristen Nygaard, “The Development of the Simula Languages,” ACM SIGPLAN Notices 13, no. 8 (August 1978): 248, accessed January 31, 2019, <https://hannemyr.com/cache/knojd_acm78.pdf>. [↩](#fnref5)
6. Dahl and Nygaard (1966), 676. [↩](#fnref6)
7. Dahl and Nygaard (1978), 257. [↩](#fnref7)
8. Krogdahl, 3. [↩](#fnref8)
9. Ole-Johan Dahl, “The Birth of Object-Orientation: The Simula Languages,” 3, accessed January 31, 2019, <http://www.olejohandahl.info/old/birth-of-oo.pdf>. [↩](#fnref9)
10. Dahl and Nygaard (1978), 265. [↩](#fnref10)
11. Holmevik. [↩](#fnref11)
12. Krogdahl, 4. [↩](#fnref12)

---

via: <https://twobithistory.org/2019/01/31/simula.html>

作者：[Two-Bit History](https://twobithistory.org) 选题：[lujun9972](https://github.com/lujun9972) 译者：[aREversez](https://github.com/aREversez) 校对：[校对者ID](https://github.com/%E6%A0%A1%E5%AF%B9%E8%80%85ID)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


# 如何修复 “yay: error while loading shared libraries: libalpm.so.12”

>
> 这篇快速指南是为了帮助你修复 “yay error: while loading shared libraries: libalpm.so.12” 错误。
>
>
>

如果你在系统中运行 [Arch Linux](https://archlinux.org/) 的时间比较长，那么由于其滚动发布性质以及你的硬件支持，程序可能会损坏。 如果你使用 AUR 助手 Yay，那么有时，由于其他软件包的多次安装升级，Yay 可能会损坏。

Yay 助手一般是非常稳定的，但有时它会被搞乱，在修复好之前，你不能使用它安装任何程序。而其中一个令人头疼的错误是这样的：

```
yay: error while loading shared libraries: libalpm.so.12: cannot open shared object file: No such file or directory

```

这个错误特别是在升级到 pacman 6.0 后出现的，因为共享库不兼容。

### 如何解决 “yay: error while loading shared libraries: libalpm.so.12”

这个错误只能通过完全卸载 `yay` 来解决，包括它的依赖。然后重新安装 `yay`。

没有其他方法来解决这个错误。

我们已经有一个 [如何安装 Yay](https://www.debugpoint.com/2021/01/install-yay-arch/) 的指南，然而，以下是修复的步骤。

从 AUR 克隆 yay 仓库并构建。在终端窗口中依次运行以下命令。

```
cd /tmp
git clone 'https://aur.archlinux.org/yay.git'
cd /tmp/yay
makepkg -si
cd ~
rm -rf /tmp/yay/

```

安装完成后，你可以尝试运行给你带来这个错误的命令。然后就好了。如果你仍然有这个错误，请在下面的评论区告诉我。

很多人都遇到了这个问题，网络上有 [几个讨论](https://github.com/Jguer/yay/issues/1519)。以上是解决这个错误的唯一办法。而且我在任何地方都找不到这个问题的确切根源，除了它是在 pacman 6.0 更新后开始的。

---

via: <https://www.debugpoint.com/2021/07/yay-error-libalpm-so-12/>

作者：[Arindam](https://www.debugpoint.com/author/admin1/) 选题：[lkxed](https://github.com/lkxed) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #660 真“人工”智能：AI 购物创业公司的 AI 由廉价工人充当

Summary: • 真“人工”智能：AI 购物创业公司的 AI 由廉价工人充当 • 英特尔探索在 Z 级超算中使用 RISC-V 架构 • Edge 浏览器的睡眠标签功能已节省 273PB 内存

# 硬核观察 #660 真“人工”智能：AI 购物创业公司的 AI 由廉价工人充当

### 真“人工”智能：AI 购物创业公司的 AI 由廉价工人充当

一家 AI 购物创业公司 Nate 宣称可以在零售商的网站上自动填写购物者的联系信息和支付信息。这可以省去客户在手机上输入一两分钟数据的麻烦，为此，Nate 向购物者收取每笔交易 1 美元的费用。据消息人士透露，实际上该公司在 2021 年促成的大部分交易都是依靠在菲律宾雇佣的工人手动在零售商网站上输入数据。有时候，订单是在客户点击购买按钮的几个小时之后，才由“人工”智能下达。

>
> **[消息来源：theInformation](https://www.theinformation.com/articles/shaky-tech-and-cash-burning-giveaways-ai-shopping-startup-shows-excesses-of-funding-boom)**
>
>
>

>
> 老王点评：除了速度慢点，这其实是名副其实的“人工”智能嘛~
>
>
>

### 英特尔探索在 Z 级超算中使用 RISC-V 架构

英特尔和巴塞罗那超算中心宣布将投资 4 亿欧元，探索在 Zettascale 级（即超过 1 zettaflops 或超过一千 exaflops）超算中使用 RISC-V 架构。联合实验室将开发基于 RISC-V 架构的处理器，用于 AI 加速器、自主驾驶汽车和高性能计算。但这并不意味着英特尔会在其首批 Zettascale 级超算中使用基于 RISC-V 的 CPU，而只是表示该公司对 RISC-V 架构技术的投资，英特尔去年宣布到 2027 年时建造首台 Zettascale 级超算。

>
> **[消息来源：TomsHardware](https://www.tomshardware.com/news/intel-to-explore-risc-v-isa-for-zettascale-supercomputers)**
>
>
>

>
> 老王点评：前两天才刚刚 E 级超算登顶，过两年就要 Z 级了？！而且是在 RISC-V 上，看来 RISC-V 很有前景啊。前段时间，我在国内 RISV-V 初创公司赛昉科技的朋友还专门送了我一块他们的 RISC-V 板子 VisionFive，我过两天拍个开箱视频给大家。
>
>
>

### Edge 浏览器的睡眠标签功能已节省 273PB 内存

微软 Edge 官方账号表示，在过去 28 天时间里，“睡眠标签”功能节省了超过 273PB（273000 TB）的内存。睡眠标签功能在超过 60 亿个标签中发挥了作用，每个标签节省了大约 40MB 的内存。睡眠标签在所有安装的 Edge 上都是默认启用的。它在闲置两小时后会自动让不活动的网页进入睡眠状态。

>
> **[消息来源：Neowin](https://www.neowin.net/news/microsoft-says-sleeping-tabs-in-edge-saved-more-than-273-petabytes-of-ram-in-28-days/)**
>
>
>

>
> 老王点评：这个功能是不错，不过没想到这个宣传可以将节省的内存加起来算，要这么算，不如 Chrome 出来说说过去一个月总计用了多少内存吧。
>
>
>


Fedora Linux 37 的内核 5.18 测试周到了，一起来做贡献吧！

Summary: 在测试周，任何人都可以为 Fedora 即将发布的版本查漏补缺

在测试周，任何人都可以为 Fedora 即将发布的版本查漏补缺

# Fedora Linux 37 的内核 5.18 测试周到了，一起来做贡献吧！

<img src="content_image/album_202206_08_091147zg252mo6bb5k5up9.jpg" alt="" title="">

Fedora 内核团队正在为 Linux 内核 5.18 进行最终集成。这个版本刚刚发布，很快就会出现在 Fedora 中。因此，Fedora 内核和 QA 团队组织了一个测试周，截止日期为 **2022 年 6 月 12 日，星期日。** 请参阅 [维基页面](http://fedoraproject.org/wiki/Test_Day:2022-06-05_Kernel_5.18_Test_Week) 来获取你将要参与的测试镜像链接。继续阅读下文，可了解更多细节～

### 测试周是如何运作的？

测试周是一个人人都可以参与的活动。在测试周，任何人都可以为 Fedora 即将发布的版本查漏补缺，确保它最终能够运行良好。Fedora 社区成员会经常参与这个活动，我们同时也欢迎公众参加这些活动。如果你以前从未做过贡献，那么这是一个绝佳的上手机会。

要想做出贡献，你只需要能够执行以下操作即可：

* 下载测试资料，包括一些大文件
* 阅读并按照说明一步一步地进行操作

内核测试日的 [维基页面](http://fedoraproject.org/wiki/Test_Day:2022-06-05_Kernel_5.18_Test_Week) 提供了很多关于测试内容和测试方法的有用信息。完成一些测试后，你可以在测试日的 [Web 应用](https://testdays.fedoraproject.org/events/136) 上记录下你的测试结果。如果你在活动的当天或前后有空，请进行一些测试并报告你的结果。不知道该怎么做？没关系，我们有一份文件，其中提供了 [所有步骤](https://docs.fedoraproject.org/en-US/quick-docs/kernel/howto-kernel-testday/)。

希望能在测试日见到你，预祝测试愉快～

---

via: <https://fedoramagazine.org/contribute-at-the-fedora-linux-37-test-week-for-kernel-5-18/>

作者：[Sumantro Mukherjee](https://fedoramagazine.org/author/sumantrom/) 选题：[lkxed](https://github.com/lkxed) 译者：[lkxed](https://github.com/lkxed) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


在商业之外，为学生们教授开源知识

Summary: Beyond 计划连接起未来科技行业的人才和开源文化。

Beyond 计划连接起未来科技行业的人才和开源文化。

# 在商业之外，为学生们教授开源知识

>
> Beyond 计划连接起未来科技行业的人才和开源文化。
>
>
>

那时，我还是一个大学生，我不明白人们为什么那么吹捧开源软件。我也使用 Linux 和开源软件，但是我不明白开源的运作模式，不知道如何参加一个开源项目，也不知道这对我未来的职业有什么好处。我的开发经验主要是家庭作业和学位需要的一个大型期末项目。

所以，当我开始踏足科技行业时，我发现我还有很多知识需要学习。我需要了解如何加入一个既定的、可能很大并且分散在不同地方的团队，为一个正在进行中的项目工作。我还要学会正确的沟通以保证我付出的努力不白费。

在这方面，我并不特别。我只是众多毕业生中的一员。

### 开源让毕业生的起点更高

作为一个工程师，一个管理者，从那时起我开始帮助刚入行的工程师。我发现，有开源经验的毕业生比没有开源经验的毕业生能更快的入门。

通过将开源方法纳入学术研究，学生们可以获得相关的行业经验，学会利用他们自己的知识，并建立一个陈述观点和分享知识的平台。参与开源项目可以对学生的技术知识和经验产生积极影响。这可以帮助他们更好的规划自己的职业生涯。

开源在科技行业的价值是公认的，它塑造了全球软件公司的文化。参与开源项目并采用 [开放组织文化](https://opensource.com/open-organization/resources/open-org-definition) 正在成为行业普遍现象。公司寻求知道如何在开源领域工作并培养其文化的思想新颖、才华横溢的员工。因此，科技行业必须推动学术界将开源文化作为学习科技研究的基本方法之一。

### 商业之上是开源文化

当我遇到红帽的高级软件工程师 [Liora Milbaum](https://www.linkedin.com/in/lioramilbaum) 时，我发现，我们对将开源文化和规则引入学术界有着共同的兴趣。Liora 之前创立了 [DevOps Loft](https://www.devopsloft.io/), 在其中，她与有兴趣进入这个行业的人们分享了 DevOps 实践，并希望发起一个类似的项目，教授大学生开源。我们决定启动 [Beyond](https://research.redhat.com/blog/2020/05/24/open-source-development-course-and-devops-methodology/) 计划，将科技行业拥抱开源精神的人才与红帽的实践联系起来。

我们在 [Tel Aviv-Yafo 技术学院](https://www.int.mta.ac.il/) 开始了 Beyond 计划，在那里，我们受到了信息系统学院的热烈欢迎。我们从介绍 DevOps 技术栈的 “DevOps 入门” 开始。我们开始时最大的挑战是怎么讲明白开源是什么。答案似乎很简单：实践出真理。我们不想给学生们讲授什么老套的学院课程，相反，我们想让学生接触到行业标准。

我们创建了一个包含常见的开源项目和工具的教学大纲来教授 DevOps 技术栈。该课程由工程师教授的讲座和实践组成。学生们被分成小组，每组都由一名工程师指导和支持。他们练习团队合作，分享知识（在团队内外），并有效的协作。

在我们为计算机科学学院的通讯准备的高级课程 “开源开发的基础” 中，我们遇到了另外的困难。当我们的课程开始两周以后，随着新冠疫情在全球的流行，我们完全靠远程沟通。我们通过与学生一起使用我们在红帽日常工作中使用的相同远程协作工具解决了这个问题。我们惊讶于过渡的是如此简单和顺利。

(Irit Goihman, [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/))

### 成果展示

这两个课程取得了巨大的成功，我们甚至雇佣了我们最优秀的学生之一。我们收到了非常棒的反馈，同学们表示，我们对他们的知识、思维和软技能产生了积极影响。一些学生因为在课程期间的开源贡献而得到了他们第一份技术工作。

其他学术机构对这些课程表达出了极大的兴趣，因此我们将这个项目扩展到了另外一所大学。

很荣幸，在一群优秀工程师的参与下，与 Liora 一起领导这个成功的项目。我们一起助力开源社区的成长。

---

via: <https://opensource.com/article/21/1/open-source-beyond-business>

作者：[Irit Goihman](https://opensource.com/users/iritgoihman) 选题：[lujun9972](https://github.com/lujun9972) 译者：[duoluoxiaosheng](https://github.com/duoluoxiaosheng) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


不同编程语言是如何完成同一件事

Summary: 通过一个简单的小游戏比较 13 种编程语言。

通过一个简单的小游戏比较 13 种编程语言。

# 不同编程语言是如何完成同一件事

>
> 通过一个简单的小游戏比较 13 种编程语言。
>
>
>

<img src="content_image/album_202206_08_113845fs81srd5s8rjryt5.jpg" alt="" title="Developing code.">

当我开始学习一种新的编程语言时，会把重点放在定义变量、书写声明以及计算表达式，一旦对这些概念有一个大致的了解，通常就能够自己弄清剩下的部分。大多数编程语言都具有相似性，所以如果你掌握了一种编程语言，学习下一种语言的重点就是弄清楚独有的概念以及区分不同。

我喜欢写一些测试程序来帮助练习新的编程语言。其中我经常写的是一个叫做“猜数字”的小游戏，计算机选出 1 到 100 里的任一数字，然后我来猜。程序循环进行，直到猜出正确数字。通过伪代码可以看出，这是个非常简单的程序：

* 计算机在 1 到 100 之间选出一个随机数字
* 循环进行直到猜出该随机数字
	+ 计算机读取我的猜测
	+ 告诉我我的猜测过高还是过低

我们发表了一些文章，用不同的语言写这个程序。这是一个比较不同语言做同样事情的有趣机会。大多数编程语言具有相似性，所以当你在学习下一种新的编程语言时，主要是学习它的独特之处。

C 语言由 Dennis Ritchie 于 1972 年在贝尔实验室创建，是一种早期的通用编程语言。C 语言非常受欢迎，并迅速成为 Unix 系统上的标准编程语言。正是因为它的流行，许多其他编程语言也采用了类似的编程语法。这就是为什么如果你已经知道如何使用 C 语言编程，学习 C++、Rust、Java、Groovy、JavaScript、awk 或 Lua 会更容易。

接下来我们看看这些不同的编程语言是如何实现 “猜数字” 游戏的主要步骤。我将把重点放在基本元素的相似或不同，跳过一些外围代码，如分配临时变量。

### 计算机在 1 到 100 之间选出一个随机数字

你可以看到这里有许多相似之处。大多数编程语言使用类似 `rand()` 的函数，你可以设定一个范围来生成随机数。而其他一些语言使用一个特殊的函数来设定范围生成随机数。

C：

```
// Using the Linux `getrandom` system call
getrandom(&randval, sizeof(int), GRND_NONBLOCK);
number = randval % maxval + 1;

// Using the standard C library
number = rand() % 100 + 1;

```

C++：

```
int number = rand() % 100+1;

```

Rust：

```
let random = rng.gen_range(1..101);

```

Java：

```
private static final int NUMBER = r.nextInt(100) + 1;

```

Groovy：

```
int randomNumber = (new Random()).nextInt(100) + 1

```

JavaScript：

```
const randomNumber = Math.floor(Math.random() * 100) + 1

```

awk：

```
randomNumber = int(rand() * 100) + 1

```

Lua：

```
number = math.random(1,100)

```

### 循环进行直到我猜出该随机数字

循环通常是用控制流程来实现的，如 `while` 或 `do-while`。JavaScript 中的实现没有使用循环，而是 “实时 ”更新 HTML 页面，直到用户猜出正确的数字。Awk 虽然支持循环，但是通过循环读取输入信息是没有意义的，因为 Awk 是基于数据管道的，所以它从文件而不是直接从用户读取输入信息。

C：

```
do {
    …
} while (guess != number);

```

C++：

```
do {
    …
} while ( number != guess );

```

Rust：

```
for line in std::io::stdin().lock().lines() {
    …
    break;
}

```

Java：

```
while ( guess != NUMBER ) {
    …
}

```

Groovy：

```
while ( … ) {
    …
    break;
}

```

Lua：

```
while ( player.guess ~= number ) do
    …
end

```

### 计算机读取我的猜测

不同编程语言对输入的处理方式不同。例如，JavaScript 直接从 HTML 表单中读取数值，而 Awk 则从数据管道中读取数据。

C：

```
scanf("%d", &guess);

```

C++：

```
cin >> guess;

```

Rust：

```
let parsed = line.ok().as_deref().map(str::parse::<i64>);
if let Some(Ok(guess)) = parsed {
    …
}

```

Java：

```
guess = player.nextInt();

```

Groovy：

```
response = reader.readLine()
int guess = response as Integer

```

JavaScript：

```
let myGuess = guess.value

```

Awk：

```
guess = int($0)

```

Lua：

```
player.answer = io.read()
player.guess = tonumber(player.answer)

```

### 告诉我猜测过高还是过低

在这些类 C 语言中，通常是通过 `if` 语句进行比较的。每种编程语言打印输出的方式有一些变化，但打印语句在每个样本中都是可识别的。

C：

```
if (guess < number) {
    puts("Too low");
}
else if (guess > number) {
    puts("Too high");
}
…
puts("That's right!");

```

C++：

```
if ( guess > number) { cout << "Too high.\n" << endl; }
else if ( guess < number ) { cout << "Too low.\n" << endl; }
else {
    cout << "That's right!\n" << endl;
    exit(0);
}

```

Rust：

```
_ if guess < random => println!("Too low"),
_ if guess > random => println!("Too high"),
_ => {
    println!("That's right");
    break;
}

```

Java：

```
if ( guess > NUMBER ) {
    System.out.println("Too high");
} else if ( guess < NUMBER ) {
    System.out.println("Too low");
} else {
    System.out.println("That's right!");
    System.exit(0);
}

```

Groovy：

```
if (guess < randomNumber)
    print 'too low, try again: '
else if (guess > randomNumber)
    print 'too high, try again: '
else {
    println "that's right"
    break
}

```

JavaScript：

```
if (myGuess === randomNumber) {
    feedback.textContent = "You got it right!"
} else if (myGuess > randomNumber) {
    feedback.textContent = "Your guess was " + myGuess + ". That's too high. Try Again!"
} else if (myGuess < randomNumber) {
    feedback.textContent = "Your guess was " + myGuess + ". That's too low. Try Again!"
}

```

Awk：

```
if (guess < randomNumber) {
    printf "too low, try again:"
} else if (guess > randomNumber) {
    printf "too high, try again:"
} else {
    printf "that's right\n"
    exit
}

```

Lua：

```
if ( player.guess > number ) then
    print("Too high")
elseif ( player.guess < number) then
    print("Too low")
else
    print("That's right!")
    os.exit()
end

```

### 非类 C 编程语言会怎么样呢？

非类 C 编程语言会有很大的不同，需要学习特定的语法来完成每一步。Racket 源于 Lisp 和 Scheme，所以它使用 Lisp 的前缀符和大量括号。Python 使用空格而不是括号来表示循环之类的块。Elixir 是一种函数式编程语言，有自己的语法。Bash 是基于 Unix 系统中的 Bourne shell，它本身借鉴了 Algol68，并支持额外的速记符，如 `&&` 作为 `and` 的变体。Fortran 是在使用打孔卡片输入代码的时期创建的，所以它依赖于一些重要列的 80 列布局。

我将通过比较 `if` 语句，举例表现这些编程语言的不同。`if` 判断一个值是否小于或大于另一个值，并向用户打印适当信息。

Racket：

```
(cond [(> number guess) (displayln "Too low") (inquire-user number)]
    [(< number guess) (displayln "Too high") (inquire-user number)]
    [else (displayln "Correct!")]))

```

Python：

```
if guess < random:
    print("Too low")
elif guess > random:
    print("Too high")
else:
    print("That's right!")

```

Elixir：

```
cond do
    guess < num ->
        IO.puts "Too low!"
        guess_loop(num)
    guess > num ->
        IO.puts "Too high!"
        guess_loop(num)
    true ->
        IO.puts "That's right!"
end

```

Bash：

```
[ "0$guess" -lt $number ] && echo "Too low"
[ "0$guess" -gt $number ] && echo "Too high"

```

Fortran：

```
IF (GUESS.LT.NUMBER) THEN
    PRINT *, 'TOO LOW'
ELSE IF (GUESS.GT.NUMBER) THEN
    PRINT *, 'TOO HIGH'
ENDIF

```

### 更多

当你在学习一种新的编程语言时 “猜数字” 游戏是一个很友好的入门程序，通过一种简单的方式练习了几个常见的编程概念。通过不同编程语言实现这个简单游戏，你可以理解一些核心概念和每种语言的细节。

学习如何用 C 和类 C 语言编写 “猜数字” 游戏：

* [C](https://opensource.com/article/21/1/learn-c)， Jim Hall
* [C++](https://opensource.com/article/20/12/learn-c-game)， Seth Kenlon
* [Rust](https://opensource.com/article/20/12/learn-rust)， Moshe Zadka
* [Java](https://opensource.com/article/20/12/learn-java)， Seth Kenlon
* [Groovy](https://opensource.com/article/20/12/groovy)， Chris Hermansen
* [JavaScript](https://opensource.com/article/21/1/learn-javascript)， Mandy Kendall
* [awk](https://opensource.com/article/21/1/learn-awk)， Chris Hermansen
* [Lua](https://opensource.com/article/20/12/lua-guess-number-game)， Seth Kenlon

其他语言：

* [Racket](https://opensource.com/article/21/1/racket-guess-number)， Cristiano L. Fontana
* [Python](https://opensource.com/article/20/12/learn-python)， Moshe Zadka
* [Elixir](https://opensource.com/article/20/12/elixir)， Moshe Zadka
* [Bash](https://opensource.com/article/20/12/learn-bash)， Jim Hall
* [Fortran](https://opensource.com/article/21/1/fortran)， Jim Hall

---

via: <https://opensource.com/article/21/4/compare-programming-languages>

作者：[Jim Hall](https://opensource.com/users/jim-hall) 选题：[lujun9972](https://github.com/lujun9972) 译者：[VeryZZJ](https://github.com/VeryZZJ) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #661 下一代 CarPlay 将成为汽车操作系统

Summary: • 下一代 CarPlay 将成为汽车操作系统 • 欧盟同意采用通用充电器端口 • MacOS 将很快默认阻止未知的 USB-C 配件

# 硬核观察 #661 下一代 CarPlay 将成为汽车操作系统

### 下一代 CarPlay 将成为汽车操作系统

苹果公司表示，下一代 CarPlay 作为一个完整的车辆界面，可以对车辆进行前所未有的控制，并能获得每辆主机车辆产生的数据。CarPlay 将兼容各种长宽比的显示，与所有主机车辆的系统更加整合。除了目前的导航和媒体功能外，还将处理传统的仪表，如速度表、转速表、温度表和燃料或电动车电量显示等。用户将能够调整他们的空调、座椅加热，甚至直接连接到苹果的智能家居技术。苹果公司称，第一批支持新的 CarPlay 的车辆应该在 2023 年底公布，其合作伙伴包括奥迪、福特、本田、林肯、梅赛德斯-奔驰、日产、保时捷等。

>
> **[消息来源：CNET](https://www.cnet.com/roadshow/news/next-generation-apple-carplay-wwdc-2022-preview/)**
>
>
>

>
> 老王点评：看起来真是将汽车变成了手机配件了。
>
>
>

### 欧盟同意采用通用充电器端口

欧盟立法者周二达成协议，要求在欧盟销售的智能手机等便捷式电子设备必须采用通用充电器端口。欧盟预计将在今年晚些时候正式批准该协议，从 2024 年秋季开始执行这一规定。该通用充电标准基于 USB Type-C，这一协议将对苹果产生不利影响。该公司仍然使用自己的雷雳连接器为 iPhone 充电，虽然该公司最近为 iPad 和 MacBook 配备了 USB-C 接口。苹果公司曾表示，“只规定一种类型的连接器的严格监管扼杀了创新，而不是鼓励创新”。

>
> **[消息来源：CNBC](https://www.cnbc.com/2022/06/07/eu-makes-usb-c-mandatory-for-apple-iphones-and-other-devices.html)**
>
>
>

>
> 老王点评：虽然 Type-C 也有很多外形一样，但是协议不同的接口，但是总比各种不同接口的充电线要好。让我们看看苹果是只在欧洲推出 Type-C 充电接口还是会在全球改变。
>
>
>

### MacOS 将很快默认阻止未知的 USB-C 配件

苹果公司即将推出的 macOS 13 Ventura 中的一项新的安全功能将自动阻止新的 USB-C 设备与操作系统进行通信，直到该配件能够得到用户的认可。该功能将在默认情况下启用。但这不适用于电源适配器、独立显示器和与 已批准的集线器的连接，而且即使你不批准该附件，该设备仍然可以充电。

>
> **[消息来源：Techcrunch](https://techcrunch.com/2022/06/07/macos-usb-accessory-security/)**
>
>
>

>
> 老王点评：有一定的作用，不过我觉得仅仅是让用户同意连接，对于恶意 USB 外设的防御还是不够的。
>
>
>


机器学习：使用 Python 进行预测

Summary: 机器学习基本上是人工智能的一个子集，它使用以前存在的数据对新数据进行预测。

机器学习基本上是人工智能的一个子集，它使用以前存在的数据对新数据进行预测。

# 机器学习：使用 Python 进行预测

>
> 机器学习基本上是人工智能的一个子集，它使用以前存在的数据对新数据进行预测。
>
>
>

当然，现在我们所有人都知道这个道理了！这篇文章展示了如何将 Python 中开发的机器学习模型作为 Java 代码的一部分来进行预测。

本文假设你熟悉基本的开发技巧并理解机器学习。我们将从训练我们的模型开始，然后在 Python 中制作一个机器学习模型。

我以一个洪水预测模型为例。首先，导入以下库：

```
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

```

当我们成功地导入了这些库，我们就需要输入数据集，如下面的代码所示。为了预测洪水，我使用的是河流水位数据集。

```
from google.colab import files
uploaded = files.upload()
for fn in uploaded.keys():
    print('User uploaded file "{name}" with length {length} bytes'.format(name=fn, length=len(uploaded[fn])))

```

如果没有选择文件的话，选择上传的文件。

只有在当前浏览器会话中执行了该单元格时，上传部件才可用。请重新运行此单元，上传文件 `Hoppers Crossing-Hourly-River-Level.csv`，大小 2207036 字节。

完成后，我们就可以使用 `sklearn` 库来训练我们的模型。为此，我们首先需要导入该库和算法模型，如图 1 所示。

```
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, y_train)

```

完成后，我们就训练好了我们的模型，现在可以进行预测了，如图 2 所示。

### 在 Java 中使用 ML 模型

我们现在需要做的是把 ML 模型转换成一个可以被 Java 程序使用的模型。有一个叫做 `sklearn2pmml` 的库可以帮助我们做到这一点：

```
# Install the library
pip install sklearn2pmml

```

库安装完毕后，我们就可以转换我们已经训练好的模型，如下图所示：

```
sklearn2pmml(pipeline, ‘model.pmml’, with_repr = True)

```

这就完成了！我们现在可以在我们的 Java 代码中使用生成的 `model.pmml` 文件来进行预测。请试一试吧！

（LCTT 译注：Java 中有第三方库 [jpmml/jpmml-evaluator](https://github.com/jpmml/jpmml-evaluator)，它能帮助你使用生成的 `model.pmml` 进行预测。）

---

via: <https://www.opensourceforu.com/2022/05/using-a-machine-learning-model-to-make-predictions/>

作者：[Jishnu Saurav Mittapalli](https://www.opensourceforu.com/author/jishnu-saurav-mittapalli/) 选题：[lkxed](https://github.com/lkxed) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


编译代码时动态地链接库

Summary: 编译软件在你如何运行你的系统方面给你很大的灵活性。LD_LIBRARY_PATH 变量，以及 GCC 的 -L 和 -l 选项，是这种灵活性的组成部分。

# 编译代码时动态地链接库

<img src="content_image/album_202206_09_094633ekluugjjzailicja.jpg" alt="" title="">

>
> 编译软件在你如何运行你的系统方面给你很大的灵活性。`LD_LIBRARY_PATH` 变量，以及 GCC 的 `-L` 和 `-l` 选项，是这种灵活性的组成部分。
>
>
>

编译软件是开发者经常做的事情，在开源世界中，一些用户甚至选择自己动手。Linux 播客 Dann Washko 称源码为“通用包格式”，因为它包含了使一个应用在任何平台上运行所需的所有组件。当然，并不是所有的源码都是为所有的系统编写的，所以它只是在目标系统的子集内是“通用”的，但问题是，源码是非常灵活的。有了开源，你可以决定代码的编译和运行方式。

当你在编译代码时，你通常要处理多个源文件。开发人员倾向于将不同的类或模块放在不同的文件中，这样它们可以被单独维护，甚至可能被不同的项目使用。但当你编译这些文件时，许多文件会被编译成一个可执行文件。

这通常是通过创建共享库来完成的，然后从可执行文件中动态链接回它们。这样可以通过保持模块化功能的外部性来保持可执行文件的小型化，并确保库可以独立于使用它们的应用而被更新。

### 在编译过程中定位一个共享对象

当你 [用 GCC 编译](https://opensource.com/article/22/5/what-happens-behind-scenes-during-gcc-compilation-c-programs) 时，你通常需要在你的工作站上安装一个库，以便 GCC 能够定位到它。默认情况下，GCC 假定库在系统库路径中，例如 `/lib64` 和 `/usr/lib64`。然而，如果你要链接到一个你自己的尚未安装的库，或者你需要链接到一个没有安装在标准位置的库，那么你必须帮助 GCC 找到这些文件。

有两个选项对于在 GCC 中寻找库很重要：

* `-L`（大写字母 L）在 GCC 的搜索位置上增加一个额外的库路径。
* `-l`（小写字母 L）设置你要链接的库的名字。

例如，假设你写了一个叫做 `libexample.so` 的库，并且你想在编译你的应用 `demo.c` 时使用它。首先，从 `demo.c` 创建一个对象文件：

```
$ gcc -I ./include -c src/demo.c

```

`-I` 选项在 GCC 搜索头文件的路径中增加了一个目录。在这个例子中，我假设自定义头文件在一个名为 `include` 的本地目录中。`-c` 选项防止 GCC 运行链接器，因为这个任务只是为了创建一个对象文件。结果如下：

```
$ ls
demo.o   include/   lib/    src/

```

现在你可以使用 `-L` 选项为你的库设置一个路径，然后进行编译：

```
$ gcc -L`pwd`/lib -o myDemo demo.o -lexample

```

注意，`-L` 选项在 `-l` 选项*之前*。这很重要，因为如果在你告诉 GCC 查找非默认库之前没有将 `-L` 添加到 GCC 的搜索路径中，GCC 就不知道要在你的自定义位置上搜索。编译成功了，但当你试图运行它时，却出现了问题：

```
$ ./myDemo
./myDemo: error while loading shared libraries:
libexample.so: cannot open shared object file:
No such file or directory

```

### 用 ldd 排除故障

`ldd` 工具可以打印出共享对象的依赖关系，它在排除类似问题时很有用：

```
$ ldd ./myDemo
        linux-vdso.so.1 (0x00007ffe151df000)
        libexample.so => not found
        libc.so.6 => /lib64/libc.so.6 (0x00007f514b60a000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f514b839000)

```

你已经知道定位不到 `libexample`，但 `ldd` 输出至少确认了它对*工作*库的期望位置。例如，`libc.so.6`已经被定位，`ldd` 显示其完整路径。

### LD\_LIBRARY\_PATH

`LD_LIBRARY_PATH` [环境变量](https://opensource.com/article/19/8/what-are-environment-variables) 定义了库的路径。如果你正在运行一个依赖于没有安装到标准目录的库的应用程，你可以使用 `LD_LIBRARY_PATH` 添加到系统的库搜索路径。

有几种设置环境变量的方法，但最灵活的是在运行命令前放置环境变量。看看设置 `LD_LIBRARY_PATH` 对 `ldd` 命令在分析一个“损坏”的可执行文件时的作用：

```
$ LD_LIBRARY_PATH=`pwd`/lib ldd ./
   linux-vdso.so.1 (0x00007ffe515bb000)
   libexample.so => /tmp/Demo/lib/libexample.so (0x0000...
   libc.so.6 => /lib64/libc.so.6 (0x00007eff037ee000)
   /lib64/ld-linux-x86-64.so.2 (0x00007eff03a22000)

```

这也同样适用于你的自定义命令：

```
$ LD_LIBRARY_PATH=`pwd`/lib myDemo
hello world!

```

然而，如果你移动库文件或可执行文件，它又会失效：

```
$ mv lib/libexample.so ~/.local/lib64
$ LD_LIBRARY_PATH=`pwd`/lib myDemo
./myDemo: error while loading shared libraries...

```

要修复它，你必须调整 `LD_LIBRARY_PATH` 以匹配库的新位置：

```
$ LD_LIBRARY_PATH=~/.local/lib64 myDemo
hello world!

```

### 何时使用 LD\_LIBRARY\_PATH

在大多数情况下，`LD_LIBRARY_PATH` 不是你需要设置的变量。按照设计，库安装到 `/usr/lib64` 中，因此应用自然会在其中搜索所需的库。在两种情况下，你可能需要使用 `LD_LIBRARY_PATH`：

* 你正在编译的软件需要链接到本身刚刚编译但尚未安装的库。良好设计的构建系统，例如 [Autotools](https://opensource.com/article/19/7/introduction-gnu-autotools) 和 [CMake](https://opensource.com/article/21/5/cmake)，可以帮助处理这个问题。
* 你正在使用设计为在单个目录之外运行的软件，它没有安装脚本，或安装脚本将库放置在非标准目录中。一些应用具有 Linux 用户可以下载、复制到 `/opt` 并在“不安装”的情况下运行的版本。`LD_PATH_LIBRARY` 变量是通过封装脚本设置的，因此用户通常甚至不知道它已被设置。

编译软件为你在运行系统方面提供了很大的灵活性。`LD_LIBRARY_PATH` 变量以及 `-L` 和 `-l` GCC 选项是这种灵活性的组成部分。

---

via: <https://opensource.com/article/22/5/compile-code-ldlibrarypath>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lkxed](https://github.com/lkxed) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #662 GitHub 正式宣布终止 Atom 项目

Summary: • GitHub 正式宣布终止 Atom 项目 • IETF 正式颁布 HTTP/3 推荐标准 RFC 9114 • 谷歌再次打破圆周率计算纪录，计算出百万亿位

# 硬核观察 #662 GitHub 正式宣布终止 Atom 项目

### GitHub 正式宣布终止 Atom 项目

GitHub 是在 2011 年宣布 Atom，2015 年 5 月发布了 1.0 版本，并吸引了数百万开发者使用。而微软在 2015 年推出的 VS Code 也是受到了 Atom 的启发。在 2018 年微软收购 GitHub 后，Atom 成为了微软的项目。在社区对 Atom 前景的担忧之下，GitHub 承诺不会放弃 Atom。但过去几年 Atom 除了安全更新外几乎没有什么改进。而 Atom 和 VS Code 的用户数此消彼长，Stack Overflow 的 2021 年度开发者调查结果表明，仅 13% 开发者将 Atom 当做主力开发环境，而 VS Code 却高达 71%。最后，Atom 还留下了一个重要遗产，它所分拆出来的 Electron 框架被数以千计的应用广泛使用，其中包括 VS Code、Slack 和 GitHub Desktop 等等。

>
> **[消息来源：GitHub](https://github.blog/2022-06-08-sunsetting-atom/)**
>
>
>

>
> 老王点评：其实可以想到，当年社区对 GitHub 被收购的担忧并非无的放矢。可惜了 Atom，至今我还对 Atom 1.0 那时候的那个 [宣传视频](/article-5828-1.html) 记忆尤深。
>
>
>

### IETF 正式颁布 HTTP/3 推荐标准 RFC 9114

作为超文本传输协议的第三个大版本，它确定了 QUIC 包含的 HTTP/2 功能，并描述了如何将 HTTP/2 扩展迁移至 HTTP/3。QUIC 全称为“快速 UDP 互联网连接”，由谷歌创建并于 2013 年发布。其旨在化解 TCP 需要多次来回握手，才能建立连接并开始传输数据的短板。早在 IETF 颁布 HTTP/3 的意见征求稿前，谷歌就已经将 QUIC 支持内嵌于 Chrome 浏览器，并在谷歌的诸多服务上启用。Web 流量观测表明 HTTP/3 的流量已超过 HTTP/1.1。

>
> **[消息来源：The Register](https://www.theregister.com/2022/06/07/http3_rfc_9114_published/)**
>
>
>

>
> 老王点评：我记得 HTTP/2 也不过才几年，现在都要开始普及 HTTP/3。真是风水轮流转，谁想到最主要的互联网应用 HTTP 最终会从 TCP 转向 UDP 呢。
>
>
>

### 谷歌再次打破圆周率计算纪录，计算出百万亿位

早在 2019 年，谷歌云服务就已经打破了圆周率的计算纪录，计算出了 31.4 万亿位。周三，谷歌云再次宣布打破了百万亿位的圆周率计算纪录。这 [百万亿位圆周率](https://pi.delivery/) 的最后 10 位是：`30952 95560`。谷歌云表示，其借助计算引擎服务完成了本次新挑战，用到了 N2 机器家族、虚拟网卡、100 Gbps 网络带宽，以及平衡持久磁盘等新功能。

>
> **[消息来源：谷歌](https://cloud.google.com/blog/products/compute/calculating-100-trillion-digits-of-pi-on-google-cloud)**
>
>
>

>
> 老王点评：看似无用的圆周率计算，其实是谷歌云一次炫技的展示。有人说，任何大小的数字都能在圆周率的某个片段找到。不说百万亿位了，你能背出多少位圆周率呢？
>
>
>


Linux 内核 5.19 RC1 发布，完成了 ARM 通用内核的工作

LoongArch 建议翻译成 龙架构 或不翻译，LoongArch 也不兼容 MIPS。

不要再说loongarc兼容mips，那是翻译执行的，翻译mips对loongarch来说和翻译x86、arm、risc-v是一样的机制。

现在并不存在另一家公司的mips芯片可以运行loongarch。

不要被洋人误导，也不要被垃圾芯联芯所误导。

# Linux 内核 5.19 RC1 发布，完成了 ARM 通用内核的工作

>
> Linus Torvalds 发布了用来测试的 Linux 内核 5.19 RC1，带来了一些重大变化。
>
>
>

继上个月 [Linux 内核 5.18](https://www.debugpoint.com/2022/05/linux-kernel-5-18/) 发布之后，Linus Torvalds 宣布了 Linux 内核 5.19 系列第一个候选版本。与此同时，Linux 内核 5.19 官方合并窗口关闭，这意味着除非是关键性的，否则不会再接受任何新功能。

简单看一下 Linux 内核 5.19 的新内容，会发现 CPU、GPU、网络、存储和核心模块都有常规的更新。此外，代码清理、淘汰过时硬件和对以后芯片组的持续支持是此版本的亮点。

在进一步介绍之前，让我们简单来看一下这些新特性。

### Linux 内核 5.19（RC1）的新特性

#### CPU

首先需要提及的是，Linux 内核 5.19 开始 [初步支持](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c6f2f3e2c80e975804360665d973211e4d9390cb) 龙芯架构的 CPU 系列。龙芯由中国龙芯中科公司设计开发。龙芯架构的 CPU 是兼容 MIPS 架构的通用微处理器。不过虽然现在提供了支持，但是你仍不能在龙芯 CPU 上启动 Linux，因为一些代码还在审核中。希望在 5.20 版本中能够使用。

新的 [英特尔 IFS 驱动](https://lore.kernel.org/lkml/13e61c61-0d4b-5f48-6373-f056bf8b603f@redhat.com/) 在该版本中落地，这有助于在部署前后发现硬件问题。它能够在早期阶段检测电路层面的 CPU 错误。

在前几个针对英特尔 CPU 的内核版本中一直在对电源管理和散热方面进行开发，[这个版本](https://lore.kernel.org/linux-acpi/CAJZ5v0hKBt3js65w18iKxzWoN5QuEc84_2xcM6paSv-ZHwe3Rw@mail.gmail.com/) 也不例外。首先，为 Raptor 和 Alder Lake 家族添加了英特尔 <ruby> 运行时平均功率限制 <rt>  Run-Time Average Power Limiting </rt></ruby>（RAPL）的支持。其次，改进了 P-state 驱动以处理频率变化，并且基于 CPU 的缩放支持被添加到被动 devfreq 中。

虽然英特尔 CPU 主要是散热和电源管理方面的工作，但对 AMD CPU 系列来说有更多的性能更新。首先，计划在今年年底完成 ZMD Zen 4 CPU 的 <ruby> 基于指令的采样 <rt>  Instruction-Based Sampling </rt></ruby>（IBS）模块引入了更多更新。此外，此版本引入了 PerfMonV2，提供了更多性能监视能力。

此外，该版本中移除了 a.out 支持。同样，过时的 Renesas H8/300 CPU 也被移除了。

#### 主要 ARM 更新

终于，主线 Linux 内核能够 [支持 ARM 多平台](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ecf0aa5317b0ad6bb015128a5b763c954fd58708) 了。在 Linus 的 RC1 开场白中可以看到，这是该版本中的巨大改变！从 Linux 3.7 开始，跨越了十多年的工作，这是多么漫长的过程。

#### 图形和存储升级

存储子系统在各种流行的文件系统中都有性能提升。最主要的变化包括苹果 M1 NVMe 控制器支持和对 XFS 文件系统的更好支持。此外，Btrfs、F2FS 以及 exFAT 文件系统也有增强。

在代码行数方面，有一个令人兴奋的指标是仅是图形驱动程序 Linux 内核 5.19 就增加了大约[50 万行代码](https://lore.kernel.org/lkml/CAPM=9tw62EZfAm0PbiOPmMrpfR98QMFTWGEQcA34G4ap4xxNkA@mail.gmail.com/)。它包括 AMD 的 RDNA、CDNA，英特尔的 Raptor Lake、DG2/Alchemist 等图形驱动更新。

#### 重要的网络变化

鉴于数据传输大幅增长，对 Big TCP 的支持有助于支持数据中心 400 GBit 级别的流量。它还可以在高性能网络环境中降低延迟。

继续改进了 <ruby> 多路径 TCP <rt>  Multi-Path TCP </rt></ruby>（MPTCP）。此外，高通 ath11k WiFi 驱动程序在此版本中添加了网络唤醒功能。同样增加了对瑞昱的 8852ce 芯片、联发科的 T700 调制解调器以及瑞萨科技的 RZ/V2M 的支持。

#### 其他值得注意的功能

首先，内核中著名的随机函数生成器（RNG）在此版本中 [继续](https://lore.kernel.org/lkml/20220522214457.37108-1-Jason@zx2c4.com/T/#u) 改进。

其次，著名的新兴的 Framework 模块化笔记本电脑获得了此版本 Chrome OS EC 驱动支持。Framework 笔记本现在可以作为一个非 Chromebook 设备利用 ChromeOS 的嵌入式控制器。

此外，Wacom 绘画板以及其他相关设备也有众多更新。[包括](https://lore.kernel.org/lkml/nycvar.YFH.7.76.2205241107530.28985@cbobk.fhfr.pm/) 对联想 Thinkpad TrackPoint II、谷歌 Whiskers Touchpad、联想 X12 TrackPoint 等设备支持的提升。

### Linux 内核 5.19 下载

如果你想要测试并尝试该候选版本，可以在 [这里](https://www.kernel.org/) 下载。

预计在 2022 年 7 月左右最终版本发布前，将会有多个版本更迭。

参考自：[内核邮件列表](https://lore.kernel.org/lkml/CAHk-=wgZt-YDSKfdyES2p6A_KJoG8DwQ0mb9CeS8jZYp+0Y2Rw@mail.gmail.com/T/#u)

---

via: <https://www.debugpoint.com/2022/06/linux-kernel-5-19-rc1/>

作者：[Arindam](https://www.debugpoint.com/author/admin1/) 选题：[lkxed](https://github.com/lkxed) 译者：[Donkey-Hao](https://github.com/Donkey-Hao) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


值得尝试的六款 Linux 文字处理程序

Summary: 选择一款最中意的文字处理程序把你的想法打印到纸上。

选择一款最中意的文字处理程序把你的想法打印到纸上。

# 值得尝试的六款 Linux 文字处理程序

>
> 选择一款最中意的文字处理程序把你的想法打印到纸上。
>
>
>

作家们总是在寻找更好的方法将他们的文字和想法以更好的方式呈现给他们的读者。我对文字处理程序最早的印象是在 Apple II 上使用 AppleWorks 和后来的 FrEDWriter，后者是一个创建于 1985 年的免费文字处理程序。这是我的学生们的标配，他们许多人来自没有钱购买专有软件的家庭。

### Abiword

在 20 世纪 90 年代时，我开始使用 Linux，寻找我可以使用的高质量的写作程序，并推荐给跟随我进入开源软件世界的学生们。我首先接触的文字处理程序是 [AbiWord](https://www.abisource.com/)。AbiWord 来自西班牙语 Abierto，意思是“开放”。它最早发布于 1998 年，并且之后一直在升级。它使用 GPLv2 开源协议。它支持列表、缩进，字符格式等基本功能，支持 .doc、.html、.docx、.odt 等多种格式文件的导入和导出。

### Etherpad

[Etherpad](https://etherpad.org/#) 是一个开源协作编辑项目。它可以让你像 Google Drive 那样实时编辑文档，主要的区别是它是完全开源的。据它的网站上介绍，你可以“与你的朋友、同学或同事一起写文章、新闻稿、待办事项，同时在同一个文件上工作”。其源代码可随时查看。Etherpad 采用 Apache 2.0 开源协议。你可以直接在线使用它，或者把它下载并 [安装](https://github.com/ether/etherpad-lite#installation) 到你的 Linux 电脑上。

### Cryptpad

[CryptPad](https://cryptpad.fr/what-is-cryptpad.html) 是一个端到端加密的写作套件。使用 GPLv3 开源协议，并且源代码公开在 [GitHub](https://github.com/xwiki-labs/cryptpad) 上。它由 [Xwiki](https://github.com/xwiki-labs) 实验室开发。可替代 Google Drive，并且是自主托管的。根据其网站描述，“CryptPad 旨在实现协作办公。实时同步文档的更改。由于所有数据都已加密，因此该服务及其管理员无法查看正在编辑和存储的内容。” Cryptpad 为用户提供了 [丰富的文档](https://docs.cryptpad.fr/en/user_guide/index.html)。

### Focuswriter

[FocusWriter](https://gottcode.org/focuswriter/) 是一个简单的免干扰的编辑器。它使用隐藏式界面，鼠标移动到屏幕边界时才显示界面。它使用 GPLv3 开源协议，并为 Linux 提供了 Flatpak 软件包，也为 [Ubuntu](https://packages.ubuntu.com/jammy/focuswriter) 和 [Fedora](https://src.fedoraproject.org/rpms/focuswriter) 提供了 DEB 和 RPM。下图是一个 FocusWriter 桌面的例子。这是一个非常简单直观的界面，菜单自动隐藏，当鼠标指向屏幕顶部或边缘时才会显示。文件默认保存为 .odt 格式，也支持纯文本、.docx 和富文本。

### LibreOffice Writer

[LibreOffice Writer](https://www.libreoffice.org/discover/writer/) 是我最喜欢的，我已经使用了十多年了。它拥有我需要的所有特性，包括富文本格式化。它还拥有我见过的最多的导入、导出方式。类似于 [APA](https://extensions.libreoffice.org/en/extensions/show/apa-style-paper-template) 这样的问卷和出版模板它拥有十多种。我最喜欢的是它可以将文件导出为 PDF 和 epub。 LibreOffice Writer 是一个自由软件，使用 Mozilla 公开许可证（MPL）2.0 开源协议。其 [源代码](https://www.libreoffice.org/about-us/source-code/) 由文档基金会提供。LibreOffice 支持大多数 Linux 发行版。同时它也提供 Flatpak、Snap 和 AppImage 软件包。另外，你也可以把它下载并安装到 MacOS 和 Windows 上。

### OpenOffice Writer

Apache [OpenOffice Writer](https://www.openoffice.org/product/writer.html) 是一个全功能的文字处理程序。它可以简单地用于备忘录，也可以复杂到足以编写你的第一本书。依据官网的描述，OpenOffice Writer 将文档自动保存为 .odt。它还支持将文档保存为 .doc、.docx、富文本和其他格式。OpenOffice Writer 使用 Apache 许可证 2.0 开源协议。源代码在 [GitHub](https://github.com/apache/openoffice) 上公开。

还有许多自由开源软件等着大家去发现。它们非常适合完成你的日常任务，你也可以为它们的发展做出贡献。你最喜欢的 Linux 文字处理器程序是什么呢？

---

via: <https://opensource.com/article/22/6/word-processors-linux>

作者：[Don Watkins](https://opensource.com/users/don-watkins) 选题：[lkxed](https://github.com/lkxed) 译者：[duoluoxiaosheng](https://github.com/duoluoxiaosheng) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #663 MongoDB 6.0 带来了加密查询

Summary: • MongoDB 6.0 带来了加密查询 • Chrome 102 将通过本地机器学习来阻止页面通知提醒 • AWS 称将云化大型机工作负载

# 硬核观察 #663 MongoDB 6.0 带来了加密查询

### MongoDB 6.0 带来了加密查询

即将发布的 MongoDB 6.0 中，可查询加密功能提供了查询加密数据的能力，而且整个查询事务都是加密的。这种端到端的客户端加密使用新颖的加密索引数据结构，被搜索的数据在数据库服务器上一直保持加密，包括在内存和 CPU 中。密钥永远不会离开应用程序，该公司认为查询速度和整体应用程序性能都不会受到新功能的影响。拥有大量敏感数据的组织，如银行、医疗机构和政府，会对这一功能感兴趣。

>
> **[消息来源：TheNewStack](https://thenewstack.io/mongodb-6-0-brings-encrypted-queries-time-series-data-collection/)**
>
>
>

>
> 老王点评：加密查询确实是一种非常有用的新功能，尤其是还能够不影响性能。我知道 IBM 也在做相关的研究，但是似乎没有出现在数据库产品中。
>
>
>

### Chrome 102 将通过本地机器学习来阻止页面通知提醒

谷歌在博文中承认，“一方面，页面通知有助于提供你关心的网站的更新；另一方面，通知权限提示可能成为一种骚扰。”当谷歌的新 ML 模型认为你不太可能接受某个通知权限提示时，它将抑制这些提示。此外，这些都发生在你的本地机器上，所以你的浏览数据都不会进入谷歌的服务器。

>
> **[消息来源：TechCrunch](https://techcrunch.com/2022/06/09/google-adds-more-ml-based-security-features-to-chrome/)**
>
>
>

>
> 老王点评：难道这些页面通知不是 Chrome 们释放出来的潘多拉吗？
>
>
>

### AWS 称将云化大型机工作负载

“大型机现代化计划”是在去年年底 AWS 在会议上公布的，试图帮助企业将其基于大型机的工作负载迁移到云中，并有可能将其转变为现代云原生服务。该计划可以使客户保持现有的应用程序，并以最小的代码改动将其重新平移到 AWS。但有分析师认为，将大型机工作负载迁移到云端的公司，几乎肯定要在未来的某个时候对其进行重构或重新编码，从而背上技术债务。

>
> **[消息来源：TheRegister](https://www.theregister.com/2022/06/09/aws_mainframe_modernization/)**
>
>
>

>
> 老王点评：这不过是从一个供应商锁定换成另外一个锁定罢了，毕竟大型机之所以还继续存在，有一部分原因是被锁在原有基础设施上无法摆脱。
>
>
>


# openSUSE Leap 15.4 发布版本添加了 Leap Micro 5.2、更新桌面环境等等

>
> 为奋起直追 SUSE Linux Enterprise 的 SP 4 ，openSUSE Leap 15.4 到来了，带来了新的升级和极其重要的改善。
>
>
>

<img src="content_image/album_202206_11_111735uv554nbay5o4obt5.jpg" alt="opensuse 15.4" title="opensuse 15.4">

即将到来的 openSUSE 小发布版本终于来了。如果你使用 openSUSE 作为你日常使用的桌面或服务器版本，你现在可能已经测试候选版本好几周了。

openSUSE Leap 15.4 的重点是软件包的更新，用以奋起直追 SUSE Linux Enterprise 的 SP 4 。因此，你将注意到一些弃用的软件包，以及可用于替换它们的新的升级。

当然，你应该有一些可用的软件包来确保兼容性。但是，大多数较旧的版本已经被移除。

### openSUSE Leap 15.4: 有什么新的变化？

为与最新的 SUSE Linux Enterprise（SLE）相适应，像 Python 2 和 KDE 4 一样的软件包已经被移除。你可以在这次的发布版本中找到较新的桌面环境。

此外，在容器和 AI/ML 用例方面，更新了 Podman、Containerd、Tensorflow 和 Grafana。

#### Leap Micro 5.2

Leap Micro 是针对容器和虚拟化工作负载定制的轻量级操作系统的最新版本。它也是 Leap 版的 [MicroOS](https://microos.opensuse.org/)，是 Tumbleweed 的一种变体，提供了自动管理和修补。

#### 桌面环境

Xfce 4.16 继续保留，但你可以找到主要功能的一些新补充，包括新图标和调色板。

Xfce 4.16 中的设置管理器也获得了视觉上的刷新。类似地，文件管理器（Thunar）也有一些改善，新的状态托盘插件的深色模式支持等等。

KDE 4 软件包已经被弃用，Plasma 5.24 LTS 已经作为长期支持版本中包含于其中。

要深入了解这些变化，你可以查看我们之前针对 [KDE Plasma 5.24 LTS](https://news.itsfoss.com/kde-plasma-5-24-lts-release/) 的报道。总体来说，新的 KDE Plasma 体验应该会令桌面用户赞叹。

说到 GNOME，你可以发现包含在 openSUSE Leap 15.4 中的 GNOME 41 带来了一系列的改善和新的特色功能。了解更多关于 [GNOME 41](https://news.itsfoss.com/gnome-41-release/) 的信息，你可以期待它的一些新的特色功能。

对于其它的可用的桌面环境来说，Leap 15.4 包括：

* MATE 桌面环境 1.26
* Enlightenment 桌面环境0.25.3
* 深度桌面环境 20.3

#### 弃用的软件包

移除了一些基础的软件包，包括 Python 2（生命终结）、Digikam、TensorFlow 1.x 和 Qt 4 等软件包。

在更新系统后，你可以使用 Qt 5 和 Plasma 5 。

#### 更新的软件包

很多重要的软件包在 Leap 15.4 中得到了更新，包含一些流行的软件包：

* TensorFlow 2.6.2
* Podman 3.4.4
* GNU Health 4.0
* sudo 1.9.9
* systemd 249.10
* AppArmor 3.04
* DNF 4.10.0
* LibreOffice 7.2.5

因此，你应该会注意到一些针对服务器用户和桌面用户的各种应用程序的有用更新。很多多媒体应用程序，像 VLC、GNOME MPV 等，都得到了升级。

#### 其它改善

随着基本软件的更新和清理，你也可以找到一个由 SUSE 维护的较新的 Linux 内核 5.14.21。

更新后的内核对硬件的支持应该会有改善。

更多信息，你可以参考针对 [openSUSE Leap 15.4](https://doc.opensuse.org/release-notes/x86_64/openSUSE/Leap/15.4/#rnotes) 的发布版本说明。

>
> **[下载 openSUSE Leap 15.4](https://get.opensuse.org/leap/15.4/)**
>
>
>

---

via: <https://news.itsfoss.com/opensuse-leap-15-4-release/>

作者：[Ankush Das](https://news.itsfoss.com/author/ankush/) 选题：[lkxed](https://github.com/lkxed) 译者：[robsean](https://github.com/robsean) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


隐藏功能！在 DuckDuckGo 搜索引擎中，你可以做这 25 件有趣的事情

Summary: 如果你是一位 DDG 狂热粉，你可能会喜欢用这些小技巧来提升你的搜索体验。

duck duck go是一个并不存在的网站。<br />
与google一样。

如果你是一位 DDG 狂热粉，你可能会喜欢用这些小技巧来提升你的搜索体验。

# 隐藏功能！在 DuckDuckGo 搜索引擎中，你可以做这 25 件有趣的事情

比起无处不在的 Google，[有些搜索引擎替代品更加尊重隐私](https://itsfoss.com/privacy-search-engines/)，而 DuckDuckGo 就是其中之一。

最近，这个搜索引擎有了很大的改进，搜索一般网页十分顺畅。在搜索本地地点方面，则还远不及 Google。

不过，DuckDuckGo（简称为 DDG）有一些很酷的功能，大部分用户还没注意到。如果你是一位 DDG 狂热粉，你可能会喜欢用这些小技巧来提升你的搜索体验。

### 1、跳转到特定网页

在你最喜欢的网站名称前输入 `!` 即可直接进入这个网站。则类似于 Google 的 “运气不错” 功能，但用 DDG 的话来说，这就叫 “叹号搜索”。

有一些网站有缩写形式，开始输入时便会提示。

在网站名后面输入搜索词，就可以直接抵达那个网站的搜索结果处。

### 2、文本转 ASCII

Figlet 是一个 [有趣的 Linux 命令](https://itsfoss.com/funny-linux-commands/)，可以将任意文本转换为漂亮的 ASCII 画格式。

在任意搜索词前输入 `figlet`，就会显示 ASCII 输出。无需打开终端。

### 3、检查社交媒体的状态

在某个人的 Twitter 名前加上 `@`，就会显示 TA 的状态（关注者等）。

### 4、生成强密码

输入 `password` 并加上需要的字符数，就可以生成一个独特的强密码。

### 5、生成随机密码短语

输入 `random passphrase` 可生成一段密码短语，通常长度为 4 个词。

### 6、获取一份速查表

在需要看速查表的搜索词后面，可输入 `cheatsheet`。如果要搜索的东西有速查表，就会立即显示在搜索页面。

### 7、通过色码获取颜色

输入 `color` 并加上你想查的颜色的十六进制码，便可显示这个颜色。

### 8、生成随机数

搜索 `random number` 会输出一个 0 到 1 之间的随机数。

你也可以指定需要的范围。

### 9、转换为二进制等形式

输入一个二进制数并加上 `binary`，可将其从二进制转换为十进制。

类似地，它也能用于十六进制和八进制，但我不清楚它们的处理逻辑。

### 10、寻找韵词

输入 `what rhymes with` 并带上要找同韵词的词语。作诗能力变强了，对吧？

### 11、获取拉马努金数、圆周率等常数

输入想获取数值的常数名，便可在搜索结果中看到它。

### 12、查询现在谁在太空中

输入 `people in space` 获取当前在太空中的人员名单。同时还会显示他们在太空中居住的时间。

### 13、查询网页是否无法访问

如果你想知道某个网站是你无法访问了，还是大家都无法访问了，只需在搜索词中输入 `is xyz.com down`。

### 14、获取特定话题的名言

输入一个词并带上 `quotes`，就会显示与这个词相关的名言。

### 15、获取占位文本

搜索 `lorem ipsum` 就可以获取 5 段占位文本。对 Web 开发者应该会有用。

### 16、获取任意月份的日历

在年、月、日后面输入 `calendar`，就会为你显示该月份的交互式日历。

### 17、生成二维码

在文字、链接等后面输入 `qr`，就会生成对应的二维码。

### 18、获取一些 CSS 动画

搜索 `css animations` 以获取一些 CSS 动画例子。

### 19、展开短链接

如果有一个 Bitly 链接或其他短链接，但不确定它指向哪里，不必再跳转到充满垃圾信息的网页了，只需展开短链接，看看真正的网址。

在短链接后面输入关键词 `expand`，就会显示真正的目标 URL。

### 20、获取特殊字符的 HTML 代码

搜索 `html chars`，可以获取一份很长的列表，上面有 HTML 实体及其描述，按下后会在结果中显示更多信息。

### 21、我用这东西干啥？

这功能没什么用。如果你输入 `why should I use this?` ，它就会在搜索结果顶部显示 `cause it's awesome`。显然，DuckDuckGo 在说他自己。

### 22、转换大小写

大小写都可转换。`lowercase <大写搜索词>` 就会显示小写的结果

`uppercase <小写搜索词>` 就会显示大写的结果。

### 23、编码 URL

搜索 `encode` 并加上 URL，就会给出编码后的结果

### 24、Motherboard

搜索 `Motherboard` 就会看见左侧的 DuckDuckGo 的 logo 变了。它会显示选好的几个随机 logo。

### 25、获取 HTML 色码

搜索 `color codes` 便可获得一份颜色表。一样，这个功能多为 Web 开发者和设计师所用。

### 还有很多别的···

我的伙伴 Sreenath 想到本贴的主意。他说 DuckDuckGo 中还有许多 “彩蛋”，我觉得没错。但全部列出来有诸多不便。

如果你知道更多这样有趣的 DDG 搜索功能，请在评论中分享。如果你又发现了你喜欢的搜索功能，也提出来吧。

---

via: <https://itsfoss.com/duckduckgo-easter-eggs/>

作者：[sreenath](https://itsfoss.com/author/sreenath/) 选题：[lkxed](https://github.com/lkxed) 译者：[Peaksol](https://github.com/TravinDreek) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


如何在 RHEL 9 上创建本地 Yum/DNF 仓库

# 如何在 RHEL 9 上创建本地 Yum/DNF 仓库

你好，技术兄弟，最近红帽发布了最新的操作系统 RHEL 9，RHEL 9 满足了混合云的所有要求。它可以安装在物理服务器、虚拟机和容器镜像中。

当我们没有订阅的时候，想安装软件包来做实验，那么设置本地的 Yum 或 DNF 仓库将是很方便的。

在本指南中，我们将介绍如何在 RHEL 9 上使用 DVD 或 ISO 文件一步一步地创建本地 Yum/DNF 资源库。

创建本地 Yum/DNF 资源库的先决条件:

* 最小化安装 RHEL 9 系统
* 具有管理权限的 sudo 用户
* RHEL 9 DVD 或 ISO 文件

### 1）挂载 RHEL 9 ISO 文件或 DVD

我们假设 RHEL 9 iso 文件已经被复制到系统中。运行下面的挂载命令，将 ISO 文件挂载到 `/opt/repo` 文件夹。

```
$ sudo mkdir /var/repo
$ sudo mount -o loop rhel-baseos-9.0-x86_64-dvd.iso /var/repo/

```

如果是 DVD 光盘，运行：

```
$ sudo mount /dev/sr0 /var/repo/

```

### 2）在 /etc/yum.repos.d/ 目录中创建仓库文件

在 `/etc/yum.repos.d/` 目录下创建一个名为 “rhel9-local.repo` 的仓库文件，内容如下：

```
$ sudo vi /etc/yum.repos.d/rhel9-local.repo
[Local-BaseOS]
name=Red Hat Enterprise Linux 9 - BaseOS
metadata_expire=-1
gpgcheck=1
enabled=1
baseurl=file:///var/repo//BaseOS/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[Local-AppStream]
name=Red Hat Enterprise Linux 9 - AppStream
metadata_expire=-1
gpgcheck=1
enabled=1
baseurl=file:///var/repo//AppStream/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

```

保存并关闭该文件。

### 3）刷新 Yum/DNF 和订阅管理器的缓存

执行以下命令来清理 Yum 或 DNF 和订阅管理器的缓存。

```
$ sudo dnf clean all
$ sudo subscription-manager clean

```

在上面的输出中，我们得到一个警告信息 `This system is not registered with an entitlement`（系统没有注册权限）。所以，为了抑制这个警告信息，编辑文件 `/etc/yum/pluginconf.d/subscription-manager.conf`，将参数 `enabled=1` 改为 `enabled=0`。

```
$ sudo vi /etc/yum/pluginconf.d/subscription-manager.conf

```

保存并退出该文件。

### 4）使用本地仓库安装软件包

现在我们都准备好测试我们的本地仓库了。运行下面的命令来查看配置仓库。

```
$ sudo dnf repolist

```

输出：

现在，试试用 `dnf` 命令通过上面配置的本地仓库安装软件包。

```
$ sudo dnf install nfs-utils

```

输出：

完美，上述输出证实了 `nfs-utils` 包及其依赖项已经通过本地配置的 Yum 或 DNF 仓库成功安装。

这就是本指南的全部内容。我希望你觉得它有参考价值。请在下面的评论区发表你的疑问和反馈。

---

via: <https://www.linuxtechi.com/create-local-yum-dnf-repository-rhel/>

作者：[Pradeep Kumar](https://www.linuxtechi.com/author/pradeep/) 选题：[lkxed](https://github.com/lkxed) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 #664 Linux 发现一个“几乎不能被检测到”的寄生木马

Summary: • Linux 发现一个“几乎不能被检测到”的寄生木马 •  Ubuntu 正在改进对低成本 RISC-V 主板 VisionFive 的支持 • 推特联合创始人宣布 Web3 的竞争对手：Web5

# 硬核观察 #664 Linux 发现一个“几乎不能被检测到”的寄生木马

### Linux 发现一个“几乎不能被检测到”的寄生木马

安全研究人员发现了一款名为 “Symbiote”（共生体）的恶意软件。他们称其“几乎不可能被检测到”。它会“寄生感染”系统，感染所有正在运行的进程，并为提供 Rootkit 功能、远程访问等。它最早在 2021 年 11 月被发现，似乎是针对金融部门特别开发的。它不是一个以感染机器的独立可执行文件的形式运行的，而是以一个共享对象库的形式加载到所有正在运行的进程中，并寄生感染机器。它采用了多种规避检测的手段，来隐藏文件、进程和网络流量，甚至能让 BPF 工具也无法发现其网络流量。

>
> **[消息来源：黑莓](https://blogs.blackberry.com/en/2022/06/symbiote-a-new-nearly-impossible-to-detect-linux-threat)**
>
>
>

>
> 老王点评：其实通过共享对象库寄生的木马并不稀奇，只是这个木马做了更多的隐藏手段，可见现在针对 Linux 的木马也越来越强大隐蔽了。
>
>
>

### Ubuntu 正在改进对低成本 RISC-V 主板 VisionFive 的支持

最近 Ubuntu 开发人员一直在努力提高和改善对赛昉科技的 VisionFive 单板机的支持，有望在 Ubuntu 22.10 中看到对这种低于 180 美元的 RISC-V 计算机的良好支持。VisionFive 是为数不多的不超过 200 美元的、能运行完整 Linux 发行版的 RISC-V 主板之一。自 Linux 5.17 内核开始，就对 VisionFive v1 板提供了主线支持。

>
> **[消息来源：Phoronix](https://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-VisionFive-WIP)**
>
>
>

>
> 老王点评：目前这个板子还是比较缺货的，希望能在 Ubuntu 等发行版提供更好的支持时能解决供货问题。有对在这个板子上运行 Ubuntu 感兴趣的同学吗？
>
>
>

### 推特联合创始人宣布 Web3 的竞争对手：Web5

推特联合创始人 Jack Dorsey 认为 Web3 变得和之前的 Web2 一样有问题，对未来抗审查、注重隐私的互联网来说还只是个梦想。现在，他旗下的区块链公司 TBD 创造了一个新名词 Web5，将通过放弃以区块链为中心的方法来实现无审查、以身份为中心的网络体验，从而击败现有的模式。他们所宣称的技术可能和 BT、Tor 类似。目前这个所谓的 Web5 仍处于开源开发阶段，没有正式发布日期。

>
> **[消息来源：Coindesk](https://www.coindesk.com/business/2022/06/10/jack-dorseys-tbd-announces-web-3-competitor-web5/)**
>
>
>

>
> 老王点评：生造名词的技术“创新”，并没有什么意义，就像十多年前 Web2 刚刚初露头角时就有人宣称 Web3，但是到现在连 Web3 也并没有真正得到共识和认可。更别说所谓的 Web5，我就想知道，Web4 怎么了，是 4 不吉利么。此外，其视为典范的，无论是 BT 还是 Tor，都太过于激进了。
>
>
>


如何双启动 Ubuntu 22.04 LTS 和 Windows 11

不错，很适合想入门的小白

# 如何双启动 Ubuntu 22.04 LTS 和 Windows 11

嗨，伙计们，在这篇指南中，我们将演示如何在 Windows 11 的之外配置 Ubuntu 22.04 LTS（Jammy Jellyfish）的双启动设置。

为使其能工作，你需要在你的计算机上已经安装好了 Windows 11 。接下来，你将需要在你的硬盘驱动器上创建一个单独的分区，你将在此分区上安装 Ubuntu 22.04 。我们将包含这点知识，因此不要担心。

**前置条件：**

在设置双启动前，这些是你所需要的：

* 一个 Ubuntu 22.04 的可启动 USB 驱动器，你可以转到 [Ubuntu 22.04 下载页面](https://releases.ubuntu.com/22.04/) 来下载 Ubuntu 22.04 的 ISO 镜像文件。在 ISO 镜像文件到位后，拿一个 16GB USB 驱动器，并使用 Rufus 应用程序来使其可启动。
* 快速稳定的互联网连接

### 步骤 1、在你的硬盘驱动器上创建一个可用的分区

正如介绍中所提到的，我们首先需要在硬盘驱动器上创建一个单独的分区，我们将在其中安装 Ubuntu 22.04 。

因此，通过按下 `Windows + R` 组合键来打开磁盘管理器实用程序。

在对话框中，输入 `diskmgmt.msc` ，并按下回车键。

<ruby> 磁盘管理 <rt>  disk management </rt></ruby>控制台将显示当前磁盘分区，如你将在下面所看到的一样。我们将通过压缩 “卷 E” 来创建一个用于安装 Ubuntu 的分区。这在你的安装过程中可能有所不同，但是只需要跟着做，你就会理解其中的大体意思。

因此，在你想要压缩的磁盘驱动器卷上点击鼠标右键，并在弹出的菜单中选择 <ruby> 压缩卷 <rt>  Shrink </rt></ruby> 选项。

将会出现一个弹出对话框，如下所示。具体指定压缩的控件大小（以 MB 为单位），并单击 <ruby> 压缩卷 <rt>  Shrink </rt></ruby> 。

这是指定给 Ubuntu 22.04 安装所用的空间。

在缩小磁盘空间后，它将显示为 <ruby> 未分配 <rt>  Unallocated </rt></ruby> 或 <ruby> 可用空间 <rt>  Free Space </rt></ruby>，如图所示。

随着有了可用空间，现在将可启动 USB 驱动器插入到你的 PC ，并重新启动你的系统。此外，要确保访问 BIOS 设置，并修改启动优先级，来使 USB 驱动器成为第一优先级。保存 BIOS 更改并继续启动。

### 步骤 2、开始安装

在第一个屏幕中，你将得到如图所示的 GRUB 菜单。选择第一个选项 <ruby> 尝试或安装 Ubuntu <rt>  Try or Install Ubuntu </rt></ruby> ，并按下 <ruby> 回车键 <rt>  ENTER </rt></ruby> 按键。

Ubuntu 22.04 将开始加载，如下所示。这最多需要一分钟。

此后，安装程序向导将弹出，向你提供两个选项： <ruby> 尝试 Ubuntu <rt>  Try Ubuntu </rt></ruby> 和 <ruby> 安装 Ubuntu <rt>  Install Ubuntu </rt></ruby>。因为我们的使命是安装 Ubuntu ，所以选择后者。

接下来，选择你的首选键盘布局，并单击 <ruby> 继续 <rt>  Continue </rt></ruby> 按钮。

在 <ruby> 更新和其它软件 <rt>  Updates and Other Software </rt></ruby> 步骤中，选择 <ruby> 正常安装 <rt>  Normal Installation </rt></ruby> 以便安装 Ubuntu的 GUI 版本，通过勾选其它剩余选项来允许下载更新和安装第三方的针对于图像、WIFI 硬件和其它实用程序的软件包。

接下来，单击 <ruby> 继续 <rt>  Continue </rt></ruby> 按钮。

下一步提供两个安装选项。第一个选项 - <ruby> 清除整个磁盘并安装 Ubuntu <rt>  Erase disk and install Ubuntu </rt></ruby> – 完全地擦除你的驱动器并安装。但是由于这是一个双启动设置，这个选项对于你现有安装的 Windows 系统来说会是灾难性的。

因此，选择 <ruby> 其它选项 <rt>  Something else </rt></ruby>，单击 <ruby> 继续 <rt>  Continue </rt></ruby> 按钮。

分区表将显示所有现有的磁盘分区。到目前为止，我们仅有 NTFS 分区和我们之前压缩出来的可用分区。

针对 Ubuntu 22.04 ，我们将创建下面的分区：

* `/boot` – 1 GB
* `/home` – 10 GB
* `/` – 12 GB
* 交换分区 – 2 GB
* EFI – 300 MB

为开始使用这些分区，单击 <ruby> 可用空间 <rt>  Free Space </rt></ruby>分区下面的 “+” 符号。

如图显示填写 `/boot` 分区的详细信息，然后单击 <ruby> 确定 <rt>  OK </rt></ruby> 按钮。

接下来，具体指定 `/home` 分区，并单击 <ruby> 确定 <rt>  OK </rt></ruby> 按钮。

接下来，定义 `/`（根）分区，并单击 <ruby> 确定 <rt>  OK </rt></ruby> 按钮。

为定义交换空间，设置大小，并在 <ruby> 使用为 <rt>  Use as </rt></ruby>：选项中选择 <ruby> 交换区域 <rt>  Swap area </rt></ruby>。

最后，如果你正在使用 UEFI 启动模式，那么创建一个 EFI 系统分区。我们将分配 300MB 到 EFI 分区。

下图是一份我们的分区表的分区摘要：

为继续安装，单击 <ruby> 现在安装 <rt>  Install Now </rt></ruby>。在下图显示的弹出窗口中，单击 <ruby> 继续 <rt>  Continue </rt></ruby>来保存更改到磁盘。

接下来，安装程序向导将自动侦测出你的位置，只需要单击 <ruby> 继续 <rt>  Continue </rt></ruby> 按钮。

接下来，通过具体指定姓名、计算机的名称和密码来创建一个登录用户。接下来单击 <ruby> 继续 <rt>  Continue </rt></ruby> 按钮。

此时，安装程序向导将复制所有的 Ubuntu 文件和软件包到手动创建的硬盘驱动器分区，并安装必要的软件包。

这个过程将需要很长一段时间，因此，要有耐心。在我们的实例中，它需要大约 30 分钟。

在安装过程完成后，单击 <ruby> 立刻重新启动 <rt>  Restart Now </rt></ruby> 按钮来重新启动系统。

在这时，移除你的可启动 USB 驱动器，并按下回车键。

在系统重新启动时，你将找到包括 Ubuntu 和 Windows 11 在内的各种选项。

选择 “Ubuntu” 来启动到你的新 Ubuntu 22.04 安装。要启动到 Windows 11，请选择标有 <ruby> Windows 恢复环境 <rt>  Windows Recovery Environment </rt></ruby> 的条目。

就这样。我们演示了如何双启动 Windows 11 和 Ubuntu 22.04。

---

via: <https://www.linuxtechi.com/dual-boot-ubuntu-22-04-and-windows-11/>

作者：[James Kiarie](https://www.linuxtechi.com/author/james/) 选题：[lkxed](https://github.com/lkxed) 译者：[robsean](https://github.com/robsean) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


# Amberol 是一款外观漂亮的 Linux 音乐播放器，只播放音乐，不做其他事情

虽然音乐世界被流媒体服务所主导，但这并没有阻止开发者为桌面电脑创建音乐播放器。

最近，我发现了一个外观漂亮的新的 Linux 桌面音乐播放器。它名为 Amberol，我被它的美丽所震撼。

看起来不错，不是吗？让我们仔细看看它。

### Amberol，Linux 上的可爱的音乐播放器

看起来不错是它所做的两件（或几件）事情中的一件。另一件事是播放音乐。

这就是它，[Amberol](https://apps.gnome.org/app/io.bassi.Amberol/) 没有额外的花哨（和有用）的功能，如生成专辑封面、元数据编辑、歌词显示或播放列表和库管理。

这些功能也不像是会在未来的版本中加入。Amberol 只想播放音乐。就是这样。

#### 令人惊叹的用户界面

Amberol 和大多数新的 GNOME 应用一样，是用 Rust 和 GTK 编写的。

它有一个自适应的用户界面，可以根据你正在播放的专辑颜色来改变颜色。渐变效果给了它一个现代、时尚的外观，肯定会成为你的 Linux <ruby> 美化 <rt>  Ricing </rt></ruby>截图的一部分。

由于其 UI 没有传统的手柄和菜单，它给应用一个统一的外观。

#### 播放列表

它会从你添加的文件夹中的文件自动生成一个播放列表，显示在左手边的侧边栏。

你可以在左上角看到整个播放列表将播放多长时间的音乐。点击“勾选”符号，你可以选择歌曲，并从播放列表中删除它们。

如果你愿意，可以隐藏播放列表的侧边栏。

#### 音乐播放选项

你可以在界面上看到歌曲的进度。该播放器与键盘上的媒体控制按钮整合得很好。你可以用专用的媒体键来播放、暂停和改变曲目（如果你的系统上有）。

Amberol 为你提供了一些播放音乐的选项。你可以打开随机播放功能，按随机顺序播放音乐。你也可以单曲循环，直到你厌倦它。

底部的汉堡菜单让你可以选择添加文件或文件夹，并显示可用的键盘快捷方式。

你也可以从这里禁用 UI 颜色变化以配合专辑封面。

### 在 Linux 上安装 Amberol

Amberol 是 [以 Flatpak 形式提供的](https://flathub.org/apps/details/io.bassi.Amberol)。请确保 [你的系统已启用 Flatpak 支持](https://itsfoss.com/flatpak-guide/)。

要安装 Amberol，请打开终端并使用以下命令：

```
flatpak install flathub io.bassi.Amberol

```

安装完毕后，在菜单中搜索该应用，并点击启动。

第一次运行时，它会要求你添加音乐文件或文件夹。你也可以拖放文件播放。

### 总结

就个人而言，我更喜欢流媒体服务，因为我没有本机音乐珍藏。但我知道有的人有大量的 CD 收藏，现在都保存在硬盘上。

Amberol 是一个外观漂亮的应用，对于播放本机音乐来说，它足够好。最吸引人的是它基于专辑封面的自适应用户界面。

请你试试它，并在评论区分享你的经验。

---

via: <https://itsfoss.com/amberol-music-player/>

作者：[Abhishek Prakash](https://itsfoss.com/author/abhishek/) 选题：[lkxed](https://github.com/lkxed) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Summary: • 计算机历史博物馆恢复了 21 部 1976 年传奇性计算机会议的视频 • 秘密运行中的世界上最强大的超级计算机 • 通用汽车用 3D 打印来解决汽车生产短缺的零件

# 硬核观察 #665 计算机历史博物馆恢复了 21 部 1976 年传奇性计算机会议的视频

### 计算机历史博物馆恢复了 21 部 1976 年传奇性计算机会议的视频

在 1976 年夏天，来自世界各地的数十位计算机领域的顶级工程师、科学家和软件先锋们聚集在一起，在美国洛斯阿拉莫斯国家实验室聚会了五天，回顾了计算机界的前 25 年历史。在这些修复的视频中，与会者们讲述了许多当时鲜为人知的事情。比如，美国最早的大型电子计算机 ENIAC 的共同发明人约翰•毛奇里讨论了它的严重问题，ENIAC 必须每天 24 小时保持通电，以保持其 18000 个真空管的健康。计算机历史学家布莱恩•兰德尔教授首次披露了英国二战时期破译德军密码的专用计算机，还介绍了艾伦•图灵在二战时发挥的重大作用。

>
> **[消息来源：CHM](https://computerhistory.org/blog/computings-woodstock/)**
>
>
>

>
> 老王点评：之前在翻译红帽《代码英雄》系列播客时接触过这段历史的一部分，真是想想波澜壮阔啊。
>
>
>

### 秘密运行中的世界上最强大的超级计算机

在最近一期的 TOP500 中，美国橡树岭国家实验室建造的 Frontier 以第一个 E 级超算夺得了榜首。TOP500 测量的是一台机器通过运行名为 LINPACK 基准的软件解决大量方程式的速度，这给出了一个以每秒浮点运算（FLOPS）为单位的数值。但并不是所有的超级计算机都会被列出，只有在其所有者运行该基准并提交结果的情况下才会出现在榜单。很多机构，包括一些大学都不会提交其基准数据来加入榜单。超级计算机专家们的 [共识](https://www.hpcwire.com/2021/11/24/three-chinese-exascale-systems-detailed-at-sc21-two-operational-and-one-delayed/) 是，中国自 2021 年以来至少有两台被称为“海洋之光”和“天河三号”的超大规模机器在运行，并且正在由曙光研发的第三台超算达到了 2E 级。这些“秘密”超算的数据是通过一些不相关的论文披露出来的。

>
> **[消息来源：MSN](https://www.msn.com/en-us/news/technology/are-the-worlds-most-powerful-supercomputers-operating-in-secret/ar-AAY8QQn)**
>
>
>

>
> 老王点评：只能说通过上榜来获取自信心的时代已经过去了，现在大家都埋头竞争呢。
>
>
>

### 通用汽车用 3D 打印来解决汽车生产短缺的零件

通用汽车在 2020 年对 3D 打印技术进行了重大投资，建立了 1.5 万平方英尺面积的增材制造中心。雪佛兰的工程师们对一款新的 SUV 的设计做了一个后期改动，需要创造一个额外的零件，以填补了尾部的一个缺口。开发注射成型的模具将花费太多时间，从而延误了 3 万辆汽车的交付。通过 3D 打印，工程师们能够快速设计并使用符合通用汽车标准的柔性材料打印出这些部件。而从设计到完成只用了五个星期。这还不到走注射成型路线所需时间的一半。

>
> **[消息来源：CNET](https://www.cnet.com/roadshow/news/chevy-tahoe-3d-parts/)**
>
>
>

>
> 老王点评：虽然成本高点，但是在这种应急的时候还真是非常灵活，也节省了很多时间成本。
>
>
>


分裂使 Linux 超越 Windows 的梦想破灭了

Summary: Linux 桌面将永远不会像 Windows 曾经那样庞大。在 DaaS 的兴起和桌面向智能手机的沦陷之间，它不可能做到。但是，它可能会默认成为最受欢迎的、真正的传统桌面。

开源界都是大佬，一言不合自己弄个桌面。

明人不说暗话，我喜欢Linux桌面！

明人不说暗话，我喜欢Linux桌面！

# 分裂使 Linux 超越 Windows 的梦想破灭了

<img src="content_image/album_202206_13_103642ugkq5az15ppkqg1o.jpg" alt="" title="">

最近，The Register 的 Liam Proven 写了一篇关于 [最恼人的桌面 Linux 发行版](/article-14678-1.html) 的文章。他启发我写了这篇文章。

Proven 指出，Distrowatch 目前列出了多达 [270 个 Linux 发行版](https://distrowatch.com/)。当然，没有人能够都一一了解所有的这些发行版。但是，甚至在 GNOME 和 KDE 的界面大辩论之前，从 Bash 和 [Zsh](https://www.zsh.org/) 之争开始，我就一直在报道 Linux 桌面，并且曾经是一本现在已经停刊的名为《Linux 桌面》杂志的主编，我想我比任何其他用过 Windows PC 之外的计算机的人使用过更多的桌面。简而言之，[我超爱 Linux 桌面](https://www.theregister.com/2022/04/13/linux_column/)。

许多 Linux 桌面发行版都很棒。多年来，我一直是 [Linux Mint](https://linuxmint.com/) 的忠实粉丝。我也很喜欢其它桌面发行版：[Fedora](https://getfedora.org/)、[openSUSE](https://www.opensuse.org/)、[Ubuntu](https://ubuntu.com/) 和 [MX Linux](https://mxlinux.org/)，排名不分先后。但是你知道吗？**这就是问题。**

我们有很多优秀的 Linux 桌面发行版，但这意味着它们中没有一个能获得足够的市场份额，从而在 **整个市场** 上产生任何真正的影响。

自从人们开始谈论何时 Linux 能在桌面上击败 Windows 以来，情况一直如此。尽管我们可能梦想着一个真正的 Linux 桌面年到来，**但它从未到来**。正如 Forrester 高级分析师 Andrew Hewitt 最近指出的那样，“总的来说，[只有 1% 的员工](https://www.windowscentral.com/can-linux-win-desktop-pc) 报告说他们用于工作的主要笔记本电脑使用了 Linux。而 60%的人仍在使用 Windows……。Linux **不太可能超越** Windows 成为主要操作系统"。

**他没有说错。**

这并不是说 Linux 不能成为一个成功的终端用户环境。事实上，它是，你可以说 **Linux 是最成功的终端用户操作系统**，而不是 Windows。这是因为现在有 [超过 30 亿部安卓手机](https://www.theregister.com/2021/08/25/linux_kernel_30_years_old/)，而安卓只是一个专门针对智能手机的 Linux 发行版。

它并不是唯一隐藏在众目睽睽之下的 Linux。你会在每所学校、在我的旅行袋中发现 Chromebook，它无处不在。Chrome OS 只是 [在 Linux 基础上](https://www.zdnet.com/article/the-secret-origins-of-googles-chrome-os/) 将 Chrome 浏览器和界面进行了改造。

把这一切加起来，你可以直截了当地说，Linux 实际上早就是最受欢迎的终端用户操作系统了。

但这不是 Linux 桌面爱好者想要的。他们希望 Windows 在 Linux 重压之下被压垮，跪地求饶。

对不起。**这不可能发生**。Linus Torvalds 已经告诉我们为什么我们永远不会在每台 PC 上看到一个经典的 Linux 桌面：[碎片化](https://www.youtube.com/watch?v=VHFdoFKDuQA)。

想一想吧。除了 200 多个发行版之外，还有 [21 种不同的桌面界面](https://www.theregister.com/2022/05/17/linux_desktop_feature/)、六种以上的不同的主要软件安装方式，如 Debian 软件包管理系统（[DPKG](https://www.debian.org/doc/manuals/debian-reference/ch02.en.html)）、红帽软件包管理器（[RPM](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/5/html/deployment_guide/ch-rpm)）、[Pacman](https://wiki.archlinux.org/title/Pacman)、[Zypper](https://en.opensuse.org/Portal:Zypper)，以及其他的方式。然后还有所有较新的容器化安装程序的方法，包括 [Flatpak](https://flatpak.org/)、[Snap](https://snapcraft.io/) 和 [AppImage](https://appimage.org/)。

我几乎不能把它们全都搞清楚，而这甚至还是我工作的一部分！你怎么能 **指望普通用户来理解这一切** 呢？不可能。

像 [Canonical](https://canonical.com/)、[红帽](https://www.redhat.com/en) 和 [SUSE](https://www.suse.com/) 这样主要的 Linux 发行商，没有一个 **真正关心 Linux 桌面**。当然，他们有 Linux 桌面发行版。他们也是 Linux 桌面的主要影响者。但他们的收入来自服务器、容器、云和物联网（IoT）。桌面？拜托。我们应该 **庆幸** 他们在桌面上花费了那么多资源。

现在，说了这么多，我 **不想** 让你得到这样的印象：我不认为传统的 Linux 桌面很重要。**事实上，我认为它很关键**。

你看，微软正在放弃传统的基于 PC 的桌面。哦，Windows 并没有消失，但它正在转移。在其对未来的预测中，微软认为基于 Azure 的 [桌面即服务（DaaS）](https://www.computerworld.com/article/3656694/we-re-one-step-closer-to-windows-in-the-cloud.html) 是其未来。当然，Windows 用户仍然会在他们的桌子上看到一个看起来像 PC 的东西，但实际上它只是一个连接到 Windows 365 Cloud PC 的智能终端。真正的计算智能将在云中。

这意味着，真正的桌面操作系统的未来将掌握在拥有 macOS 的苹果公司和拥有 Linux 的我们手中。作为一个记得从中央控制的大型机和小型机向个人拥有的 PC 过渡的人，我不想回到一个所有权力属于微软或其他公司的世界。

Linux 桌面将永远不会像 Windows 曾经那样庞大。在 DaaS 的兴起和桌面向智能手机的沦陷之间，它不可能做到。但是，它可能会 **默认成为最受欢迎的、真正的传统桌面**。

那么 2028 年将是 Linux 桌面年吗？

你怎么看？

---

via: <https://www.theregister.com/2022/06/08/linux_desktop_blues/>

作者：[Steven J. Vaughan-Nichols](https://www.theregister.com/Author/Steven-J-Vaughan-Nichols) 选题：[wxy](https://github.com/wxy) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](/article-14678-1.html) 荣誉推出


Linux 中国开通播客频道：“开源朗读者”和“硬核观察”

Summary: 前一段时间，我的老朋友淮晋阳跟我说，为什么不将一些文章变成朗读版的呢？

前一段时间，我的老朋友淮晋阳跟我说，为什么不将一些文章变成朗读版的呢？

# Linux 中国开通播客频道：“开源朗读者”和“硬核观察”

<img src="content_image/album_202206_13_141209r6jocwyw2tj2j5ws.jpg" alt="" title="">

前一段时间，我的老朋友淮晋阳跟我说，为什么不将一些文章变成朗读版的呢？这样可以让更多喜欢听朗读的爱好者们“听到”，而不是“看到”开源的文章？对于这样的建议，我欣然采纳。于是，我们发起了一个新的朗读栏目：**开源朗读者**。对一些文章，尤其是一些评论性的文章，进行了朗读配音。

很快，在淮晋阳制作出第一篇朗读版的《[Linux 太难了吗？你需要了解这五点](/article-14429-1.html)》，并在他的带动下，张锦航、若愚、六开箱等开源贡献者们也纷纷加入了朗读者行列，还有更多的开源朗读者们也在积极录制中。感兴趣加入开源朗读者行列的，请微信公众号内私信我。

在这些音频发布后，我们也收到了一些播客爱好者的建议，希望在通用的播客客户端上也能订阅、收听到这些有意义的音频节目。

在我们的技术合伙人白宦成的支持下，很快，我们就开发了两个播客频道：

* **开源朗读者**：由朗读者们深情朗读各种值得分享给大家的文章，一般时长在 10 分钟左右。
* **硬核观察**：这是对我们每天的《硬核观察》栏目的音频重制，一般时长在 3 分钟左右。

这两个播客频道可以在喜马拉雅应用上根据名称搜索到；也可以苹果的“播客”、“小宇宙”等通用型播客客户端搜索到。如果你搜索不到，也可以直接输入它们的 RSS 地址：

* 开源朗读者： <https://linux.cn/podcast.xml>
* 硬核观察： <https://linux.cn/insight.xml>

欢迎收听！


硬核观察 #666 相信 AI 有生命的谷歌工程师被勒令休假

Summary: • 相信 AI 有生命的谷歌工程师被勒令休假 • 因硬盘故障，数十个 GitLab 开源项目开发受阻 • 开源软件公司 Odoo 估值 32 亿欧元

我相信只要能处理信息的东西都是有生命的，因为生所以死，中国的deepin是不是开源的？现在数字基建，IT学生很多，deepin发展前景感觉很好

AI有了意识，会如何看目前的人类文明？

我觉得这是把 Mesa、X.Org、Wayland，以及 LibreOffice 和 GStreamer 一网打尽的好机会！

你可能对git有啥误解。

# 硬核观察 #666 相信 AI 有生命的谷歌工程师被勒令休假

### 相信 AI 有生命的谷歌工程师被勒令休假

谷歌的一位 AI 工程师 Blake Lemoine，从去年秋天开始与公司的聊天机器人 LaMDA 对话。LaMDA 运用了谷歌最先进的大型语言模型，使用从互联网上收集的数万亿词汇进行训练。在与 LaMDA 交流期间，他认为 AI 有了意识。比如他问 LaMDA 最害怕什么？LaMDA 回答说，它恐惧于被关闭。他继续追问：就像死亡？LaMDA 说：就像是死亡。因此，Blake 认为这证明 LaMDA 有了意识。在向上级展示了证据无果后他决定公开这件事，然后被公司勒令休假。在被封锁账号前，他给有 200 人的谷歌机器学习列表发帖说，“LaMDA 是有意识的，……是一个可爱的孩子，……我不在的时候请好好照顾它。”不独是 Blake，也有其它谷歌专家认为神经网络这种模仿人脑的架构，正在向意识迈进。

>
> **[消息来源：MSN](https://www.msn.com/en-us/news/technology/the-google-engineer-who-thinks-the-company-s-ai-has-come-to-life/ar-AAYliU1)**
>
>
>

>
> 老王点评：不是工程师疯了，就是 AI 成精了 —— 国外的建国后允许成精。
>
>
>

### 因硬盘故障，数十个 GitLab 开源项目开发受阻

[FreeDesktop.org](http://freedesktop.org/) 的 GitLab 服务承载着 Mesa、[X.Org](http://x.org/)、Wayland，以及 LibreOffice 和 GStreamer 等开源项目。由于硬盘故障，[FreeDesktop.org](http://freedesktop.org/) 的 GitLab 从 11 日某个时间开始一直处于关闭状态，并且没有恢复正常的预告时间。管理员们在努力恢复硬盘 RAID，但到目前为止没有结果。而且，两位管理员还宣布要休息一天。

>
> **[消息来源：Phoronix](https://www.phoronix.com/scan.php?page=news_item&px=FreeDesktop-GitLab-2022-Crash)**
>
>
>

>
> 老王点评：虽然由于 Git 的特性，开源仓库内的数据基本上不会受到损害，但是这个事故其实暴露了很多开源项目在基础设施投入方面的不足。而且，我觉得国外的工程师们心里素质真好，无论如何该休息也是要休息的。
>
>
>

### 开源软件公司 Odoo 估值 32 亿欧元

总部位于比利时的 Odoo 公司成立于 2005 年，为全球中小企业提供一体化的商业软件，专注于开源的 ERP 和 CRM 软件。在不到一年前得到了 1.8 亿欧元投资，估值 20 亿欧元后，最近得到的 1.12 亿欧元使其估值进一步提高到 32 亿欧元。该公司计划在全球范围内开设六家新办事处并增聘约 1800 名员工。Odoo 目前有 700 多万用户在使用它的解决方案，预计今年的营业额约为 3 亿欧元，并少量盈利。

>
> **[消息来源：tech.eu](https://tech.eu/2022/06/08/odoo-a-leader-in-open-source-business-software/)**
>
>
>

>
> 老王点评：开源技术公司越来越得到投资界的青睐，不过前提是属于头部。
>
>
>


倒计时 1 天！华为伙伴暨开发者大会 2022 计算精彩亮点抢先看

Summary: 2022 年 6 月 15 日，以“因聚而生 为你所能”为主题的 华为伙伴暨开发者大会 2022 将隆重开启。

# 倒计时 1 天！华为伙伴暨开发者大会 2022 计算精彩亮点抢先看

>
> 2022 年 6 月 15 日，以“因聚而生 为你所能”为主题的 [华为伙伴暨开发者大会 2022](https://e-campaign.huawei.com/campaign/partner-developer2022/) 将隆重开启。
>
>
>

<img src="content_image/album_202206_14_081359nkyd57dtcmtqkqhh.jpg" alt="" title="">

大会期间，华为将分享并重磅发布计算产业的最新生态进展、技术创新和赋能计划，携手伙伴与开发者共促计算产业繁荣发展，共赢数智未来。

### 昇腾 AI 系列重磅发布

人工智能正在加速行业落地，昇腾 AI 生态发展恰逢其时。过去一年多，基于昇腾 AI 基础软硬件平台的深圳、武汉、成都、西安、中原、南京等多地人工智能计算中心已上线运营，AI 的算力像水和电一样，成为一种新的城市公共资源，让智能触手可及。

随着全国各地人工智能计算中心的建设，未来必将走向人工智能算力网络。2021 年 9 月，中国科学技术信息研究所联合鹏城实验室、AITISA（人工智能产业技术创新战略联盟），再次发布《人工智能计算中心发展白皮书 2.0》——从人工智能计算中心走向人工智能算力网络，指引算力网络的建设。在科技部的指导下，2021 年底鹏城实验室牵头成立了人工智能算力网络推进联盟（简称“智算网络联盟”），共同推进 AI 基础设施建设。在本次大会上，中国首个人工智能算力网络即将上线。

过去一年多，基于人工智能计算中心孵化出多个业界首个大模型，并成立大模型产业联盟，推动大模型产业化推广。未来，在人工智能算力网络大算力支撑下，大模型也将迎来新的发展阶段，华为将详细介绍大模型规划、开发、产业化体系，赋能更多的伙伴和开发者，推动大模型产业化推广。此外，随着人工智能融入各行各业，面向各行业领域，华为将分享人工智能与行业智能化升级的最新思考，并发布系列行业解决方案，使能行业数字化转型和智能升级。

### 欧拉重磅发布

欧拉于 2021 年升级为数字基础设施开源操作系统，今年 3 月首个数字基础设施全场景版本 openEuler 22.03 LTS 已发布，支持服务器、云计算、边缘计算和嵌入式等场景。欧拉开源两年以来，产业共建成果显著，发展超越预期。本次大会上，社区最新的进展将完整呈现，同时九家操作系统领先企业将正式发布基于 openEuler 22.03 LTS 的操作系统商业发行版，将社区创新成果应用于千行百业。

### 技术创新和工具升级，全面提升开发者体验

除了大会主题演讲外，“鲲鹏开发者峰会 2022”与数十场鲲鹏、昇腾 AI 技术专题，将通过最前沿的技术思考、最纯粹的技术分享、最干货的应用实践、给开发者带来全新开发体验，帮助开发者更加便捷地进行极简开发。

其中，“鲲鹏开发者峰会 2022”与鲲鹏技术专题涵盖欧拉操作系统、高斯数据库、鲲鹏开发者套件 DevKit、鲲鹏应用使能套件 BoostKit 等最新技术创新、行业应用最佳实践、升级开发者工具的运作方式及使用介绍，帮助开发者全面提升开发效率和应用性能。

昇腾 AI 技术专场则囊括昇思 MindSpore AI 框架、昇腾应用使能 MindX、昇腾 MindStudio 应用开发等最新特性介绍、在行业智应用、模型调优等领域与开发者共探行业发展新方向。并且，还将通过实际案例解析，给开发者全面讲解昇腾 AI 产品使用场景及开发流程，帮助开发者学会更高效率、更低成本地开发AI新场景。

### 产教融合最新举措和激励发布

任何产业的发展，都离不开人才都培育，而人才培育则离不开高校的支持。华为联合教育部和高校共同建设 72 个教育部 - 华为智能基座产教融合协同育人基地，赋能 3000+ 先锋教师，72 个学校已开课 1500 门次，覆盖 30 万+ 学生，已陆续把鲲鹏、昇腾 AI、欧拉、昇思 MindSpore 等根技术融入高校，让同学们所学和产业所需紧密结合，而且深度参与到新技术、新架构、新生态的创新构建过程中。在本次“智能基座人才发展峰会”中，将发布最新举措和激励，推动“产教融合”深化发展，为计算产业注入源动力。

本次大会还将与全国 72 所高校联动，通过专家进校、学校组织、线上参与等不同形式与全国高校人才进行互动，共话开发者前路与征途，共同畅想技术应用的无限可能。

千行百业的数字化转型和智能化升级，需要众多合作伙伴的参与和协作，为进一步推进生态发展，充分发挥企业责任，华为还将发布多项伙伴 & 开发者激励计划，激励伙伴的商业增长和开发者的能力提升，共促产业生态繁荣。华为伙伴暨开发者大会 2022 期间干货满满的分享，将为计算产业伙伴与“根技术”开发者带来一场年度盛宴，精彩内容不容错过！

更多信息可访问鲲鹏社区： [hikunpeng.com](https://hikunpeng.com) 、昇腾社区：[hiascend.com](https://hiascend.com)。


OpenInfra 基金会启动“定向资助”以支持开源项目

# OpenInfra 基金会启动“定向资助”以支持开源项目

<img src="content_image/album_202206_14_085751mlv2v4pgt13zpldl.png" alt="OpenInfra" title="OpenInfra">

OpenInfra 基金会的前身为 OpenStack 基金会，几年前它将范围扩展到其旗舰项目之外，于是改了名字。2022 年 6 月 7 日，它宣布了一种有趣的新方式，让企业资助基金会内的开源项目。一般来说，开源基金会的企业成员通过支付会员费来支持该组织，然后基金会按照他们认为合适的方式分发这些费用。OpenInfra 基金会现在推出了一种新的“定向资助”模式，允许成员将他们的资金直接用于项目。

此前，基金会并不允许这样做，因为正如 Bryce 指出的那样，它可能会产生混合激励和付费游戏动态，而该组织一直试图避免这种情况。然而，社区对支持特定项目有很大的兴趣，这是有道理的，因为该基金会现在拥有更多种类的项目，但并不是每个成员都对每个项目进行了大量投入。

Bryce 表示，基金会的领导层和董事会，花费了大量时间来考虑，如何使基金会的核心原则与这种新模式相协调。因此，该模型试图将过去十年运行良好的 OpenStack/OpenInfra 技术治理模型的优点，与这些新的财务考虑相结合。

在这种“定向资助”模式下，每个新项目都将拥有自己的法人实体来持有项目资金。为确保新项目的合法性，OpenInfra 白金会员（目前为 9 家，包括蚂蚁集团、华为、Meta、微软和红帽）必须担任项目的发起人，之后其他组织才能加入项目基金。如果赞助公司还不是 OpenInfra 成员，则必须成为成员。然后，所有这些资助成员组成一个项目基金管理委员会，决定创建预算的费用。与此同时，OpenInfra 基金会将为这些项目提供社区建设服务。

这种新模式暂时只适用于加入基金会的新项目。Bryce 和 Collier 指出，组织可能会在一些现有项目中追溯应用这种新模式，但这个考虑目前不在路线图上。

自从将范围扩展到 OpenStack 之外后，OpenInfra 基金会增加了一些新项目，例如用于提高容器安全性的 Kata Containers、用于基础设施生命周期管理的 Airship、Startling X 边缘计算堆栈以及 Zuul CI/CD 平台。

“我们从每个成功的项目中学到的最重要的一点是，协作是关键，支持生态系统的范围越广越好，” OpenInfra 基金会总经理 Thierry Carrez 说，“事实上，我们发现最成功的开源项目是由多家公司资助的，因为他们能够整合资源以实现更高的回报率。”

这种新模式显然是 OpenInfra 基金会引入新项目和新成员的一种方式。正如领导团队欣然承认的那样，其在多方生态系统中管理开源项目的模型 —— 无论是通过新的定向资金还是更传统的方法 —— 可能并不适合每个项目。即使 OpenInfra 基金会只收到一小部分项目，随着对这些复杂云基础设施项目需求的增长，开源项目的数量也在增加，同时它们也变得更加复杂。

基金会还宣布了其各个项目的几个里程碑版本的发布，包括 Kata Containers 2.0 版、Zuul 5.0 版和 StarlingX 6.0 。

Collier 说：“基金会今年庆祝成立 10 周年，在展望下一个十年的开放基础设施之际，我们正在推动我们的模型如此成功的关键，那就是：将希望合作的公司和个人联合起来，为他们提供一个框架和有效协作的工具，并帮助他们投资资金以最好地帮助他们关心的项目。”

---

via: <https://www.opensourceforu.com/2022/06/openinfra-foundation-launches-directed-funding-to-support-open-source-projects/>

作者：[Laveesh Kocher](https://www.opensourceforu.com/author/laveesh-kocher/) 选题：[lkxed](https://github.com/lkxed) 译者：[lkxed](https://github.com/lkxed) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


如何通过 chroot 恢复 Arch Linux 系统

Summary: 这个快速指南解释了恢复 Arch Linux 安装的一些方便步骤。

这个快速指南解释了恢复 Arch Linux 安装的一些方便步骤。

# 如何通过 chroot 恢复 Arch Linux 系统

>
> 这个快速指南解释了恢复 Arch Linux 安装的一些方便步骤。
>
>
>

作为一个滚动发布的版本，[Arch Linux](https://www.debugpoint.com/tag/arch-linux) 中有时会出现一些问题。不是因为你自己的行为，而是数以百计的其他原因，如新内核与你的硬件或软件的兼容性。但是，Arch Linux 仍然很棒，它提供了最新的软件包和应用。

但有时，它也会给你带来麻烦，你最终只能看到一个闪烁的光标，其他什么都没有。

所以，在这种情况下，与其重新格式化或重新安装，不如在放弃希望之前尝试恢复安装和数据。本指南概述了这个方向的一些步骤。

### 恢复 Arch Linux 安装

第一步是用 Arch Linux 创建一个可启动的<ruby> 现场 <rt>  Live </rt></ruby> USB。从 [这个链接](https://archlinux.org/download/) 下载 .ISO 并创建一个可启动的 USB。你可以查看这个 [如何使用 Etcher 创建可启动的 USB](https://www.debugpoint.com/2021/01/etcher-bootable-usb-linux/) 的指南。记住这一步需要另一个稳定的工作系统，因为你目前的系统不能使用。

你需要知道你的 Arch Linux 安装在哪个分区上。这是一个非常重要的步骤。如果你不知道，你可以用 GParted 来查找。或者在你的 GRUB 菜单中查看，或者你可以运行下面的命令来了解。这将列出你所有的磁盘分区及其大小、标签：

```
sudo lsblk -o name,mountpoint,label,size,uuid

```

完成后，插入 USB 盘并从它启动。你应该在现场介质中看到 Arch Linux 的提示符。

现在，用下面的方法挂载 Arch Linux 分区。记得把 `/dev/sda3` 改成你对应的分区。

```
mount /dev/sda3 /mnt
arch-chroot /mnt

```

`arch-chroot` 命令将在终端挂载你的 Arch Linux 分区，所以用你的 Arch 凭证登录。现在，在这个阶段，根据你的需要，你有以下选择。

* 你可以通过 `/home` 文件夹来备份你的数据。如果，故障排除方式无效的话。你可以把文件复制到外部 USB 或其他分区。
* 核查日志文件，特别是 pacman 日志。因为，不稳定的系统可能是由升级某些软件包引起的，如图形驱动或任何其他驱动。根据日志，如果你需要的话，可以降级任何特定的软件包。

你可以使用下面的命令来查看 pacman 日志文件的最后 200 行，以找出任何失败的项目或依赖性删除。

```
tail -n 200 /var/log/pacman.log | less

```

上面的命令给出了你的 `pacman.log` 文件末尾的 200 行来验证。现在，仔细检查哪些软件包在你成功启动后被更新了。

并记下软件包的名称和版本。你可以尝试逐一降级软件包，或者如果你认为某个特定的软件包产生了问题。使用 `pacman -U` 开关来降级。

```
pacman -U <package name>

```

如果有的话，你可以在降级后运行以下命令来启动你的 Arch 系统。

```
exec /sbin/init

```

检查你的显示管理器的状态，是否有任何错误。有时，显示管理器会产生一个问题，无法与 X 服务器通信。例如，如果你正在使用 Lightdm，那么你可以通过以下方式检查它的状态。

```
systemctl status lightdm

```

或者，可以通过下面的命令启动它，并检查出现了错误。

```
lightdm --test-mode --debug

```

下面是一个 Lightdm 失败的例子，它导致了一个不稳定的 Arch 系统。

或者通过使用 `startx` 启动 X 服务器来检查。

```
startx

```

根据我的经验，如果你在上述命令中看到错误，尝试安装另一个显示管理器并启用它，如 sddm。它可能会消除这个错误。

根据你的系统状态，尝试上述步骤，并进行故障排除。对于特定于显示管理器 lightdm 的错误，我们有一个 [指南](https://www.debugpoint.com/2021/03/failed-to-start-lightdm/)，你可以看看。

如果你使用的是 sddm，那么请查看 [这些故障排除步骤](https://wiki.archlinux.org/title/SDDM#Troubleshooting)。

### 总结

每个安装环境都是不同的。上述步骤可能对你不起作用。但它值得一试，根据经验，它是有效的。如果它起作用，那么，对你来说是好事。无论哪种方式，请在下面的评论区中告诉我结果如何。

---

via: <https://www.debugpoint.com/2021/07/recover-arch-linux/>

作者：[Arindam](https://www.debugpoint.com/author/admin1/) 选题：[lkxed](https://github.com/lkxed) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


详解在 Ubuntu 中引导到救援模式或紧急模式

Summary: 这篇教程将介绍如何在 Ubuntu 22.04、20.04 和 18.04 LTS 版本中引导到救援模式或紧急模式。

# 详解在 Ubuntu 中引导到救援模式或紧急模式

这篇教程将介绍如何在 Ubuntu 22.04、20.04 和 18.04 LTS 版本中引导到 <ruby> 救援 <rt>  Rescue </rt></ruby> 模式或 <ruby> 紧急 <rt>  Emergency </rt></ruby> 模式。

>
> 你可能已经知道，在 RHEL 7 、RHEL 8 、Ubuntu 16.04 LTS 及其更新的版本的 Linux 发行版中 <ruby> 运行等级 <rt>  Runlevels </rt></ruby> 已经被 <ruby> 系统目标 <rt>  Systemd target </rt></ruby> 所替代。更多关于 <ruby> 运行等级 <rt>  Runlevel </rt></ruby> 和 <ruby> 系统目标 <rt>  Systemd targets </rt></ruby> 的信息，参考 [这篇指南](https://ostechnix.com/check-runlevel-linux/) 。
>
>
>

这篇指南是针对 Ubuntu 编写的，但是，下面所给的步骤应该也适用于大多数使用 systemd 作为默认服务管理器的 Linux 发行版。

在进入主题前，让我们简单的理解：什么是 <ruby> 救援 <rt>  rescue </rt></ruby> 模式 和 <ruby> 紧急 <rt>  Emergency </rt></ruby> 模式，以及这两种模式的目的是什么。

### 什么是救援模式？

在 Linux 发行版中，救援模式等效于使用 SysV 作为默认的服务器管理器的 <ruby> 单用户 <rt>  single user </rt></ruby> 模式。在救援模式中，将挂载所有的本地文件系统，将仅启动一些重要的服务。但是，不会启动一般的服务（例如，网络服务）。

救援模式在不能正常引导系统的情况下是很有用的。此外，我们可以在救援模式下执行一些重要的救援操作，例如，[重新设置 root 密码](https://ostechnix.com/how-to-reset-or-recover-root-user-password-in-linux/) 。

### 什么是紧急模式？

与救援模式相比，在紧急模式中，不会启动任何的东西。不会启动服务、不会挂载挂载点、不会建立套接字、什么都不会启动。你将所拥有的只是一个 **原始的 shell** 。紧急模式适用于调试目的。

首先，我们将看到如何在 Ubuntu 22.04 和 20.04 LTS 发行版中引导到救援模式或紧急模式。在 Ubuntu 22.04 和 20.04 LTS 中的过程是完全相同的！

### 在 Ubuntu 22.04 / 20.04 LTS 中引导到救援模式

我们可以使用两种方法来引导到救援模式。

#### 方法 1

打开你的 Ubuntu 系统。在 BIOS 徽标出现后，按下 `ESC` 按键来显示 GRUB 菜单。

在 GRUB 菜单中，选择第一项，并按下 `e` 按键来编辑它。

按下 `↓` 按键，并找到以单词 `linux` 开头的一行代码，并在其结尾处添加下面的一行代码。为到达其结尾处，只需要按下 `Ctrl + e` 组合键，或使用你键盘上的 `END` 按键或 `←`/`→` 按键。

```
systemd.unit=rescue.target

```

在添加上面的代码行后，按下 `Ctrl + x` 组合键或按下 `F10` 按键来引导到救援模式。

数秒后，你将作为 root 用户来登录到救援模式（即单用户模式）。将会提示你按下回车键来进入维护。

下图是 Ubuntu 22.04 / 20.04 LTS 系统的救援模式的样子：

现在，在救援模式中做你想做的任何事。在救援模式中，在你执行任何操作前，你可能需要以 读/写模式来挂载根（`/`）文件系统。

```
mount -n -o remount,rw /

```

在完成后，按下 `Ctrl + d` 组合键来引导到正常模式。或者，你可以输入下面的任意一个命令来引导到正常模式。

```
systemctl default

```

或者，

```
exit

```

如果你想重新启动系统，而不是引导到正常的模式，输入：

```
systemctl reboot

```

#### 方法 2

在这种方法中，你不需要编辑 GRUB 启动菜单项目。

打开系统电源，并从 GRUB 启动菜单中选择 <ruby> Ubuntu 高级选项 <rt>  Advanced options for Ubuntu </rt></ruby>。

接下来，你将看到一个带有内核版本的可用的 Ubuntu 版本的列表。在 Ubuntu 中的 GRUB 启动菜单中选择 <ruby> 恢复模式 <rt>  Recovery mode </rt></ruby> 。

数秒后，你将看到 Ubuntu 的 <ruby> 恢复 <rt>  Recovery </rt></ruby> 菜单。从恢复菜单中，选择 <ruby> 进入 root 的 shell 提示符 <rt>  Drop to root shell prompt </rt></ruby> 选项 ，并按下回车键。

现在，你将进入维护。

通过输入下面的命令来 以读/写模式的方式 来挂载根（`/`）文件系统：

```
mount -n -o remount,rw /

```

在救援模式中做你想做的任何事。

在完成后，输入 `exit` 来返回到恢复菜单。

```
exit

```

最后，选择 <ruby> 救援正常启动 <rt>  Resume normal boot </rt></ruby> 选项，并按下回车键。

再次按下回车键来退出恢复模式，并继续引导到正常模式。

如果你不想引导到正常模式，从救援模式中输入 `reboot` 并按下回车键来重新启动你的系统。

### 在 Ubuntu 22.04 / 20.04 LTS 中引导到紧急模式

当 GRUB 菜单出现时，按下 `e` 按键来编辑它。

找到以单词 `linux` 开头的一行代码，并在其结尾处添加下面的一行代码：

```
systemd.unit=emergency.target

```

在添加上面的代码行后，按下 `Ctrl + x` 组合键，或按下 `F10` 按键来引导到紧急模式。

数秒后，你将作为 `root` 用户来进入维护。将会提示你按下回车键来进入紧急模式。

下图是 Ubuntu 22.04 / 20.04 LTS 系统的紧急模式的样子：

现在，在紧急模式中做你想做的任何事。在紧急模式中，在你执行任何操作前，你可能需要以读/写模式来挂载根（`/`）文件系统。

```
mount -n -o remount,rw /

```

在完成后，按下 `Ctrl + d` 组合键来引导到正常模式。或者，你可以输入下面的任意一个命令来引导到正常模式。

```
systemctl default

```

或者，

```
exit

```

如果你想重新启动系统，而不是引导到正常模式，输入：

```
systemctl reboot

```

### 在 Ubuntu 18.04 LTS 中引导到救援模式

启动你的 Ubuntu 系统。当 GRUB 菜单出现时，选择第一项并按下按键 `e` 来编辑。（为到达其行尾处，只需要按下 `Ctrl + e` 组合键，或使用你键盘上的 `END` 按键或 `←`/`→` 按键）：

如果你没有看到 GRUB 菜单，只需要在 BIOS 徽标出现后，按下 `ESC` 按键来显示 GRUB 菜单。

找到以单词 `linux` 开头的一行代码，并在其结尾处添加下面的一行代码（为到达其行尾处，只需要按下 `Ctrl + e` 组合键，或使用你键盘上的 END`按键或`←`/`→` 按键）：

```
systemd.unit=rescue.target

```

在添加上面的代码行后，只需要按下 `Ctrl + x` 组合键，或按下 `F10` 按键来引导到救援模式。数秒后，你将作为 `root` 用户进入维护（即单用户模式）。

下图是 Ubuntu 18.04 LTS 服务器系统的救援模式的样子：

接下来，输入下面的命令来挂载根（`/`）文件系统为读/写模式。

```
mount -n -o remount,rw /

```

### 在 Ubuntu 18.04 LTS 中引导到紧急模式

引导你的 Ubuntu 到紧急模式基本与上述方法相同。你所需要做的全部工作是，在编辑 GRUB 菜单时，将 `systemd.unit=rescue.target` 替换为 `systemd.unit=emergency.target` 。

在你添加 `systemd.unit=emergency.target` 后，按下 `Ctrl + x` 组合键，或按下 `F10` 按键来引导到紧急模式。

最后，你可以使用下面的命令来以读/写模式的方式来挂载根（`/`）文件系统：

```
mount -n -o remount,rw /

```

### 在救援模式和紧急模式之间切换

如果你正在救援模式中，你不必像我上述提到的那样来编辑 GRUB 的菜单启动项。相反，你只想要输入下面的命令来立刻切换到紧急模式：

```
systemctl emergency

```

同样，为从紧急模式切换到救援模式，输入：

```
systemctl rescue

```

### 总结

现在，你知道了什么是救援模式和紧急模式，以及如何在 Ubuntu 22.04 、20.04 和 18.04 LTS 系统中启动到这些模式。正如我已经提到的，在这里提供的这些步骤应该也适用于大多数当前使用 systemd 作为默认服务管理器的 Linux 发行版。

---

via: <https://ostechnix.com/how-to-boot-into-rescue-mode-or-emergency-mode-in-ubuntu-18-04/>

作者：[sk](https://ostechnix.com/author/sk/) 选题：[lkxed](https://github.com/lkxed) 译者：[robsean](https://github.com/robsean) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出