Moosync：一款充满特色的开源音乐播放器

![](/data/attachment/album/202310/30/062404f6xrcor9t6s1b9lc.jpg)

>
> Moosync 音乐播放器是一个适用于本地收藏与流媒体音乐的魅力十足的跨平台应用。
>
>
>

想听好音乐吗？?

首次亮相的**跨平台开源音乐播放器 Moosync** ，希望成为“欢迎全社区参与”的音乐播放器。

过去我们曾介绍过像 [Harmonoid](https://itsfoss.com/harmonoid/) 和 [MusicPod](https://news.itsfoss.com/musicpod/) 这样的应用，但是它们**主要是专注于离线使用**。

与之不同的是，Moosync 的独特之处。让我告诉你为什么。

### Moosync：概况 ⭐

![](/data/attachment/album/202310/30/062435lt0q9s3s49qhzksw.png)

Moosync 是一个主要基于 **Vue** 和 **TypeScript** 编程语言开发的音乐播放器。

Moosync **高度可定制**且支持 [YouTube](https://www.youtube.com/)、[Spotify](https://open.spotify.com/) 以及 [LastFM](https://www.last.fm/) 等多种服务。其关键特性包含：

* 支持显示歌词
* 无广告播放
* 支持本地音乐文件

#### 初次体验 ??

在我在我的 Ubuntu 系统上安装它之后，我开始了**快速设置向导**。

首先设定我的音乐库的位置，它将会从此处获取本地音乐文件，过程包含了许多步骤。

![](/data/attachment/album/202310/30/062435q78x7dh2vo2vu4ux.png)

然后，显示了**可以连接的服务选项**。

我**试图连接我的 Spotify 账户**，然而尽管我向 Moosync 提供了需要的信息，**操作无法成功**。不过幸运的是，**这一步并非必要**，所以我选择跳过。

![](/data/attachment/album/202310/30/062436ar53idlb83d9tx8w.png)

随后，它显示了空白的 “<ruby> 所有歌曲 <rt>  All Songs </rt></ruby>” 标签页，由于目前我未连接任何服务或者本地文件，所以这里是空的。

![](/data/attachment/album/202310/30/062436kwyz4wy6cc2erzee.png)

考虑我没有本地音乐或 Spotify 音乐，我点击了 YouTube 过滤器并**搜寻我喜欢的曲目**以填充 Moosync。

搜索功能还包括歌曲、艺术家、播放列表和专辑的过滤器。

![](/data/attachment/album/202310/30/062437utwevzlxf0wxxv6l.png)

我可以以右键点击单曲，并添加至播放队列或者立即播放。除此之外还有其他选项，会有所不同。

![](/data/attachment/album/202310/30/062438x7zk7m3c6ik4mzk9.png)

我在 Spotify 数据库进行搜索时，尝试做相同操作，但不幸的是，我**必须要登录 Spotify 才能在 Moosync 使用它** 这一计划之前被搁置。

![](/data/attachment/album/202310/30/062439nvapbobkz3niiurl.png)

>
> ? 如果你在寻找更好的 Spotify 支持，我建议你尝试一下 [BlackHole](https://news.itsfoss.com/blackhole-music-app/) 这个音乐应用。
>
>
>

而我选择继续，去**了解这个音乐播放器**。进入 “<ruby> 队列 <rt>  Queue </rt></ruby>” 标签页或者点击应用程序右下角向上指向的箭头都可以访问它。

整齐的布局使人感到熟悉和舒适。

![](/data/attachment/album/202310/30/062439st7e83rp3t0e9917.png)

在 “<ruby> 所有歌曲 <rt>  All Songs </rt></ruby>” 标签页，我添加进 Moosync 的所有歌曲都在这，我可以**选择从列表开头播放**，或者**添加到当前队列**，甚至可以在其中**随机播放 100 首歌曲**。

![](/data/attachment/album/202310/30/062440eezlrrtt1e979d7z.png)

在 “<ruby> 播放列表 <rt>  Playlists </rt></ruby>” 标签页，我保存的所有来自 YouTube 的播放清单都在这。它还提供了本地文件和 YouTube 间的排序选项。

![](/data/attachment/album/202310/30/062442e3l3rlojrfbql483.png)

在 “<ruby> 专辑 <rt>  Albums </rt></ruby>” 标签页，我保存的所有专辑都以一个整齐的网格布局排列。

![](/data/attachment/album/202310/30/062444mf5fk5pv75p67oja.png)

类似的，“<ruby> 艺术家 <rt>  Artists </rt></ruby>” 标签页展示了我添加到 Moosync 库的艺术家。出于某种原因，它没有加载缩略图。

“<ruby> 类别 <rt>  Genres </rt></ruby>” 标签页我也跳过了，因为它**似乎不能正常工作**。

![](/data/attachment/album/202310/30/062444zzvy38zxy4wxw3yv.png)

最后是 “<ruby> 探索 <rt>  Explore </rt></ruby>” 标签页，这里显示了我**听过多少分钟的音乐**。

![](/data/attachment/album/202310/30/062446th8tuunq09zlurb4.png)

此外，**你可以在 Moosync 中找到许多有用的自定义设置**来优化你的使用体验。

首先在 “<ruby> 主题 <rt>  Theme </rt></ruby>”设置中，你可以在**三个主题**和**两种布局视图**中选择，还有选项**上传或设计自定义主题**。

![](/data/attachment/album/202310/30/062446skv5vu5xcvim5okk.png)

应用还有**许多扩展**，一种是**在 Discord 上开启丰富的存在支持**，另一种是**与 Soundcloud 集成**，此外还有很多。

![](/data/attachment/album/202310/30/062447cozr3x2h72krmk87.png)

显然，**Moosync 支持键盘快捷方式**，你可以根据个人的喜好进行设置。

![](/data/attachment/album/202310/30/062447lcxl5x078322t1yf.png)

在我写这篇文章的时候，Moosync 这里和那里都有一些小瑕疵，但我认为它作为 [最适合 Linux 的音乐播放器之一](https://itsfoss.com/best-music-players-linux/) 的竞争者非常有竞争力。

### ? 下载 Moosync

Moosync 适用于 **Linux**，**Windows** 以及 **macOS**。你可以在其[官方网站](https://moosync.app/)下载你需要的安装包。

>
> **[Moosync](https://moosync.app/)**
>
>
>

**对于 Linux 用户**，你也可以在 [**Flathub 商店**](https://flathub.org/apps/app.moosync.moosync)，[**Snap 商店**](https://snapcraft.io/moosync) 和 [**AUR**](https://aur.archlinux.org/packages/moosync) 下载 Moosync。

你还可以浏览他们的 [GitHub 仓库](https://github.com/Moosync/Moosync)，获取源代码以及更多信息。

? 对这款应用有何看法？欢迎在评论区告诉我。

---

via: <https://news.itsfoss.com/moosync/>

作者：[Sourav Rudra](https://news.itsfoss.com/author/sourav/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #1170 微软的人工智能投资稳定了其云业务

Summary:
? 微软的人工智能投资稳定了其云业务
? 苹果推出了三年的私人 Wi-Fi 一直未能隐藏地址
? Linux Mint 将获得 Wayland 试验性支持
»
»

![](/data/attachment/album/202310/30/073646qjvtj8xzjk8grxkt.jpg)

![](/data/attachment/album/202310/30/073651wuvwdr68rkvvg84c.jpg)

### 微软的人工智能投资稳定了其云业务

据报道，微软在生成式人工智能方面的投资开始促进销售，最明显的是扭转了公司重要的云计算产品增长放缓的趋势。微软向推出了 ChatGPT 的 OpenAI 建立了合作伙伴关系，并向其投资了 130 亿美元，因此微软被许多公司视为领先的人工智能供应商。财报显示，微软的旗舰云计算产品 Azure 增长了 29%，高于上一季度的 26%。微软 CEO 称，超过 1.8 万家企业正在使用微软的 Azure OpenAI 服务，这其中包括以前没有使用过 Azure 的客户。但是，虽然微软在必应搜索引擎中集成了人工智能驱动的聊天机器人，但 “没有证据” 表明必应的搜索市场份额有实际增长。

>
> **[消息来源：《纽约时报》](https://www.nytimes.com/2023/10/24/technology/microsoft-quarterly-results.html)**
>
>
>

>
> 老王点评：操作系统业务不好时，投资云计算；云业务缺少增长点时，投资人工智能。
>
>
>

![](/data/attachment/album/202310/30/073706do7kk6hb6zeje7h6.jpg)

### 苹果推出了三年的私人 Wi-Fi 一直未能隐藏地址

如果设备在所有网络中始终使用相同的 Wi-Fi MAC 地址，该地址就很容易与设备的网络活动和位置联系起来。私人 Wi-Fi 地址旨在通过为每个不同的 Wi-Fi 网络生成不同的 MAC 地址来避免这种跟踪。但苹果从 2020 年 9 月推出该功能以来，一直未能真正隐藏 MAC 地址，原因是与苹果 Bonjour 网络协议相关的 mDNSResponder 进程存在漏洞。安全专家发现，当 iPhone 加入一个网络时，它会发送组播请求以发现网络中的 AirPlay 设备。在这些请求中，iOS 会发送设备的真实 Wi-Fi MAC 地址。

>
> **[消息来源：The Register](https://www.theregister.com/2023/10/27/apple_private_wifi_fixed)**
>
>
>

>
> 老王点评：百密一疏，隐藏了三年的 MAC 地址，其实一直在偷偷泄露。
>
>
>

![](/data/attachment/album/202310/30/073724r9dmsods3z99s4rs.jpg)

### Linux Mint 将获得 Wayland 试验性支持

Linux Mint 是最后一个仅支持 X11 的重要 Linux 桌面之一，它正开始发生变化。计划于 2023 年圣诞节发布的 Linux Mint 21.3 将是第一个提供 Wayland 会话的 Linux Mint 发行版，但还处于试验状态，其默认会话仍将是 X11 会话。开发者认为 Linux Mint 在 2026 年 23.x 发布之前，不需要 Wayland 支持。“Wayland 会话不会像默认会话那样稳定。它将缺少一些功能，也有自己的局限性”，也就是说还需要几年的时间来完善。

>
> **[消息来源：9to5linux](https://9to5linux.com/linux-mint-21-3-to-ship-with-cinnamon-6-0-and-experimental-wayland-support)**
>
>
>

>
> 老王点评：从反馈来看，全面迁移 Wayland 确实在很多方面都没做好准备。
>
>
>


开源与 “半开源” 之间的战争和软件的历史一样久远

Summary: HashiCorp 放弃开源原则这件事并无新意。

macOS的底层（Darwin）是部分开源的，现在也是，GUI则是专有的。虽然只有部分开源，总比完全闭源的Windows好，当然它们都很封闭。

来自广东广州的 Chrome Mobile 118.0|Android 10 用户

PC上还在争开源与半开源，嵌入式表示都是弟弟，你不拿到我的源代码怎么知道我违反了开源协议？

特征字节？编译信息？都是笑话。。。。

说到半开源，安卓肯定算半个，现在的 AOSP 已经半残废

不能这样说，它的做法虽然让人不满，但是都符合开源许可证。

HashiCorp 放弃开源原则这件事并无新意。

![](/data/attachment/album/202310/30/102124xk99zn7vaw997564.jpg)

>
> HashiCorp 放弃开源原则这件事并无新意。
>
>
>

在加利福尼亚蒙特利召开的 <ruby> Linux 基金会成员峰会 <rt>  Linux Foundation Members Summit </rt></ruby> 上，最受关注的议题是人工智能和开源。而第二重要的话题涉及到 HashiCorp 放弃 Terraform 的 <ruby> Mozilla 公共许可证 <rt>  Mozilla Public License </rt></ruby>（MPL），转而采用 <ruby> 商业源代码许可证 <rt>  Business Source License </rt></ruby>（BSL）1.1，以及由此引发的 OpenTofu 项目复刻。因 Linux 基金会对 OpenTofu 项目的支持，HashiCorp 的 CEO David McJannet 表现出极度的不满。

关于许可证切换、源代码复刻以及由此产生的争议，火热的讨论并未减少。但在我看来，有一点被人们忽视：人们一直误认为这是新鲜事物，实则不然。

之前已经有过不止一次，甚至不止十次，公司将开源代码转变为专有程序，或者隐藏在一个专有的包装中。

首先，人们经常拿走开源代码，但却抹去其许可证信息，然后就此继续下去。虽然这并不一定构成窃取行为，实际上，有些许可证，比如 MIT 许可证和两句版 BSD 许可证，完全允许公司和开发者在他们的专有程序中使用这些代码。例如，我们都熟知以下基于 MIT 许可证的程序，比如 Angular、.NET、Node.js、Ruby on Rails 和 React。

其次，有一些程序最初以开源的形式开始，但随着时间的推移，原始所有者和许可证规则发生了变化，以至于许多人甚至都不知道它们曾经是开源的。举例来说，苹果公司的 macOS 就是其中的一个典型。

你是否知道 macOS 曾经是开源的？确实，它曾经是。

macOS 的核心基于 Darwin，这是一种 Unix 操作系统。<ruby> 史蒂夫·乔布斯 <rt>  Steve Jobs </rt></ruby> 回归苹果公司时，引入了他的基于 Unix 的 NeXTStep 操作系统。到了 2000 年，苹果公司逐步放弃了他们的经典 Mac 操作系统，转而支持 macOS Darwin。除了来自 NeXTStep 的部分，Darwin 还大量借鉴了开源的 FreeBSD 和 Mach 操作系统的设计。

如今，如果你深入研究，仍然可以在 macOS 中找到 Darwin，它在 <ruby> 苹果公共源代码许可证 <rt>  Apple Public Source License </rt></ruby> 2.0 下开源。虽然还有一项名为 PureDarwin 的工作正在努力制作一个独立的 Darwin 操作系统，但进展甚微。在这个过程中，苹果公司巧妙地减弱了一个重要的开源操作系统的影响力。更为常见的方式是开源软件以 “<ruby> 开放核心 <rt>  open core </rt></ruby>” 的方式融入商业程序中。简而言之，开放核心，与开源不同的是，这是一种商业模式。在这种模式中，公司基于一个免费的、开源的核心程序，然后通过加入商业版本或者专有的附加组件来发展。

此术语由 Andrew Lampitt 在 2008 年提出，虽然代表的并不是一个新的概念。他提出这个术语是为了替代混乱的术语 “<ruby> 双重许可 <rt>  dual licensing </rt></ruby>”。这个命名更改是为了 “消除误解，推广一个对于开源社区、付费客户和供应商都有利的商业模式”。同时，其目标也是为了消解我们现在在 HashiCorp 看到的 “<ruby> 诱捕并切换 <rt>  bait and switch </rt></ruby>” 类似的争议。

尽管我们可以辩论这是否是一个 “出色的商业模式”，但无可争议的是它已经成为一个非常流行的模式。然而，近年来，我们看到的趋势是，许多企业从开放核心模式退回到 <ruby> 源码可得 <rt>  source-available </rt></ruby> 模式。在源码可得模式下，你可以查看所有的代码，但在某些情况下你不能修改或使用它。

例如，MongoDB [创建](https://www.theregister.com/2018/10/16/mongodb_licensning_change/) 了一种非开源许可证，即 <ruby> 服务端公共许可证 <rt>  Server Side Public License </rt></ruby>（SSPL），以应对那些通过提供自托管版本和服务从其代码中获利的超级云计算公司。

并非只有 MongoDB 做出了这样的决定。Elastic 在开源核心模型运作的很好，但当亚马逊 AWS 等公司通过提供 ElasticSearch 服务赚取巨额利润时，Elastic 在 2021 年做出了 [策略调整](https://www.theregister.com/2021/01/21/aws_not_ok_says_elastic/)。它放弃了开源的 Apache 2.0 许可，转而采用非开源的 SSPL 和 Elastic 许可证。

Elastic 和其他几家公司（如 Redis 等）的此类做法，主要目的是阻止云服务公司将他们的开源程序作为一种服务而提供。然而，这个做法反过来对 Elastic 产生了负面影响，因为 AWS 对这个项目进行了 [复刻](https://www.theregister.com/2021/04/13/aws_renames_elasticsearch_fork_opensearch/)。这一切是否让你想起了 HashiCorp？是吧。

尽管这些向非开源许可的转变惹怒了一些用户和很多开发者，但这些公司的业绩仍表现相对稳定。你可能对此感到不满，但事实是，对于这些公司来说，这种转变在一定程度上取得了成功。

接着，我们来看红帽公司的情况。红帽公司对其红帽企业 Linux（RHEL）代码的使用 [施加了限制](https://www.theregister.com/2023/06/23/red_hat_centos_move/)，只允许其客户使用。几十年来，红帽公司一直在权衡作为开源领导者与处理 RHEL 克隆产品（例如 CentOS，以及最新的 AlmaLinux 和 Rocky Linux）的关系。

随着时间的推移，红帽公司对与他人共享其代码表现出越来越大的犹豫。现在，你可以（且很多人确实正在这么做）辩论红帽公司不再是一个真正的开源公司。批评者认为，红帽公司虽然仍然严格遵守 GNU 通用公共许可证（GPL）的条款，但已经失去了开源精神。

虽然 RHEL 和与其相关的一系列程序仍在产生可观的利润，但红帽公司希望能够从中获取更多的收益，因此，它也开始逐步偏离开源原则。

实际上，所有这些案例的共同之处在于：对更大财富的欲望。如圣经所言，“贪财是万恶之根”。我不确定这一句话的真假，但我确实知道，对金钱的热爱和开源原则很难两全。

对于从开源软件中赚钱并没有错误之处。<ruby> 理查德·斯托曼 <rt>  Richard M Stallman </rt></ruby>（RMS）曾言：“工作寻求报酬，或者寻求尽可能增加收入，这并没有错，只要不采用破坏性的方式即可。” 然而，在 RMS 看来，“通过限制它们的使用来从程序的用户中挤取金钱，是一种破坏行为。”

尽管在现今开源软件与商业实践交汇的情况下，RMS 的观点可能并不如过去那样深受欢迎，但他仍然拥有众多的支持者。

*（题图：MJ/b06e9a62-5c0d-49c5-a7b3-fd5af60ac0b1）*

---

via: <https://www.theregister.com/2023/10/27/open_source_vs_sort_of_open_source/>

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

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


我的一些 nix 学习经验：安装和打包

Summary: 以下是我至今为止学习到的内容, 敬请期待如何进行

「最近，我首次尝试了 Mac。直至现在，我注意到的最大缺点是其软件包管理比 Linux 差很多。一段时间以来，我对于 homebrew 感到相当不满，因为每次我安装新的软件包时，它大部分时间都花在了升级上。」

这只能说作者不会用，至少没看文档。homebrew只是会在安装软件时自动更新源（不是软件），可以通过环境变量禁用。

HOMEBREW_AUTO_UPDATE_SECS

Run brew update once every HOMEBREW_AUTO_UPDATE_SECS seconds before some commands, e.g. brew install, brew upgrade and brew tap. Alternatively, disable auto-update entirely with

Alternatively, disable auto-update entirely with HOMEBREW_NO_AUTO_UPDATE.

也可以通过以下命令自动更新源，加上`--upgrade`参数自动升级软件，加上`--cleanup`参数自动清理。

brew autoupdate start <interval seconds>

以下是我至今为止学习到的内容, 敬请期待如何进行

![](/data/attachment/album/202310/30/221702nk4a42dglmcgc7lh.jpg)

最近，我首次尝试了 Mac。直至现在，我注意到的最大缺点是其软件包管理比 Linux 差很多。一段时间以来，我对于 homebrew 感到相当不满，因为每次我安装新的软件包时，它大部分时间都花在了升级上。于是，我萌生了试试 [nix](https://nixos.org/) 包管理器的想法！

公认的，nix 的使用存在一定困惑性（甚至它有自己单独的编程语言！），因此，我一直在努力以最简洁的方式掌握使用 nix，避开复杂的配置文件管理和新编程语言学习。以下是我至今为止学习到的内容, 敬请期待如何进行：

* 使用 nix 安装软件包
* 为一个名为 [paperjam](https://mj.ucw.cz/sw/paperjam/) 的 C++ 程序构建一个自定义的 nix 包
* 用 nix 安装五年前的 [hugo](https://github.com/gohugoio/hugo/) 版本

如同以往，由于我对 nix 的了解还停留在入门阶段，本篇文章可能存在一些表述不准确的地方。甚至我自己也对于我是否真的喜欢上 nix 感到模棱两可 —— 它的使用真的让人相当困惑！但是，它帮我成功编译了一些以前总是难以编译的软件，并且通常来说，它比 homebrew 的安装速度要快。

### nix 为何引人关注？

通常，人们把 nix 定义为一种“声明式的包管理”。尽管我对此并不太感兴趣，但以下是我对 nix 的两个主要欣赏之处：

* 它提供了二进制包（托管在 <https://cache.nixos.org/> 上），你可以迅速下载并安装
* 对于那些没有二进制包的软件，nix 使编译它们变得更容易

我认为 nix 之所以擅长于编译软件，主要有以下两个原因：

* 在你的系统中，可以安装同一库或程序的多个版本（例如，你可能有两个不同版本的 libc）。举个例子，我当前的计算机上就存在两个版本的 node，一个位于 `/nix/store/4ykq0lpvmskdlhrvz1j3kwslgc6c7pnv-nodejs-16.17.1`，另一个位于 `/nix/store/5y4bd2r99zhdbir95w5pf51bwfg37bwa-nodejs-18.9.1`。
* 除此之外，nix 在构建包时是在隔离的环境下进行的，只使用你明确声明的依赖项的特定版本。因此，你无需担心这个包可能依赖于你的系统里的其它你并不了解的包，再也不用与 `LD_LIBRARY_PATH` 战斗了！许多人投入了大量工作，来列出所有包的依赖项。

在本文后面，我将给出两个例子，展示 nix 如何使我在编译软件时遇到了更小的困难。

#### 我是如何开始使用 nix 的

下面是我开始使用 nix 的步骤：

* 安装 nix。我忘记了我当时是如何做到这一点，但看起来有一个[官方安装程序](https://nixos.org/download) 和一个来自 [zero-to-nix.com](http://zero-to-nix.com) 的 [非官方安装程序](https://zero-to-nix.com/concepts/nix-installer)。在 MacOS 上使用标准的多用户安装卸载 nix 的 [教程](https://nixos.org/manual/nix/stable/installation/installing-binary.html#macos) 有点复杂，所以选择一个卸载教程更为简单的安装方法可能值得。
* 把 `~/.nix-profile/bin` 添加到我的 `PATH`
* 用 `nix-env -iA nixpkgs.NAME` 命令安装包
* 就是这样。

基本上，是把 `nix-env -iA` 当作 `brew install` 或者 `apt-get install`。

例如，如果我想安装 `fish`，我可以这样做：

```
nix-env -iA nixpkgs.fish

```

这看起来就像是从 <https://cache.nixos.org> 下载一些二进制文件 - 非常简单。

有些人使用 nix 来安装他们的 Node 和 Python 和 Ruby 包，但我并没有那样做 —— 我仍然像我以前一样使用 `npm install` 和 `pip install`。

#### 一些我没有使用的 nix 功能

有一些 nix 功能/工具我并没有使用，但我要提及一下。我最初认为你必须使用这些功能才能使用 nix，因为我读过的大部分 nix 教程都讨论了它们。但事实证明，你并不一定要使用它们。

* NixOS（一个 Linux 发行版）
* [nix-shell](https://nixos.org/guides/nix-pills/developing-with-nix-shell.html)
* [nix flakes](https://nixos.wiki/wiki/Flakes)
* [home-manager](https://github.com/nix-community/home-manager)
* [devenv.sh](https://devenv.sh/)

我不去深入讨论它们，因为我并没真正使用过它们，而且网上已经有很多详解。

### 安装软件包

#### nix 包在哪里定义的？

我认为 nix 包主仓库中的包是定义在 <https://github.com/NixOS/nixpkgs/>。

你可以在 <https://search.nixos.org/packages> 查找包。似乎有两种官方推荐的查找包的方式：

* `nix-env -qaP NAME`，但这非常缓慢，并且我并没有得到期望的结果
* `nix --extra-experimental-features 'nix-command flakes' search nixpkgs NAME`，这倒是管用，但显得有点儿冗长。并且，无论何种原因，它输出的所有包都以 `legacyPackages` 开头

我找到了一种我更喜欢的从命令行搜索 nix 包的方式：

* 运行 `nix-env -qa '*' > nix-packages.txt` 获取 Nix 仓库中所有包的列表
* 编写一个简洁的 `nix-search` 脚本，仅在 `packages.txt` 中进行 grep 操作（`cat ~/bin/nix-packages.txt | awk '{print $1}' | rg "$1"`）

#### 所有的东西都是通过符号链接来安装的

nix 的一个主要设计是，没有一个单一的 `bin` 文件夹来存放所有的包，而是使用了符号链接。有许多层的符号链接。比如，以下就是一些符号链接的例子：

* 我机器上的 `~/.nix-profile` 最终是一个到 `/nix/var/nix/profiles/per-user/bork/profile-111-link/` 的链接
* `~/.nix-profile/bin/fish` 是到 `/nix/store/afkwn6k8p8g97jiqgx9nd26503s35mgi-fish-3.5.1/bin/fish` 的链接

当我安装某样东西的时候，它会创建一个新的 `profile-112-link` 目录并建立新的链接，并且更新我的 `~/.nix-profile` 使其指向那个目录。

我认为，这意味着如果我安装了新版本的 `fish` 但我并不满意，我可以很容易地退回先前的版本，只需运行 `nix-env --rollback`，这样就可以让我回到之前的配置文件目录了。

#### 卸载包并不意味着删除它们

如果我像这样卸载 nix 包，实际上并不会释放任何硬盘空间，而仅仅是移除了符号链接：

```
$ nix-env --uninstall oil

```

我尚不清楚如何彻底删除包 - 我试着运行了如下的垃圾收集命令，这似乎删除了一些项目：

```
$ nix-collect-garbage
...
85 store paths deleted, 74.90 MiB freed

```

然而，我系统上仍然存在 `oil` 包，在 `/nix/store/8pjnk6jr54z77jiq5g2dbx8887dnxbda-oil-0.14.0`。

`nix-collect-garbage` 有一个更具攻击性的版本，它也会删除你配置文件的旧版本（这样你就不能回滚了）。

```
$ nix-collect-garbage -d --delete-old

```

尽管如此，上述命令仍无法删除 `/nix/store/8pjnk6jr54z77jiq5g2dbx8887dnxbda-oil-0.14.0`，我不明白原因。

#### 升级过程

你可以通过以下的方式升级 nix 包：

```
nix-channel --update
nix-env --upgrade

```

（这与 `apt-get update && apt-get upgrade` 类似。）

我还没真正尝试升级任何东西。我推测，如果升级过程中出现任何问题，我可以通过以下方式轻松地回滚（因为在 nix 中，所有事物都是不可变的！）：

```
nix-env --rollback

```

有人向我推荐了 Ian Henry 的 [这篇文章](https://ianthehenry.com/posts/how-to-learn-nix/my-first-package-upgrade/)，该文章讨论了 `nix-env --upgrade` 的一些令人困惑的问题 - 也许它并不总是如我们所料？因此，我会对升级保持警惕。

### 下一个目标：创建名为 paperjam 的自定义包

经过几个月使用现有的 nix 包后，我开始考虑制作自定义包，对象是一个名为 [paperjam](https://mj.ucw.cz/sw/paperjam/) 的程序，它还没有被打包封装。

实际上，因为我系统上的 `libiconv` 版本不正确，我甚至在没有 nix 的情况下也遇到了编译 `paperjam` 的困难。我认为，尽管我还不懂如何制作 nix 包，但使用 nix 来编译它可能会更为简单。结果证明我的想法是对的！

然而，理清如何实现这个目标的过程相当复杂，因此我在这里写下了一些我实现它的方式和步骤。

#### 构建示例包的步骤

在我着手制作 `paperjam` 自定义包之前，我想先试手构建一个已存在的示例包，以便确保我已经理解了构建包的整个流程。这个任务曾令我头痛不已，但在我在 Discord 提问之后，有人向我阐述了如何从 <https://github.com/NixOS/nixpkgs/> 获取一个可执行的包并进行构建。以下是操作步骤：

**步骤 1：** 从 GitHub 的 [nixpkgs](https://github.com/NixOS/nixpkgs/) 下载任意一个包，以 `dash` 包为例：

```
wget https://raw.githubusercontent.com/NixOS/nixpkgs/47993510dcb7713a29591517cb6ce682cc40f0ca/pkgs/shells/dash/default.nix -O dash.nix

```

**步骤 2：** 用 `with import <nixpkgs> {};` 替换开头的声明（`{ lib , stdenv , buildPackages , autoreconfHook , pkg-config , fetchurl , fetchpatch , libedit , runCommand , dash }:`）。我不清楚为何需要这样做，但事实证明这么做是有效的。

**步骤 3：** 运行 `nix-build dash.nix`

这将开始编译该包。

**步骤 4：** 运行 `nix-env -i -f dash.nix`

这会将该包安装到我的 `~/.nix-profile` 目录下。

就这么简单！一旦我完成了这些步骤，我便感觉自己能够逐步修改 `dash` 包，进一步创建属于我自己的包了。

#### 制作自定义包的过程

因为 `paperjam` 依赖于 `libpaper`，而 `libpaper` 还没有打包，所以我首先需要构建 `libpaper` 包。

以下是 `libpaper.nix`，我基本上是从 [nixpkgs](https://github.com/NixOS/nixpkgs/) 仓库中其他包的源码中复制粘贴得到的。我猜测这里的原理是，nix 对如何编译 C 包有一些默认规则，例如 “运行 `make install`”，所以 `make install` 实际上是默认执行的，并且我并不需要明确地去配置它。

```
with import <nixpkgs> {};

stdenv.mkDerivation rec {
  pname = "libpaper";
  version = "0.1";

  src = fetchFromGitHub {
    owner = "naota";
    repo = "libpaper";
    rev = "51ca11ec543f2828672d15e4e77b92619b497ccd";
    hash = "sha256-S1pzVQ/ceNsx0vGmzdDWw2TjPVLiRgzR4edFblWsekY=";
  };

  buildInputs = [ ];

  meta = with lib; {
    homepage = "https://github.com/naota/libpaper";
    description = "libpaper";
    platforms = platforms.unix;
    license = with licenses; [ bsd3 gpl2 ];
  };
}

```

这个脚本基本上告诉 nix 如何从 GitHub 下载源代码。

我通过运行 `nix-build libpaper.nix` 来构建它。

接下来，我需要编译 `paperjam`。我制作的 [nix 包](https://github.com/jvns/nixpkgs/blob/22b70a48a797538c76b04261b3043165896d8f69/paperjam.nix) 的链接在这里。除了告诉它从哪里下载源码外，我需要做的主要事情有：

* 添加一些额外的构建依赖项（像 `asciidoc`）
* 在安装过程中设置一些环境变量（`installFlags = [ "PREFIX=$(out)" ];`），这样它就会被安装在正确的目录，而不是 `/usr/local/bin`。

我首先从散列值为空开始，然后运行 `nix-build` 以获取一个关于散列值不匹配的错误信息。然后我从错误信息中复制出正确的散列值。

我只是在 nixpkgs 仓库中运行 `rg PREFIX` 来找出如何设置 `installFlags` 的 —— 我认为设置 `PREFIX` 应该是很常见的操作，可能之前已经有人做过了，事实证明我的想法是对的。所以我只是从其他包中复制粘贴了那部分代码。

然后我执行了：

```
nix-build paperjam.nix
nix-env -i -f paperjam.nix

```

然后所有的东西都开始工作了，我成功地安装了 `paperjam`！耶！

### 下一个目标：安装一个五年前的 Hugo 版本

当前，我使用的是 2018 年的 Hugo 0.40 版本来构建我的博客。由于我并不需要任何的新功能，因此我并没有感到有升级的必要。对于在 Linux 上操作，这个过程非常简单：Hugo 的发行版本是静态二进制文件，这意味着我可以直接从 [发布页面](https://github.com/gohugoio/hugo/releases/tag/v0.40) 下载五年前的二进制文件并运行。真的很方便！

但在我的 Mac 电脑上，我遇到了一些复杂的情况。过去五年中，Mac 的硬件已经发生了一些变化，因此我下载的 Mac 版 Hugo 二进制文件并不能运行。同时，我尝试使用 `go build` 从源代码编译，但由于在过去的五年内 Go 的构建规则也有所改变，因此没有成功。

我曾试图通过在 Linux docker 容器中运行 Hugo 来解决这个问题，但我并不太喜欢这个方法：尽管可以工作，但它运行得有些慢，而且我个人感觉这样做有些多余。毕竟，编译一个 Go 程序不应该那么麻烦！

幸好，Nix 来救援！接下来，我将介绍我是如何使用 nix 来安装旧版本的 Hugo。

#### 使用 nix 安装 Hugo 0.40 版本

我的目标是安装 Hugo 0.40，并将其添加到我的 PATH 中，以 `hugo-0.40` 作为命名。以下是我实现此目标的步骤。尽管我采取了一种相对特殊的方式进行操作，但是效果不错（可以参考 [搜索和安装旧版本的 Nix 包](https://lazamar.github.io/download-specific-package-version-with-nix/) 来找到可能更常规的方法）。

**步骤 1：** 在 nixpkgs 仓库中搜索找到 Hugo 0.40。

我在此链接中找到了相应的 `.nix` 文件 <https://github.com/NixOS/nixpkgs/blob/17b2ef2/pkgs/applications/misc/hugo/default.nix>。

**步骤 2：** 下载该文件并进行构建。

我下载了带有 `.nix` 扩展名的文件（以及同一目录下的另一个名为 `deps.nix` 的文件），将文件的首行替换为 `with import <nixpkgs> {};`，然后使用 `nix-build hugo.nix` 进行构建。

虽然这个过程几乎无需进行修改就能成功运行，但我仍然做了两处小调整：

* 把 `with stdenv.lib` 替换为 `with lib`。
* 为避免与我已安装的其他版本的 `hugo` 冲突，我把包名改为了 `hugo040`。

**步骤 3：** 将 `hugo` 重命名为 `hugo-0.40`。

我编写了一个简短的后安装脚本，用以重命名 Hugo 二进制文件。

```
postInstall = ''
    mv $out/bin/hugo $out/bin/hugo-0.40
  '';

```

我是通过在 nixpkgs 仓库中运行 `rg 'mv '` 命令，然后复制和修改一条看似相关的代码片段来找到如何实施此步骤。

**步骤 4：** 安装。

我通过运行 `nix-env -i -f hugo.nix` 命令，将 Hugo 安装到了 `~/.nix-profile/bin` 目录中。

所有的步骤都顺利运行了！我把最终的 `.nix` 文件存放到了我自己的 [nixpkgs 仓库](https://github.com/jvns/nixpkgs/) 中，这样我以后如果需要，就能再次使用它了。

### 可重复的构建过程并非神秘，其实它们极其复杂

我觉得值得一提的是，这个 `hugo.nix` 文件并不是什么魔法——我之所以能在今天轻易地编译 Hugo 0.40，完全归功于许多人长期以来的付出，他们让 Hugo 的这个版本得以以可重复的方式打包。

### 总结

安装 `paperjam` 和这个五年前的 Hugo 版本过程惊人地顺利，实际上比没有 nix 来编译它们更简单。这是因为 nix 极大地方便了我使用正确的 `libiconv` 版本来编译 `paperjam` 包，而且五年前就已经有人辛苦地列出了 Hugo 的确切依赖关系。

我并无计划详细深入地使用 nix（真的，我很可能对它感到困扰，然后最后选择回归使用 homebrew！），但我们将拭目以待！我发现，简单入手然后按需逐步掌握更多功能，远比一开始就全面接触一堆复杂功能更容易掌握。

我可能不会在 Linux 上使用 nix —— 我一直都对 Debian 基础发行版的 `apt` 和 Arch 基础发行版的 `pacman` 感到满意，它们策略明晰且少有混淆。而在 Mac 上，使用 nix 似乎会有所得。不过，谁知道呢！也许三个月后，我可能会对 nix 感到不满然后再次选择回归使用 homebrew。

*（题图：MJ/f68aaf37-4a34-4643-b3a1-8728d49cf887）*

---

via: <https://jvns.ca/blog/2023/02/28/some-notes-on-using-nix/>

作者：[Julia Evans](https://jvns.ca/) 选题：[lkxed](https://github.com/lkxed/) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

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


KDE Plasma 6 将不支持较旧的桌面小部件

![](/data/attachment/album/202310/30/225133j5bvbvb5bzdgg4gn.jpg)

>
> KDE Plasma 6 进行了一些修改，需要小部件作者进行调整。开发人员，移植时间到了！
>
>
>

KDE Plasma 6 是备受期待的桌面环境版本升级版本。

最近，其发布时间表公布，第一个 Alpha 版本将于 **2023 年 11 月 8 日**上线，最终 **Beta 版本于 2023 年 1 月 31 日**上线，稳定版计划于 **2024 年 2 月 28 日**上线。

考虑到 KDE Plasma 5.x 系列包含多项改进和功能添加，许多用户对 KDE Plasma 6 带来的功能感到期待。

如果你好奇，我们已经介绍了 [KDE Plasma 6 的主要变化](/article-15821-1.html)。因此，它会发生重大变化也就不足为奇了。

然而，在进行重大修改后，可能会出现一些破坏体验的改动，例如无法在 Plasma 6 上运行任何旧版小部件。

### 给小部件开发者的移植通知

在 KDE 的 *Nate Graham* 最近发表的一篇 [博客文章](https://pointieststick.com/2023/10/24/its-time-to-port-your-widgets-to-plasma-6/) 中，向 Plasma 5 小部件作者发出了正式的警告。

其重点指出的信息是：

>
> **你需要将你的小部件移植到更新的 API，以使它们与 Plasma 6 兼容！**
>
>
>

Plasma 小部件 API 已随着即将发布的版本进行了修改。而且，为了适应这种变化并保持运行，小部件开发人员必须将他们的创作移植到更新的 API。

如果开发人员不移植小部件以使用更新的 API，它将无法在 KDE Plasma 6 中运行。

当然，流行的小部件开发人员很可能会进行移植。但是，如果你使用的小部件虽然还能使用，但没有积极维护，那么你将不得不在 KDE Plasma 6 中放弃它。

他们已提供了一份 [移植指南](https://develop.kde.org/docs/plasma/widget/porting_kf6/) 供开发人员遵循。

你可以在 “[Plasma 6 扩展](https://store.kde.org/browse?cat=705&ord=latest)” 下找到与 Plasma 6 兼容的小部件。在撰写本文时，只能看到列出了两个第三方小部件。

![](/data/attachment/album/202310/30/225207ucy9rcrxr0wyryrr.jpg)

因此，当你喜欢的小部件被移植到 KDE Plasma 6 并由相关开发者上传后，你就会发现它们的踪迹。

? 你期待移植哪些 KDE 小部件？ 你认为你会错过某些不再维护的小部件吗？在下面的评论中分享你的想法。

---

via: <https://news.itsfoss.com/kde-plasma-6-widgets/>

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

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


硬核观察 #1171 马斯克希望 X 接管用户全部财务活动，超越微信

Summary:
? 马斯克希望 X 接管用户全部财务活动，超越微信
? 近 80% 的开发人员在考虑换工作
? 印度 Infosys 联合创始人呼吁年轻人每周工作 70 小时
»
»

![](/data/attachment/album/202310/31/070017zbpiyeehgigpcprf.jpg)

![](/data/attachment/album/202310/31/070026lqqoni7i2sefqi2h.jpg)

### 马斯克希望 X 接管用户全部财务活动，超越微信

在埃隆·马斯克入主 X 公司一年后，这个前身名为 Twitter 的平台的财务状况仍不稳定，但持续的资金问题并没有阻止马斯克继续推进将 X 转变为银行的计划。在财报电话会议上，马斯克告诉 X 的员工，他预测 X 的支付系统将于 2024 年底推出，这将包括用户的“整个财务活动”，用户将“不再需要银行账户”。作为 PayPal 的联合创始人之一，马斯克重申，他对 X 的计划是全面实现他最初在 2000 年为 PayPal 写的路线图。马斯克说，他努力将 Twitter 打造成一个无所不能的应用程序，有朝一日将超过中国的微信。

>
> **[消息来源：Ars Technica](https://arstechnica.com/tech-policy/2023/10/elon-musk-wants-your-entire-financial-life-on-x-by-2024/)**
>
>
>

>
> 老王点评：即便有珠玉在前，也未必能实现。
>
>
>

![](/data/attachment/album/202310/31/070042c4c1n6yyucyyucbg.jpg)

### 近 80% 的开发人员在考虑换工作

根据 Stack Overflow 的一份调查，与过去两年相比，现在有更多的开发人员正在寻找或愿意接受新工作。超过 1000 名开发人员参加了该调查，79% 的人即使没有积极寻找，也至少在考虑新的机会。更好的薪水是他们寻找新工作的首要原因。其次是对其他公司的好奇心，如新技术和发展机会。此外，8% 的开发人员已退出技术行业，越来越多地在制造和供应链公司任职。

>
> **[消息来源：Stack Overflow](https://stackoverflow.blog/2023/10/26/hopping-instead-of-hustling-survey-tells-us-how-developers-are-taking-care-of-business/)**
>
>
>

>
> 老王点评：IT 行业的“活力”也体现在频繁换工作方面。
>
>
>

![](/data/attachment/album/202310/31/070105nrsxknxyssxbsncq.jpg)

### 印度 Infosys 联合创始人呼吁年轻人每周工作 70 小时

Infosys 联合创始人、前 CEO <ruby> 纳拉亚纳·穆尔西 <rt>  Narayana Murthy </rt></ruby> 在接受采访时表示，他认为印度拥有巨大的经济潜力，但其生产率仍然很低。他要求年轻人必须说“这是我的国家，我想每周工作 70 小时”，他要求印度所有优秀青年“在未来 20 年、50 年（无论长短）每天工作 12 小时，使印度成为国内生产总值排名第一或第二的国家。”具有讽刺意味的是，Infosys 最近报告称，其员工利用率目前为 81.8%，还不到 70 小时的一半。

>
> **[消息来源：The Register](https://www.theregister.com/2023/10/27/infosys_founder_70_hour_week/)**
>
>
>

>
> 老王点评：天下老板的想法都是一样（黑）的。
>
>
>


Linux 内核 6.6 版本莅临，带来诸多变化

Summary: 笔记本的支持得到了提升，服务器性能得到了改进，更多内容一一揭晓。

莅临？ R U 确定？

我看了看自己的惠普战66G3，和它的AMD处理器，表示很Nice

笔记本的支持得到了提升，服务器性能得到了改进，更多内容一一揭晓。

![](/data/attachment/album/202310/31/204603jy3e8ezhtyehn9po.jpg)

>
> 笔记本的支持得到了提升，服务器性能得到了改进，更多内容一一揭晓。
>
>
>

又到了迎接 Linux 内核新版本发布的时刻！

Linux 内核 6.6 的发布，是一次大规模更新，针对各类笔记本、网络硬件、处理器等提供了**大量全方位的改良**。

Linus Torvalds [表示](https://lkml.iu.edu/hypermail/linux/kernel/2310.3/06370.html)：

>
> 各种各样的修复散布各处，除了针对 r8152 驱动的一些重要修复外，其它的都相当小型。下面是上周的简短日志，供所有想要一探究竟、了解更多细节的读者。日志篇幅短小，可以快速翻阅。
>
>
>

### ? Linux 内核 6.6：都有哪些新元素？

在我们开始之前，需要提醒大家，这一次发布的是**非长期支持版本**，因此不是每个人都必须进行升级，除非你想要享受最新、最棒的版本。

总的来说，让我们来看看这次发布版本的亮点：

* 针对英特尔芯片的优化
* 对笔记本的更佳支持
* 网络改进
* AMD 芯片性能提升

#### 针对英特尔芯片的优化

![](/data/attachment/album/202310/31/204634alrzd80mebeztnnp.png)

Linux 内核 6.6 版本新增了对英特尔的**神经处理单元（NPU）的支持**，这样的技术原先被称作通用处理器。

这项技术预计将于今年晚些时候，随着英特尔的“[Meteor Lake](https://www.intel.com/content/www/us/en/content-details/788851/meteor-lake-architecture-overview.html)”芯片亮相而首次公开登场。这些 **NPU 将被专门用于处理人工智能工作负载**。

英特尔甚至已经开始对即将发布的 “**Arrow Lake**”芯片进行**NPU 支持的初步工作**了！

此外，还新增了对英特尔的 [Shadow Stack](https://en.wikipedia.org/wiki/Shadow_stack) 的支持，因为他们的 [控制流执行技术](https://www.intel.com/content/www/us/en/developer/articles/technical/technical-look-control-flow-enforcement-technology.html)（CET）被引入到了内核中。其主要目的是防止现代英特尔 CPU（从 Tiger Lake 起）上的**返回导向编程（ROP）攻击**。

#### 对笔记本的更佳支持

![](/data/attachment/album/202310/31/204635nb3btutx6bhmx03e.png)

**对于惠普笔记本，现在你可以直接在 Linux 中对 BIOS 进行管理了**，这要归功于 “**HP-BIOSCFG**” 驱动的实现。

根据报道，**从 2018 年起出产的惠普笔记本应该都可以支持这个驱动程序**。

**对于联想笔记本，驱动程序已经更新，为更多的 IdeaPad 笔记本**添加了键盘背光控制\*\*。

同样，**对于华硕笔记本**，现在 [ROG Flow X16](https://rog.asus.com/laptops/rog-flow/rog-flow-x16-2023-series/spec/)（2023 年款）游戏笔记本，当屏幕翻转时可以**正确地启用平板模式**。

#### 网络改进

![](/data/attachment/album/202310/31/204636x5yq5ndv5spg5gbv.png)

在网络方面，Linux 内核 6.6 版本带来了对如 [Atheros QCA8081](https://www.qualcomm.com/products/internet-of-things/networking/wi-fi-networks/qca8081)、**MediaTek MT7988**、**MediaTek MT7981**，[NXP TJA1120 PHY](https://www.nxp.com/products/interfaces/ethernet-/automotive-ethernet-phys/tja1120-automotive-ethernet-phy-1000base-t1-asil-b-and-tc-10:TJA1120) 等新型硬件的**支持**。

同时，各类驱动程序也进行了升级，例如 **高通 Wi-Fi 7 （ath12k）驱动程序**，它现在**支持 Extremely High Throughput（EHT）PHY**。

此外，针对各类 Realtek（rtl8xxxu）Wi-Fi 芯片**启用了 AP 模式**。

关于特定于网络的变动，你可以在这个 [拉取请求](https://lore.kernel.org/lkml/20230829125950.39432-1-pabeni@redhat.com/) 中查阅更多的详细信息。

#### AMD 芯片的性能提升

![](/data/attachment/album/202310/31/204636mjfmj7zluojsbuob.png)

随着 Linux 内核 6.6 的发布，AMD 的开发人员推出了**两项尚未正式公开的新技术的支持**。

一项技术是对他们即将推出的 “**FreeSync Panel Replay**” 技术的支持，这一技术只用于游戏笔记本抖动屏，可以自动降低刷新率以节省电力和降低 GPU 工作负载。

另一项技术被称为 “**动态提速控制**”，这是一项能够**提高某些 Ryzen SoC 性能的功能**，但关于它的更多细节比较少。

关于它的实施，你可以在这个 [补丁序列](https://lore.kernel.org/lkml/20230420163140.14940-1-mario.limonciello@amd.com/T/#m38ab23d70d213ceb67440168b3f71ad2be3aa564) 中查阅更多的信息。

#### ? 其他的变化与改进

其他方面，还包括一些值得注意的变动：

* 针对 **龙芯** 的大量新特性。
* **Rust 工具链** 升级至 v1.71.1 版本。
* 对 **RISC-V** 和 **Btrfs** 的多项改进。
* 完全移除了 [无线 USB](https://en.wikipedia.org/wiki/Wireless_USB) 和 [**Ultra-Wideband**](https://en.wikipedia.org/wiki/Ultra-wideband) 的代码。
* 对 **英伟达**、**英特尔** 和 **AMD** 的**开源图形驱动程序** 的众多优化。

你可以在 [更新日志](https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6) 中查阅更详细的信息。

### 安装 Linux 内核 6.6 版本

如果你的体验是像 Arch 或 Fedora 那类的滚动发行版，升级过程非常简单。

你只需要稍等片刻，因为这些发行版在发布更新时需要一些时间。

对于其他的用户，你可以等待主要版本更新，或者**根据我们的指南在 Ubuntu 中升级至最新的主线 Linux 内核**：

>
> **[在 Ubuntu 上安装最新的主线 Linux 内核](https://itsfoss.com/upgrade-linux-kernel-ubuntu/)**
>
>
>

你可以在 [官方网站](https://www.kernel.org/) 下载最新的 Linux 内核的 tarball （*发布后可能需要些时间才能得到*）。

? 你对这次内核发布有何想法？

---

via: <https://news.itsfoss.com/linux-kernel-6-6-release/>

作者：[Sourav Rudra](https://news.itsfoss.com/author/sourav/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

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


编程像说话一样简单！阿里云推出大模型编码助手 —— 灵码

Summary: 在新的历史时刻，我们正在开启一个全新的编程纪元，推动这一进程的核心力量之一便是阿里云的 AI 产品 —— “通义灵码”。

![](/data/attachment/album/202310/31/205918gkkponpewwpap3lc.jpg)

在新的历史时刻，我们正在开启一个全新的编程纪元，推动这一进程的核心力量之一便是阿里云的 AI 产品 —— “**通义灵码**”。

### 阿里云发布 AI 编程助手 “通义灵码”

2023 年 10 月的最后一天，在杭州云栖大会上，阿里云对外展示了一款可自动编写代码的 AI 助手。在现场展示中，当在编码软件的对话窗口输入“*帮我用 Python 写一个飞机游戏*” 后，短短几秒，这款名为 “通义灵码” 的 AI 助手就自动生成了 100 多行代码，点击运行后一个充满儿时回忆的“飞机大战”游戏就成功跑起来了。

云栖大会现场的 “通义灵码” 展区异常火爆，开发者体验后纷纷表示大受震撼：“*不到 1 分钟居然生成了贪吃蛇的小程序*”、“*运营也能写前端页面啦*”……甚至还有意犹未尽的观众们排队只为向 “通义灵码” 提一些棘手的问题 —— 比如 “*帮我用代码解一个韦东奕出的奥数题*”，而 “通义灵码” 也不负众望，不仅快速生成了函数代码还给出了相应的答案。

### 你身边的辅助伙伴

![](/data/attachment/album/202310/31/210041fns2e84hsxvq248s.jpg)

在这个日新月异的信息时代，“通义灵码” 担当着重要的角色，从业余爱好者到经验丰富的专业开发者，无论你在编程旅程的哪个阶段，都会发现 “通义灵码” 宛如**一位随时待命、一路陪伴的编程伙伴**。它能减少信息检索、工具切换、写单元测试等繁杂工作时间，更专注于技术设计。

不仅如此，“通义灵码” 能够**协助你完成各种编程相关的工作**，如编写单元测试、写代码注释、代码解释等。这对于保证代码的质量，挖掘潜在的错误和漏洞具有巨大的价值。它的存在极大地提升了编程工作的效率，减少了沟通与理解上的摩擦，让编程变得更加流畅、高效。

相较于人工编写测试耗时数分到数十分钟，“通义灵码” 能以毫秒级的速度生成测试代码，准确率和覆盖率都令人满意。

总的来说，无论你是在解决一项复杂的编程任务，还是在探索一项新的技术挑战，“通义灵码” 能为你提供一些帮助，使你的编程之旅更加轻松、易上手。

### 开创编程新时代

这个产品犹如一把充满魔力的钥匙，成功地打开了普罗大众曾经无法触及的编程大门，那是一面缔造无穷可能的生动壁垒。

它激活了编程的生命力，使之从被视为困难乏味的科技专业技能转变为一种更具包容性、更富创造性的工具。在这个新时代下，编程能力已经跨越了专业人员的界限，变为了全社会，每一个具有热情和想象力的人都可以触摸到的技术领域。从业余的编程爱好者，到探索未知的新手，再到洞悉市场趋势的企业和机构，“通义灵码” 让他们都有机会利用这场技术革命的智慧红利。

“通义灵码” 开创了编程的新时代，尤其在教育领域的影响尤为显著。比如，在未来的学校，学生将能通过 “通义灵码” 学习编程的基础知识，同时创造属于他们自己的科学项目。想像一下，一个小学生利用它制作一个探测环境污染的系统，启发出他们求知和创新的潜力，这样的景象即将成为现实。

![](/data/attachment/album/202310/31/210205g5tt5e1m5qu5u5qr.jpg)

这不仅仅是**编程向非专业人群的开放**，更是一种智慧的礼赠，一种信心的鼓励。无论你是在哪里，无论你是谁，只要你对这个世界充满好奇，对未来抱有期待，那么这个大门就为你敞开。任何人都可以利用 “通义灵码”，接受 AI 赋予的力量，挖掘出更大的可能，让编程成为一场每个人都可以参与的，精彩绝伦的技术盛宴。

### “通义灵码” 的三大优势

在人工智能助手领域，“通义灵码” 以显著的解决问题能力脱颖而出。根据 HumanEval 测试结果，通义灵码的**问题解决率高达 66.4%**，远超过行业平均水平的 50% 左右。这一显著成绩代表了它在问题解决方面卓越的能力，无论面临何种问题，通义灵码都能提供有效的解决方案。

![](/data/attachment/album/202310/31/210252y7rnzeernge431em.jpg)

“通义灵码” 也展现出了**对阿里云用户的友好性**，特别体现在支持调用阿里云 SDK 和 API 上，这意味着用户可以针对特定需求进行优化。这一功能深受开发者的欢迎，开发者不再需要分担与多个服务进行交互的额外负担，使得开发工作更为轻松且高效。

开发者遇到编程问题时，还可以通过 “通义灵码” 快速得到解决思路，再也**不需要一边编写代码一边浏览网络资料**，更专注于编程工作，极大提高编程效率。

### 站在千亿规模的 “通义千问 2.0” 肩膀上

在 2023 云栖大会现场，周靖人还公布了阿里自研大模型的最新进展，发布了**千亿参数规模的 “通义千问 2.0”**。它在 10 个权威测评中**全面超越 GPT-3.5 和 Llama2，并在加速追赶 GPT-4**。

“通义灵码” 依托于 “通义千问 2.0”，基于海量优秀开源代码数据集和编程教科书训练，可根据当前代码文件及跨文件的上下文，自动生成行级/函数级代码建议、单元测试、代码注释等，此外还具备代码解释、智能研发问答、异常报错排查等能力，并针对阿里云 SDK/OpenAPI 使用场景调优，为开发者带来高效、流畅的编码体验。

据研发团队透露，基于阿里云强大的大模型能力和智能算力，“通义灵码” 在 5 个月内快速迭代了多个版本，并在上市发布之前进行了充分打磨，**目前已在阿里云内大规模应用**。我们有理由相信，以后我们使用的多种阿里云的服务和软件，都将看到 “通义灵码” 的身影。

目前，**“通义灵码” 已面向所有开发者开放公测**，VS Code、JetBrains 等各大 IDE 插件市场均已上线，广大开发者下载后即可体验。

>
> 有趣的是，**“通义灵码” 还为它自己的开发也提供了帮助**。研发团队透露，在训练 “通义灵码” 的数据集时，开发人员使用了 “通义灵码” 开发了数据清洗脚本。不仅如此，“通义灵码” 的 IDE 插件的开发也使用到了 “通义灵码” 生成的代码。
>
>
>

![](/data/attachment/album/202310/31/210446y5g58mzbaq5zawb1.jpg)

它展示出的不仅仅是一种技术的优越性，更是对立足未来的坚定信念和努力。这种技术的突破标志着阿里云在 AI 领域的技术实力得到了充分体现，它以行动向世界证明，无论是在理论研究还是在实际应用上，阿里云都能以卓越的表现引领行业发展的潮流，为我们的未来带来无限可能。

### 100,000 卡量级的算力支持

训练大模型是一项庞大的系统性工程，它囊括了算力底座、网络、存储、大数据、AI 框架、AI 模型等复杂技术，只有强大的云计算体系才能训练出高质量的大模型。

为了保证大模型训练的稳定互联和高效并行计算，阿里云全新升级了人工智能平台 PAI。阿里云通义大模型系列就是基于**人工智能平台 PAI 训练**而成。PAI 底层采用 HPN 7.0 新一代 AI 集群网络架构，支持高达 **10 万卡量级的集群**可扩展规模，超大规模分布式训练加速比高达 96%，远超业界水平；在大模型训练任务中，可节省超过 50% 算力资源，性能全球领先。

![](/data/attachment/album/202310/31/210529t28xx9aa334c93vf.jpg)

这种庞大的规模和强大的计算力，使得复杂的 AI 模型训练和应用的各种挑战变得可控、可管理。大模型的训练和应用，尤其是那些需要消耗大量计算资源的工作，不再是一项遥不可及的艰巨任务。

此外，这个平台不仅提供了强大的硬件设施，也有丰富的软件资源和人工智能工程的最佳实践。所有这些都让使用者可以专注于他们的核心任务，即开发和实现人工智能的实用应用，而无需担心硬件和基础设施的问题，使得人工智能的发展和应用能够更高效、更广泛的推进。

### 结语

阿里云坚信，AI 的力量不应仅仅限于少数人，而应成为**每个人都能接触和利用的基础设施**，就如同我们生活中不可或缺的水、电一样普及。这个理念已经具备了实现的条件，因为阿里云正朝着这个方向坚定地推进。我们将看到一种 AI 的力量，不仅是科技人员，在他们的编程和设计任务上提供支持，也为商业、社区，甚至教育和家庭领域带来效率和洞察的普惠。随着编程的大众化，可能会有更多的个人和小公司能颠覆传统市场，创造出全新的产品和服务。

我们致力于让每个人都可以更容易地接触、学习和使用编程。我们希望能把**写代码变得像是写邮件一样简单和自然**。这并不是一个不切实际的梦想，而是我们当前正在为之努力的目标。在不远的未来，我们期待看到一个每个社会角落都能感受到 AI 的价值，每个人都能挖掘出自我创新的可能性的世界。


硬核观察 #1172 德国法庭裁决浏览器的“请勿跟踪”具有法律约束力

Summary:
? 德国法庭裁决浏览器的“请勿跟踪”具有法律约束力
? 谷歌承诺为安卓 14 的 “勒索软件” 漏洞提供救援补丁
? 苹果宣布了 M3 系列芯片及搭载该芯片的新 MacBook Pro
»
»

Apple M3又在挤牙膏，都2023年了还在卖8GB的“电子垃圾”，甚至能卖到上万元，大概是因为内存硬盘是用黄金做的。<br />
恭喜Apple继Intel之后荣获“牙膏厂”称号！为了区别，我们称为“黄金牙膏厂”。

因为去年苹果M1芯片设计总监被因特尔挖了墙角，回去老东家当CTO了。苹果的团队必然会动荡一段时间。。。

很神奇，团队的动荡居然没把把过时的8GB配置给“荡”掉

来自广西玉林的 Chrome Mobile 118.0|Android 10 用户

![](/data/attachment/album/202310/31/225123mxqvx6928qionsq2.jpg)

![](/data/attachment/album/202310/31/225130wzwi2iqi7k25355g.jpg)

### 德国法庭裁决浏览器的“请勿跟踪”具有法律约束力

德国一家地区法院裁定，微软旗下的 LinkedIn 不能再无视用户在浏览器中的 “<ruby> 请勿跟踪 <rt>  Do Not Track </rt></ruby>” 设置。“请勿追踪” 是一个允许用户启用的 HTTP 头字段，启用该字段向网站的服务器表明不希望被追踪。但“请勿追踪”被认为并不具有约束力，网站可以选择尊重用户的决定，也可以不理睬。LinkedIn 在网站上明确表示：由于目前没有“请勿追踪”的相关标准，它对该信号不予回应。德国消费者权益组织 vzbv 称，LinkedIn 的声明（即不遵守 “请勿追踪” 偏好）违反了 GDPR。它指出，如果消费者启用了浏览器的请勿追踪功能，那么他们发出了一个明确的信号：不希望其上网行为被跟踪用于广告等目的，网站运营者必须尊重这一信号。法官同意了这一意见。

>
> **[消息来源：Tech HQ](https://techhq.com/2023/10/is-linkedin-privacy-helped-or-hindered-by-do-not-track-or-private-browsing-mode/)**
>
>
>

>
> 老王点评：这是非常明确的声明，这个裁定为各国法院做出了表率。
>
>
>

![](/data/attachment/album/202310/31/225215zyq7loz3115zozkz.jpg)

### 谷歌承诺为安卓 14 的 “勒索软件” 漏洞提供救援补丁

由于安卓 14 中存在的一个缺陷，当安卓设备有多个用户时，会导致设备被锁定，就像被安装了勒索软件一样。该缺陷最初报告给谷歌时，并没有引起重视，但随着该缺陷被媒体多轮报道，该漏洞的级别从 P2 升级到了最高优先级的 P0，并已交由专人处理。谷歌已经发布了相关的 Play 系统的补丁，但问题在于 Play 系统的更新不会主动应用，甚至不会让你知道它们已被下载。所以需要受影响的用户手动检查更新并安装。

>
> **[消息来源：Ars Technica](https://arstechnica.com/gadgets/2023/10/google-promises-a-rescue-patch-for-android-14s-ransomware-bug/)**
>
>
>

>
> 老王点评：连技术漏洞都需要媒体监督才能有人重视。
>
>
>

![](/data/attachment/album/202310/31/225344cpqzwz2fftzoxfe1.jpg)

### 苹果宣布了 M3 系列芯片及搭载该芯片的新 MacBook Pro

苹果称，M3、M3 Pro 与 M3 Max 是全球首批使用 3 纳米工艺的 PC 芯片。与第一代 M1 芯片对比，M3 的高性能核心和高能效核心比 M1 中的相应核心分别快 30% 和 50%，神经网络引擎也比 M1 系列芯片上的快 60%，图形处理器渲染速度比 M1 系列芯片相比最快可达 2.5 倍。M3 系列芯片最大变化就是其图形处理器，在功耗减半的情况下可达到与 M1 相当的性能，在峰值功耗下可实现 65% 的性能提升。

>
> **[消息来源：The Verge](https://www.theverge.com/2023/10/30/23938867/apple-m3-imac-macbook-pro-biggest-announcements-m3)**
>
>
>

>
> 老王点评：苹果的 M 芯片确实很棒，而且事实上揭开了 Arm 芯片在个人计算机上的时代。
>
>
>


开放文档格式 ODT 文件格式解析

是文档格式定义了你，还是你定义了文档格式。

![](/data/attachment/album/202311/01/223607j3nvjcuw5jcocbz3.jpg)

>
> 开放文档格式（ODF）基于开放标准，你可以使用其它工具检查它们，甚至从中提取数据。你只需要知道从哪里开始。
>
>
>

过去，文字处理文件是封闭的专有格式。在一些较旧的文字处理软件中，文档文件本质上是该软件的内存转储。虽然这样可以让加载文件更快，但也使文档文件格式变得不透明。

2005 年左右，<ruby> 结构化信息标准促进组织 <rt>  Organization for the Advancement of Structured Information Standards </rt></ruby>（OASIS）为所有类型的办公文档定义了一种开放格式，即<ruby> 办公应用程序开放文档格式 <rt>  Open Document Format for Office Applications </rt></ruby>（ODF）。由于 ODF 是基于 [OpenOffice.org](http://OpenOffice.org) 的 XML 文件规范的开放式标准，因此你也可以将其简称为 “开放文档格式”。ODF 包括几种文件类型，包括用于 <ruby> 开放文档文本OpenDocument Text</ruby> 文档的 ODT。ODT 文件中有很多值得探索的内容，它的本质是一个 Zip 文件。

### ODT 文件结构

跟所有 ODF 文件一样，ODT 文件实际上是一个 XML 文档和其它文件的 Zip 压缩包。使用 Zip 可以占用更少的磁盘空间，同时也意味着可以用标准 Zip 工具来检查它。

我有一篇关于 IT 领导力的文章，名为“Nibbled to death by ducks”，我将其保存为 ODT 文件。由于 ODF 文件是一个 zip 容器，你可以用 `unzip` 命令来检查它：

```
$ unzip -l 'Nibbled to death by ducks.odt'
Archive: Nibbled to death by ducks.odt
Length Date Time Name
39 07-15-2022 22:18 mimetype
12713 07-15-2022 22:18 Thumbnails/thumbnail.png
915001 07-15-2022 22:18 Pictures/10000201000004500000026DBF6636B0B9352031.png
10879 07-15-2022 22:18 content.xml
20048 07-15-2022 22:18 styles.xml
9576 07-15-2022 22:18 settings.xml
757 07-15-2022 22:18 meta.xml
260 07-15-2022 22:18 manifest.rdf
0 07-15-2022 22:18 Configurations2/accelerator/
0 07-15-2022 22:18 Configurations2/toolpanel/
0 07-15-2022 22:18 Configurations2/statusbar/
0 07-15-2022 22:18 Configurations2/progressbar/
0 07-15-2022 22:18 Configurations2/toolbar/
0 07-15-2022 22:18 Configurations2/popupmenu/
0 07-15-2022 22:18 Configurations2/floater/
0 07-15-2022 22:18 Configurations2/menubar/
1192 07-15-2022 22:18 META-INF/manifest.xml
970465 17 files

```

我想强调 Zip 文件结构的以下几个元素：

1. `mimetype` 文件用于定义 ODF 文档。处理 ODT 文件的程序，如文字处理程序，可以使用该文件来验证文档的 MIME 类型。对于 ODT 文件，它应该总是：

```
application/vnd.oasis.opendocument.text

```
2. `META-INF` 目录中有一个 `manifest.xml` 文件。它包含查找 ODT 文件其它组件的所有信息。任何读取 ODT 文件的程序都从这个文件开始定位其它内容。例如，我的 ODT 文档的 `manifest.xml` 文件包含这一行，它定义了在哪里可以找到主要内容:

```
<manifest:file-entry manifest:full-path="content.xml" manifest:media-type="text/xml"/>

```
3. `content.xml` 文件包含文档的实际内容。
4. 我的文档中只有一张截图，它位于 `Pictures` 目录中。

### 从 ODT 中提取文件

由于 ODT 文档是一个具有特定结构的 Zip 文件，因此可以从中提取文件。你可以先解压缩整个 ODT 文件，例如使用 `unzip` 命令：

```
$ unzip -q 'Nibbled to death by ducks.odt' -d Nibbled

```

一位同事最近向我要了一份我在文章中提到的图片。通过查看 `META-INF/manifest.xml` 文件，我找到了嵌入图像的确切位置。用 `grep` 命令可以找到描述图像的行:

```
$ cd Nibbled
$ grep image META-INF/manifest.xml
<manifest:file-entry manifest:full-path="Thumbnails/thumbnail.png" manifest:media-type="image/png"/>
<manifest:file-entry manifest:full-path="Pictures/10000201000004500000026DBF6636B0B9352031.png" manifest:media-type=" image/png”/>

```

我要找的图像保存在 `Pictures` 文件夹中。可以通过列出目录的内容来验证：

```
$ ls -F
Configurations2/ manifest.rdf meta.xml Pictures/ styles.xml
content.xml META-INF/ mimetype settings.xml Thumbnails/

```

就是这张图片：

![Image of rubber ducks in two bowls](/data/attachment/album/202311/01/223659zr9a9hzndzaqhdjx.jpg)

### 开放文档格式

ODF 是一种开放的文件格式，它可以描述文字处理文件（ODT）、电子表格文件（ODS）、演示文稿（ODP）和其它文件类型。由于 ODF 格式基于开放标准，因此可以使用其他工具检查它们，甚至从中提取数据。你只需要知道从哪里开始。所有 ODF 文件都以 `META-INF/manifest.xml` 为“引导”文件，通过它你能找到其余的所有内容。

*（题图：MJ/d245ab34-f0b0-452c-b29a-ece9aa78f11a）*

---

via: <https://opensource.com/article/22/8/odt-files>

作者：[Jim Hall](https://opensource.com/users/jim-hall) 选题：[lkxed](https://github.com/lkxed) 译者：[toknow-gh](https://github.com/toknow-gh) 校对：[校对者ID](https://github.com/%E6%A0%A1%E5%AF%B9%E8%80%85ID)

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


为什么公司需要设立开源项目办公室（OSPO）

![](/data/attachment/album/202311/01/232800a8c8bk3b83rtbn6x.jpg)

>
> 要想软件产品能够成功，关键在于管理开源软件的使用并降低合规风险。开源项目办公室能帮助组织实现这一目标。让我们一起深入了解。
>
>
>

<ruby> 开源软件 <rt>  Open source software </rt></ruby>（OSS）是构建现代软件解决方案的重要组成部分。无论是服务于内部或是面向客户的解决方案，如今的组织都在很大程度上依赖于开源软件。开源软件组件受其独立的授权条款约束，对这些条款的不合规操作往往会使组织面临安全和知识产权（IP）风险，这进而可能会损害公司的品牌价值。

当开发团队正忙于发布软件版本时，他们的主要目标是满足项目的截止日期。因此，他们在跟踪组件版本、库或者引入项目的第三方代码时，往往疏于应有的严格性。这意味着带有许可限制或漏洞的开源软件组件可能会进入代码库，然后交付给客户，这对客户和提供软件解决方案的公司都将带来风险。

开发人员为开源项目做出贡献的领域也日益具有挑战性。如果公司能够参与，他们可以获得多种益处，包括保持技能的最新性，挽留员工，吸引开发者为组织工作，以及提升公司形象。很多开源项目要求开发者签署贡献者许可协议，该协议声明由开发者创建的知识产权属于该项目，而非开发者本人。在这种情况下，组织需要确保那些不公开源代码的知识产权和商业机密不会被转让给开源项目。

我们需要教育开发者去了解开源许可的相关问题，确定何时、如何以及在何种程度上向社区提供支持，以及哪些软件包可能会给组织的声誉带来风险。通过制定一套战略性的政策和操作流程，我们可以规范这一切。实现上述目标的一种方式就是设立一个专门处理所有开源相关事务的部门——即 <ruby> 开源项目办公室 <rt>  open source program office </rt></ruby>（OSPO）。

OSPO 为员工使用开源软件创建了一个生态环境，使合规风险得到良好的控制。OSPO 的角色不仅在于监督开源软件的使用，它还负责回馈社区，并通过积极参与各种活动以及组织网络研讨会和促销活动，来推动公司在市场上的增长。

在这篇文章里，我们将深入探讨为何公司需要设立一个 OSPO，以及它是如何在开源政策和管理程序中崭露头角的。

### 为何我们需要一个开源项目办公室（OSPO）？

由于开源软件正广泛地被运用，因此在产品开发周期中，为团队对其使用的监管和维持合规性策略往往会带来重大压力。

开发者往往会忽略许可证责任，有时甚至管理层或各利益相关方也并未完全意识到不遵守这些开源许可证的影响。不论是用于内部还是外部目的，OSPO 能处理从开始引入开源软件，直至交付给终端用户的过程中的所有环节。

通过在软件开发生命周期早期阶段开始进行合规性和规章制度的检查，OSPO 能构筑坚实的基础。这通常开始于引导和整合团队成员，共同迈向一个能惠及组织价值观的方向。OSPO 会设定关于开源使用的政策和流程，并在公司内部进行角色和职责的管理。

总结来说，OSPO 有助于整合所有参与产品构建的相关团队的努力，进而提升组织更好和更有效使用开源的能力。

#### 开源项目办公室（OSPO）的崛起

诸如微软、谷歌和 Netflix 等公司已经在自身组织内部设立了成熟的 OSPO。此外，像 Porsche 和 Spotify 这样的公司也在建立自己的 OSPO，以实现开源的高效利用。

以下是一些知名公司的领导者对 OSPO 实践的看法：

* “对于公司来说，这是一种文化的变迁，”Jeff McAffer 解释了他的观点，他曾经多年负责微软的 OSPO，并现在是 GitHub 的产品主管，致力于在企业界推动开源的发展。“很多公司并不习惯与外部团队合作。”
* “工程、业务、法律每一方的利益相关者都有他们各自的目标和角色，往往需要在速度、质量和风险之间做出权衡，” Spotify 的开源主管 Remy DeCausemaker 解释道。“ OSPO 的任务就是协调和连接这些单独的目标，融合成一个能够减少摩擦的全面策略。”
* Verizon Media 的 OSPO 领导 Gil Yahuda 表达了他的观点，“我们正在寻找创造一个人才愿意融入其中的工作环境。我们的工程师都知道，他们处在一个欢迎开源的环境中，他们在这里被鼓励与他们工作相关的开源社区合作。”

![图 1：2018-2021年各行业开源项目办公室的普及情况 （来源：https://github.com/todogroup/osposurvey/tree/master/2021）](/data/attachment/album/202311/01/232905uv3vsx3ggubvqv0x.jpg)

### 开源项目办公室（OSPO）的职能

OSPO 的职能可能会根据组织的员工数量、OSPO 团队的人数以及开源的运用目的不同而有所差异。组织可能只想利用开源软件来开发产品，也可能同时计划向社区做出贡献。

OSPO 的角色可能会包括评估哪些开源许可证是适宜的，以及是否应让全职员工参与开源项目等任务。为愿意贡献的开发人员制定贡献者许可协议（CLA），并确定哪些开源组件有助于产品的快速成长和质量提升也是 OSPO 的重要职责。

OSPO 的主要职能包括但不限于：

* 建立开源合规和治理政策来降低组织的知识产权风险
* 培育开发者做出更佳决策的能力
* 制定政策规范与公司全面采用开源的工作。
* 监控组织内外开源软件的使用情况
* 在每次软件版本发布后组织会议，讨论开源软件合规流程的优点及改进空间
* 加快软件开发生命周期（SDLC）
* 提高不同部门之间的透明度和协调性
* 通过简化流程在早期阶段降低风险
* 鼓励团队成员向上游贡献，以享受开源项目的协作和创新优势
* 提供包含合适补救措施和产品团队建议的报告
* 准备合规文档，确保满足许可证的义务

### 构建开源项目办公室（OSPO）的过程

OSPO 的组成通常包括公司内多个部门的人员。这个过程涉及了对相关部门进行开源合规基础和使用风险的培训与教育。OSPO 可能提供法律和技术支持，以确保达成开源的目标需求。

组织内的 OSPO 可能包括以下人员（这只是一个可能参与的人员名单，并不是详尽无遗的清单）：

* 主任/首席：主任或首席通常是 OSPO 的主要负责人。他能全方位掌控使用开源的各个方面，包括使用不同组件的影响，许可证的含义，以及开发和社区贡献等。这些要求完全取决于公司的需求。
* 项目经理：项目经理为目标解决方案设置需求和目标。他/她将与产品和工程团队共同工作，以协调工作流程。这包括以开发者友好的方式确保策略和工具的实施。
* 法律支持：法律支持可能来自公司外部或者内部，但他们在 OSPO 中扮演着重要角色。法律团队将与项目经理密切合作，定义管理开源软件使用的策略，包括每个产品允许使用的开源许可证，如何（或是否）向现有的开源项目贡献等。
* 产品和工程团队/开发者：工程团队需要熟悉开源许可及其相关风险。团队在使用任何开源组件之前，必须得到 OSPO 的批准。团队可能需要定期接受关于开源合规基础以及其使用的培训。
* 首席技术官/信息官/利益相关者：公司的领导对 OSPO 策略有着巨大影响。利益相关者在任何产品解决方案的决策过程中拥有很大的决定权。因此，工程副总裁，首席技术官/信息官，或者首席合规/风险官员需要参与 OSPO 的工作。
* IT 团队：来自 IT 部门的支持十分重要。OSPO 可能被分配实施内部工具的任务，如提高开发者效率，监控开源合规，或者设置开源安全措施等。IT 团队在协助连接工作流程和确保以开发者友好的方式实施策略方面起着关键作用。

在 TODO 组织于 2021 年执行的 OSPO 调查中，得出了以下的关键发现：

* 教育企业理解 OSPO 如何为他们带来益处的机会仍然巨大。
* OSPO 对其赞助方的软件实践有显著的积极影响，但影响的具体效果并因组织规模的大小而异。
* 那些有意设立 OSPO 的公司，他们期望 OSPO 能提升创新，但策略设立及预算力度仍然是实现目标的主要挑战。
* 调查参与者中近半数尚未设立 OSPO 的人认为 OSPO 将有助于他们公司的发展，然而在那些认为 OSPO 无助于公司发展的人群中，有 35% 的人还未对此事有所考虑。
* 27% 的调查参与者表示，一家公司对开源参与的程度会深刻影响他们组织的购买决策。

如今，在构建任何软件解决方案时，对开源软件的依赖几乎是无法避免的。然而，开源许可证相关的潜在风险也不容忽视。因此，我们需要一套策略性的流程来有效解决使用开源组件带来的合规性问题。

通过建立一支集中的专业团队，OSPO 能帮助公司确立规范的开源文化，让员工了解并熟悉与组织内开源使用相关的所有事宜。此外，OSPO 还可以发挥引导作用，吸纳行业内的顶级人才，这无疑将对实现商业目标产生积极影响。

*（题图：MJ/9a3e106d-0710-4dd7-b278-ef1056c5c5ab）*

---

via: <https://www.opensourceforu.com/2022/08/why-companies-need-to-set-up-an-open-source-program-office/>

作者：[Sakshi Sharma](https://www.opensourceforu.com/author/sakshi-sharma/) 选题：[lkxed](https://github.com/lkxed) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #1173 哪些搜索关键词能让谷歌赚钱

Summary:
? 哪些搜索关键词能让谷歌赚钱
? Bcachefs 被合并进正在开发中的 Linux 6.7
? Asahi Linux 化身 macOS 漏洞猎人
»
»

Bcachefs应该像ZFS那样作为一个模块。ZFS作为模块的主要原因是许可证，他们也考虑过换许可证，但是这要得到所有贡献者的同意，包括已经联系不上、甚至包括已经去世的人（都去世了还要他们同意吗？），最后没改成。

如果作者去世了就可以无视版权/更改授权，那太多的人见不到第二天的太阳。。。

贡献者不是作者，至少不是主要的作者。<br />
软件授权虽然也是一种知识产权，但还是有些区别的。我不了解相关法律，不妨假设一种情景：如果ZFS的所有在世贡献者都同意改成GPL协议，但是已经去世的个别贡献者自然不可能同意或反对，导致协议还是没法更改。这是一种讽刺的事情，跟作者去世之后受到版权法保护几十年不一样。

如果同意你的观点，不妨设想以下场景：

所有在世贡献者都不同意改成GPL，于是管理层把这些人都送去见了上帝。已经去世的贡献者自然不可能同意或反对，于是乎管理者可以任意处置。。。

如果ZFS换许可证真的关键且必须，可以从头照着原有思路重新写一份。。。

![](/data/attachment/album/202311/02/070230rzgxpyhhypigk6ip.jpg)

![](/data/attachment/album/202311/02/070238ag0tsz76k98rlr4h.jpg)

### 哪些搜索关键词能让谷歌赚钱

并非所有的谷歌搜索都能让谷歌赚钱。谷歌经常说，它只在大约 20% 的搜索中显示广告，也就是所谓的 “商业搜索”。在美国诉谷歌反垄断案的审理过程中，法官公开了 2018 年 9 月 22 日这一周的热门查询列表，而且是按照收入排序的。它们包括：iphone 8、汽车保险、廉价航班、direct tv、在线院校、at&t、hulu、uber、免费信用报告等。其中在前 20 个查询关键词中，有关汽车保险的关键词出现了五次，有关 iPhone 的出现了三次。

>
> **[消息来源：The Verge](https://www.theverge.com/2023/11/1/23941766/google-antitrust-trial-search-queries-ad-money)**
>
>
>

>
> 老王点评：观察这些“值钱”的关键词挺有趣的。
>
>
>

###

### Bcachefs 被合并进正在开发中的 Linux 6.7

Bcachefs 曾在 Linux 6.5 中被 [否决](/article-15989-1.html)，后来又在 Linux 6.6 中被重新提交，但由于没有在 Linux-Next 树中进行额外测试而 [未能成功](/article-16172-1.html)。之后，Bcachefs 在 Linux-Next 中度过了整个 6.6 版周期，现在又提交给了 Linux 6.7 版的合并窗口，并被 Linus Torvalds 迅速接受。

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/Bcachefs-Merged-Linux-6.7)**
>
>
>

>
> 老王点评：终于合并进去了。
>
>
>

![](/data/attachment/album/202311/02/070317snhhr07tzbgeriao.jpg)

### Asahi Linux 化身 macOS 漏洞猎人

正在积极将 Linux 移植到苹果芯片 Mac 的 Asahi Linux 项目，报告了苹果 macOS 中的一系列错误，这些错误可能会让用户的硬件处于难以恢复的状态。这些问题围绕着最新版本的 macOS 如何处理刷新率，配备 ProMotion 显示器的 MacBook Pro 机型受到了影响。据 Asahi 团队称，这些漏洞与 Asahi Linux 无关，而是潜伏在 macOS 升级和启动过程中。

>
> **[消息来源：The Register](https://www.theregister.com/2023/11/01/asahi_linux_mac_black_screen/)**
>
>
>

>
> 老王点评：恐怕连苹果也没想到它的质控问题是被一个 Linux 移植项目发现的，不知道是不是有重大奖金。
>
>
>


10 月份在 Fedora Linux 上值得尝试的酷炫 Flatpak应用

Summary: 本文介绍了 Flathub 中可用的项目以及安装说明。

本文介绍了 Flathub 中可用的项目以及安装说明。

![](/data/attachment/album/202311/02/210448a8vbipsdww8qk8bp.jpg)

>
> 本文介绍了 Flathub 中可用的项目以及安装说明。
>
>
>

[Flathub](https://flathub.org) 是获取和分发适用于所有 Linux 的应用的地方。它由 Flatpak 提供支持，允许 Flathub 应用在几乎任何 Linux 发行版上运行。

请阅读 “[Flatpak 入门](https://fedoramagazine.org/getting-started-flatpak/)”。要启用 flathub 作为你的 flatpak 提供商，请使用 [flatpak 站点](https://flatpak.org/setup/Fedora) 上的说明。

### Warehouse

[Warehouse](https://flathub.org/apps/io.github.flattool.Warehouse) 是一个图形程序，用于管理已安装的 Flatpak 应用程序和 Flatpak 远程应用。一些最重要的功能是：

* 查看 Flatpak 信息
* 管理用户数据
* 批量操作
* 剩余数据管理
* 管理远程应用

你可以通过单击网站上的安装按钮或手动使用以下命令来安装 “Warehouse”：

```
flatpak install flathub io.github.flattool.Warehouse

```

### Jogger

[Jogger](https://flathub.org/apps/xyz.slothlife.Jogger) 是一款适用于 Gnome Mobile 的应用，用于跟踪跑步和其他锻炼。它是用 GTK4、Libadwaita、Rust 和 Sqlite 构建的。尽管它的目标是 Gnome Mobile，但它在 Gnome Shell 下运行得很好，而且我发现它对于保存我的统计数据非常有用。其中一些功能是：

* 使用 Geoclue 位置跟踪锻炼
* 从 Fitotrack 导出导入锻炼
* 手动输入锻炼
* 查看锻炼详情
* 编辑锻炼
* 删除锻炼
* 计算锻炼消耗的卡路里

你可以通过单击网站上的安装按钮或使用以下命令手动安装 “Jogger”：

```
flatpak install flathub xyz.slothlife.Jogger

```

### Kooha

[Kooha](https://flathub.org/apps/io.github.seadve.Kooha) 是一个简单的屏幕录像机，具有简约的界面。你只需单击录制按钮即可，无需配置一堆设置。

Kooha 的主要特点包括：

* 录制麦克风、桌面音频或同时录制两者
* 支持 WebM、MP4、GIF 和 Matroska 格式
* 选择要录制的监视器、窗口或屏幕的一部分
* 多种来源选择
* 可配置的保存位置、指针可见性、帧速率和延迟
* 它在 Wayland 上运行得很好。

```
flatpak install flathub io.github.seadve.Kooha

```

### Warzone 2100

谁不喜欢经典的 Linux 游戏呢？

[Warzone 2100](https://flathub.org/apps/net.wz2100.wz2100) 让你指挥“计划”部队，在人类几乎被核导弹摧毁后重建世界。

![](/data/attachment/album/202311/02/210340vdh2a3aohtagxexx.jpg)

Warzone 2100 于 1999 年发行，由 Pumpkin Studios 开发，是一款开创性的创新型 3D 即时战略游戏。

2004 年，Eidos 与 Pumpkin Studios 合作，以 GNU GPL 条款发布了游戏的源代码。此版本包含除音乐和游戏内视频序列之外的所有内容。当然，这些后来也被发布。

该游戏有一个问题：它使用旧的平台包（org.kde.Platform 6.4）。这意味着它需要更多的磁盘空间，但乐趣是值得的！

你可以通过单击网站上的安装按钮或使用以下命令手动安装 “Warzone 2100”：

```
flatpak install flathub net.wz2100.wz2100

```

Warzone 2100 也可以在 Fedora 仓库中以 rpm 形式使用。

*（题图原始图片由 Daimar Stein 提供）*

---

via: <https://fedoramagazine.org/fedora-linux-flatpak-cool-apps-to-try-for-october/>

作者：[Eduard Lucena](https://fedoramagazine.org/author/x3mboy/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


AI 模型的开源定义需要改变

Summary: 你认为开源许可证应当进行演变吗？

你认为开源许可证应当进行演变吗？

![](/data/attachment/album/202311/02/215953yyz45l5l3v4fzqyv.jpg)

>
> 你认为开源许可证应当进行演变吗？
>
>
>

2023 年，我们以**人工智能（AI）崭露头角**开始了新的一年，同时也见证了众多公司全力以赴投身于 AI。

比如说 **Mozilla**，它在 2023 年初制定了 [开源 AI 计划](https://news.itsfoss.com/mozilla-open-source-ai/)，以开发各种 AI 驱动的解决方案。而 **HuggingChat** 也成为了第一个推出 ChatGPT [开源替代品](https://news.itsfoss.com/huggingchat-chatgpt/) 的组织。

即便是 Meta，他们也不例外。他们自家的 <ruby> 大型语言模型 <rt>  Large Language Model </rt></ruby>（LLM）[Llama 2](https://ai.meta.com/llama/) 项目在这一年都颇受关注，几个月前他们甚至推出了一款新的 [ChatGPT 竞争对手](https://news.itsfoss.com/meta-open-source-chatgpt/)。

然而，也有很多人开始 [提出质疑](https://www.wired.com/story/the-myth-of-open-source-ai/)，主张 **Meta 的 Llama 2 模型并不像人们期望的那样开放**，查看它的开源许可证似乎更是印证了这个观点。

该许可证 **不允许拥有超过 7 亿日活跃用户的服务使用 Llama 2**，同样的，**它也不能被用于训练其他的语言模型**。

这也就意味着 Meta 对于 Llama 2 的许可证 **未能满足** <ruby> 开源倡议组织 <rt>  Open Source Initiative </rt></ruby>（OSI）的 <ruby> <a href="https://opensource.org/osd/">  开源定义 </a> <rt>  Open Source Definition </rt></ruby>（OSD）所列出的 **全部要求**。

人们可以争辩，像 [EleutherAI](https://www.eleuther.ai/) 和 [Falcon 40B](https://www.tii.ae/news/uaes-technology-innovation-institute-launches-open-source-falcon-40b-large-language-model) 这样的机构就做出了很好的示范，展示了如何适当地处理 AI 的开源许可。

然而，Meta 对此的看法却截然不同。

### 开源许可需要进化

在与 [The Verge](https://www.theverge.com/2023/10/30/23935587/meta-generative-ai-models-open-source) 的交谈中，Meta 人工智能研究副总裁 [Joëlle Pineau](https://en.wikipedia.org/wiki/Jo%C3%ABlle_Pineau) 为他们的立场进行了辩解。

她说，我们 **需要在信息共享的益处和可能对 Meta 商业造成的潜在成本之间寻找平衡**。

这种对开源的态度让他们的研究人员能够更加专注地处理 AI 项目。她还补充说：

>
> 开放的方式从内部改变了我们的科研方法，它促使我们不发布任何不安全的东西，并在一开始就负起责任。
>
>
>

Joëlle 希望他们的生成型 AI 模型能够和他们过去的 [PyTorch](https://pytorch.org/) 项目一样受到热捧。

但是，**问题在于现有的许可证机制**。她又补充说，这些许可证并不是设计来处理那些需要利用大量多源数据的软件。

这反过来**为开发者和用户提供了有限责任**，以及，**对版权侵犯的有限赔偿**（解释为：保护）。

此外，她还指出：

>
> AI 模型与软件不同，涉及的风险更大，因此我认为我们应该对当前用户许可证进行改变，以更好地适应 AI 模型。
>
>
> 但我并不是一名律师，所以我在此问题上听从他们的意见。
>
>
>

我赞同她的观点，我们需要更新现有的许可方案，使之更好地适应 AI 模型，以及其他相关事务。

显而易见，**OSI 正在努力进行此事**。OSI 的执行董事 [Stefano Maffulli](https://twitter.com/smaffulli) 向 The Verge 透露，他们了解到 **当前的 OSI 批准的许可证无法满足人工智能模型的需求**。

他们正在商讨如何与 AI 开发者合作，以提供一个 “**透明、无许可但安全**” 的模型访问。

他还补充说：

>
> 我们肯定需要重新思考许可证的方式，以解决 AI 模型中版权和授权的真正限制，同时仍遵循开源社区的一些原则。
>
>
>

无论未来如何，显然，**开源标准必须推动其演化，以适应新的以及即将出现的技术** ，而此类问题不仅仅局限于 AI。

对于未来几年开源许可的变革，我充满期待。

? 对于你来说呢？你认为对于陈旧的开源标准，我们需要进行什么样的改变？

*（题图：MJ/e8bae5f6-606b-47db-aaea-c992c0bd143e）*

---

via: <https://news.itsfoss.com/open-source-definition-ai/>

作者：[Sourav Rudra](https://news.itsfoss.com/author/sourav/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #1174 OpenELA 发布用于构建 RHEL 8/9 衍生版的源代码

Summary:
? OpenELA 发布用于构建 RHEL 8/9 衍生版的源代码
? Fedora 40 将放弃 X11 会话
? Chrome 浏览器放弃网络完整性 API
»
»

![](/data/attachment/album/202311/03/092451kz962zl7pn4lz6dz.jpg)

![](/data/attachment/album/202311/03/092459f2u2dck020kwczux.jpg)

### OpenELA 发布用于构建 RHEL 8/9 衍生版的源代码

在红帽决定限制客户访问 RHEL 源代码之后，各种基于 RHEL 的 Linux 发行版都陷入了困境。CIQ（Rocky Linux）、SUSE 和甲骨文决定成立开放企业 Linux 协会（OpenELA），以确保对企业 Linux 源代码的开放和免费访问。OpenELA 刚刚宣布，构建 RHEL 8/9 衍生版本所需的所有软件包的源代码现在都已可用。RHEL 7 的源代码仍在开发中。

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/OpenELA-Initial-Source-Code)**
>
>
>

>
> 老王点评：国内的 CentOS 系的企业 Linux 均没有参加 OpenELA。
>
>
>

![](/data/attachment/album/202311/03/092511kd3vmtd3chd9z8d0.jpg)

### Fedora 40 将放弃 X11 会话

[计划](/article-15821-1.html) 于明年 2 月发布的 KDE Plasma 6 将默认使用 Wayland 会话，而保留 X11 会话。将于明年 4 月发布的 Fedora 40 将采用 KDE Plasma 6.0 作为桌面选项。此外，作为这一变化的一部分，Fedora 40 计划放弃 KDE X11 会话，只保留 KDE Plasma Wayland 会话。此外，Fedora 40 还将移除对 [GNOME X11 会话](/article-16272-1.html) 的支持。

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/Fedora-40-Approves-Plasma-6)**
>
>
>

>
> 老王点评：按 Fedora 引领技术变化的成功案例来说，真正淘汰 X11 已经被安排上了日程。
>
>
>

![](/data/attachment/album/202311/03/092550rrh11c1pmm44xyzq.jpg)

### Chrome 浏览器放弃网络完整性 API

早在今年七月，谷歌就推出了网络完整性 API，希望为网站提供一种方法来确认用户及其设备/浏览器的真实性。目前该方案已经有了原型，但还只是在提案阶段。网络完整性 API 将允许网站 “请求一个令牌，证明其客户端代码运行环境的关键事实”。这与安卓系统上的类似 API（SafetyNet）并无太大区别，谷歌钱包和其他银行应用程序使用该 API 来确保设备未被篡改（root）。许多人将其等同于 DRM，提出了 [反对意见](/article-16032-1.html)，谷歌表示 “听到了你们的反馈”，并于今天表示，“Chrome 浏览器团队不再考虑网络环境完整性提案”。

>
> **[消息来源：9to5google](https://9to5google.com/2023/11/02/google-chrome-web-integrity-api/)**
>
>
>

>
> 老王点评：看来这次谷歌的投石问路失败了。
>
>
>


Skiff Mail 添加了方便的“快速别名”功能

Summary: 一个用户邮件别名的省时功能。

我看了“邮箱说”网站，今年只有4篇文章，但他在7月初就发了Skiff Mail设置别名的简短教程。

来自广东广州的 Chrome Mobile 119.0|Android 10 用户

一个用户邮件别名的省时功能。

![](/data/attachment/album/202311/03/222957cr3rujs9rvxjm9x7.jpg)

>
> 一个用户邮件别名的省时功能。
>
>
>

Skiff Mail 是一款开源的端到端加密电子邮件服务，非常注重隐私。在各方面，包括用户体验方面，它都是 Gmail 和 Proton mail 的不错替代品。

虽然与竞争对手相比，它相当新，但它的一些注重隐私的功能可能会给你留下深刻的印象。

此外，还推出了一项新的快速别名功能。我试用了一下，感觉非常方便。

### 快速别名：一次性无忧设置

一般来说，你可以使用一些 [电子邮件保护工具](https://itsfoss.com/protect-email-address/)（例如 SimpleLogin）或从你的电子邮件提供商（无论是谁）创建电子邮件别名。

![](/data/attachment/album/202311/03/223034ij8ezs0es8l190s1.jpg)

你可以选择记住电子邮件别名以供使用，或者在每次注册服务、新闻通讯或向你不认识的人提供联系信息时生成唯一的别名。

换句话说，大多数情况下，需要你进行多次交互才能使用多个电子邮件别名。

在这里，[Skiff Mail](https://skiff.com/mail) 允许你为自己声明一个完整的唯一子域，例如 **[gojo.maskmy.id](http://gojo.maskmy.id)** （正如我在测试用例中所做的那样）：

![](/data/attachment/album/202311/03/223034o5tzhk07tby48y0q.jpg)

接下来，你所要做的就是 – 在激活它时将其视为你的网站地址，并在其之前添加任何内容作为电子邮件地址，例如 **[xyz@gojo.maskmy.id](https://news.itsfoss.com/cdn-cgi/l/email-protection)** 或 **[demo@gojo.maskmy.id](https://news.itsfoss.com/cdn-cgi/l/email-protection)**。

如上面的截图所示，你也可以选择生成一个随机名称来声明。

你可以从“<ruby> 设置 <rt>  Settings </rt></ruby>”菜单访问“<ruby> 快速别名 <rt>  Quick Aliases </rt></ruby>”功能：

![](/data/attachment/album/202311/03/223035rkv7h5k5pw74cahq.png)

因此，你不再需要生成电子邮件别名，但仍然可以通过这种方式拥有无限的别名。使其成为一次性设置解决方案，可供在线和离线使用。

我认为这些类型的别名应该有几个好处：

* 它使你无需访问该工具即可轻松创建新别名
* 使电子邮件别名看起来比垃圾邮件更真实

根据你的订阅，每人最多可以申请 3 个域名（Essential：1、Pro：2、Business：3）。并且，使用它们创建无限的电子邮件别名。

如果你使用免费套餐，你还可以申请 1 个域名，但最多只能使用 10 个别名。

>
> **[Skiff Quick 别名](https://skiff.com/quick-alias)**
>
>
>

? 你对此功能有何看法？ 请在下面的评论中告诉我。

---

via: <https://news.itsfoss.com/skiff-quick-aliases/>

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

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


Garuda Linux “Spizaetus” 发布，可以体验 KDE Plasma 6 了！

![](/data/attachment/album/202311/03/225157jllf15lmeqehhhip.jpg)

>
> Garuda Linux 的最新升级带来了一些引人入胜的变化，以及一个全新的 ISO 版本。
>
>
>

Garuda Linux，作为一款 [用户友好且基于 Arch Linux 的发行版](https://itsfoss.com/arch-based-linux-distros/)，由于其可高度定制和可扩展性，近期已经吸引了大批用户。

Garuda Linux 提供了众多选项以满足不同的使用场景，无论是编程还是游戏。

目前，Garuda Linux 的最新发布版，**Garuda Linux “Spizaetus”** 现已可用。

下面，让我来引导你了解一下这个版本。

### ? Garuda Linux “Spizaetus”：有哪些新变化？

![](/data/attachment/album/202311/03/225227sxdwrp5rrdzale00.png)

这个版本的代号“[Spizaetus](https://en.wikipedia.org/wiki/Spizaetus)” 是来源于一种通常在美洲热带地区发现的鹰鹞。此次发布的**主要亮点**包括：

* 提供 Hyprland ISO
* Ugrep 取代了 Grep
* 提供了实验性的 KDE Plasma 6 仓库

#### 提供 Hyprland ISO

![](/data/attachment/album/202311/03/225228yljls041s4ss1smm.png)

在这个 Garuda Linux 的版本中，推出了带有 [Hyprland](https://hyprland.org/) 动态平铺 Wayland 组合器的新 ISO，这让**流畅的动画**和**轻松的窗口平铺**成为可能。

在此，开发者之一的 **dr460nf1r3** 表示：

>
> 关注精美的界面和模糊的窗口，Hyprland 无疑是 Garuda 的完美搭配。
>
>
>

>
> ? 然而，不幸的是，他们**不得不停止一些其它变体的更新**，因为这些变体并未得到妥善维护。受影响的变体包括：**MATE**、**LXQt-Kwin**、**KDE-git** 和 **Wayfire**。
>
>
>

#### Ugrep 取代了 Grep

[grep](https://en.wikipedia.org/wiki/Grep) 命令行工具已被性能更强的 [ugrep](https://ugrep.com/) 文件模式搜索器所取代，后者声称自己是“**超快速且用户友好的 Grep 替代品**”。

这是一个令人感兴趣的改变，我们期待看到用户的反馈。

#### 实验性的 KDE Plasma 6 仓库（请谨慎！）

开发者们还引入了一个名为 [chaotic-aur-kde](https://forum.garudalinux.org/t/kde-6-repository-testing/31442) 的实验性仓库，以提供**早期版本的 Plasma 6**。

请注意，这是为那些想提前体验 Plasma 6 设计的用户而设，并**不建议将其用于生产环境**。 一位开发者补充道：

>
> 我们一直在努力通过特定的 chaotic-aur-kde 仓库，提供 Plasma 6 的早期构建。
>
>
> 这可以让我们初步探索未来的 Plasma 6 将会是什么样子 - 它的首个版本计划在 2024 年 2 月发布。无需多说，这些都是来自主分支的实验性构建版，因此只适合喜欢接受挑战认的人去体验。
>
>
>

#### ? 其它的变化和改进

除了上述的亮点之外，还有些其他值得一提的细化调整：

* **garuda-update 工具已更新** 用于处理近期由于包名称变更引发的冲突。
* [Plymouth](https://wiki.archlinux.org/title/plymouth) **已被移除** ，现在在启动时，会显示终端的输出内容。
* 对他们的**基础设施进行了各种更新**，以服务用户。
* 为 Garuda Linux 安装了一个专用的 [Lemmy 实例](https://lemmy.garudalinux.org/)。

你可以查阅 [官方公告](https://forum.garudalinux.org/t/garuda-linux-spizaetus-231029/31843) 来获取更多详细信息。

### ? 下载 Garuda Linux “Spizaetus”

Garuda Linux 提供了 **9 个不同的变体**，包括有 **KDE Plasma**、**GNOME**、**Xfce**、**Cinnamon**、**Sway** 等等选择。

你只需前往 [官方网站](https://garudalinux.org/downloads) ，就可以找到自己所需的镜像下载。

>
> **[Garuda Linux](https://garudalinux.org/downloads)**
>
>
>

? 你会尝试这个新发布的版本吗？欢迎在评论中告知我们！

---

via: <https://news.itsfoss.com/garuda-linux-spizaetus-release/>

作者：[Sourav Rudra](https://news.itsfoss.com/author/sourav/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #1175 最重要的计算机视觉库 OpenCV 众筹新版本，应者寥寥

Summary:
? 最重要的计算机视觉库 OpenCV 众筹新版本，应者寥寥
? 科学家建议将闰秒变成几十年才需要调整一次的闰分
? 企业称 Meta 的免费人工智能并不便宜
»
»

主要是OpenCV官方太老实了。。。

但凡学习某些XXX，软件里面埋几个雷，然后提供收费的技术支持服务。。。

这招在制造业，尤其是家电业非常常见。。。

OpenCV是库，不是软件。埋雷（相当于后门）就变成最近的Unity了，这样做只会影响开源社区的声誉。

“ OpenCV是库，不是软件。”

——现代版的“白马不是马”

"老王点评：依靠 OpenCV 吃饭的人不少，但是都不愿意帮助它活下去。"

以上这句话至少2个谬误：

1，“都不愿意”，“都”显然不成立，更别提“不愿意”。

2，“帮它活下去”，这个“它”显然代指你前面所提的“OpenCV”,但文章没有提及OpenCV自身有活不下去的问题。

来自117.128.4.200的 Chrome Mobile 111.0|Android 10 用户

![](/data/attachment/album/202311/04/121311ji1h48ifdnhdq4nz.jpg)

![](/data/attachment/album/202311/04/121319xi7h7v754hztgk7l.jpg)

### 最重要的计算机视觉库 OpenCV 众筹新版本，应者寥寥

OpenCV 是一个开源的计算机视觉和机器学习软件库。据报告，89% 的嵌入式视觉工程师使用 OpenCV 作为主要的计算机视觉库。为了筹集完成和发布其重要 5.0 版本所需的资金，OpenCV 团队宣布发起一项众筹活动。OpenCV 5.0 原本是 20 周年纪念版本，最初计划于 2020 年发布，但要完成这个版本，需要很多资金。他们设立了 50 万美元的众筹目标，他们也希望“向其他陷入困境的开源项目证明众筹是一个可行的选择，而不仅仅依赖企业捐赠”。不过，这次的众筹于 10 月 24 日开始，十天过去了，才仅仅完成 5% 的目标。

>
> **[消息来源：i-Programmer](https://www.i-programmer.info/news/80-java/16662-opencv-launches-crowdfunding-campaign.html)**
>
>
>

>
> 老王点评：依靠 OpenCV 吃饭的人不少，但是都不愿意帮助它活下去。
>
>
>

![](/data/attachment/album/202311/04/121337fypjesj9jl93w3k8.jpg)

### 科学家建议将闰秒变成几十年才需要调整一次的闰分

由于以地球自转为基础的天文钟和铯原子钟之间存在偏差，自 1972 年以来，每隔几年就通过插入闰秒来同步这两个时间 —— 让原子钟短暂停顿一下，让天文钟赶上。这就产生了 UTC，即世界协调时。但很难准确预测何时需要闰秒，这让科技公司、国家和世界计时员越来越头疼。美国国家标准与技术研究院负责网络时间同步的 <ruby> 朱达·莱文 <rt>  Judah Levine </rt></ruby> 提出了一个新的解决方案：闰一分钟。这样可以减少时钟同步的频率，也许每半个世纪才需要同步一次，而在此期间基本上忘掉它。

>
> **[消息来源：《纽约时报》](https://www.nytimes.com/2023/11/03/science/time-leap-second.html)**
>
>
>

>
> 老王点评：最初的闰秒设计是一个直觉方案，现在看起来没有考虑到科技发展这么快，以至于大量的科技设施需要依赖精确而一致的时间。
>
>
>

![](/data/attachment/album/202311/04/121353rhq4n7onbg9b7nq5.jpg)

### 企业称 Meta 的免费人工智能并不便宜

一些为 OpenAI 人工智能付费的公司一直在寻求使用免费的开源替代品来降低成本。在 Meta 公司发布了开源的大型语言模型 Llama 2 之后，业界对此感到非常兴奋。但企业发现，他们为此向谷歌云一个月支付了 1200 美元，而使用 GPT-3.5 Turbo 处理相同的工作量每月才需要花费约 5 美元。企业发现，使用开箱即用的 Llama 2 的成本比 OpenAI 的 GPT-3.5 Turbo 高 50% 到 100%；而只有那些希望通过对数据进行训练来定制 LLM 的公司，才会选择开源方案 —— 在这种情况下，定制 Llama 2 模型的成本约为定制 GPT-3.5 Turbo 模型的四分之一。

>
> **[消息来源：The Information](https://www.theinformation.com/articles/metas-free-ai-isnt-cheap-to-use-companies-say)**
>
>
>

>
> 老王点评：一方面我相信 OpenAI 和 Azure 都为 AI 客户提供了大量的补贴，所以使用 GPT 会比 Llama 2 更便宜。另外一方面，当你需要定制，并且有定制的能力时，开源的 Llama 2 可能更适合你。
>
>
>


如何在 Ubuntu 上安装最新的 LibreOffice

![](/data/attachment/album/202311/04/170549qzsfnygzhtzsn0uo.jpg)

>
> 想在 Ubuntu 上使用最新、最好的 LibreOffice？这里有一个简单的方法。
>
>
>

LibreOffice 已预装在 Ubuntu 中。

不过，如果你选择了最小化的 Ubuntu 安装，或者卸载它并安装了其他办公套件，你可以使用此命令轻松安装：

```
sudo apt install libreoffice

```

这没问题。但 Ubuntu 仓库提供的 LibreOffice 版本可能不是最新的。

如果你听说有新的 LibreOffice 版本发布，很可能你不会获得该新版本。这是因为 Ubuntu 将其保持在稳定版本上。

这对大多数用户来说都很好。但是，如果你不是“大多数用户”，并且你想在 Ubuntu 中获取最新的 LibreOffice，那么你完全可以这样做。

有两种方法可以做到这一点：

* 使用官方 PPA（推荐）
* 从 LibreOffice 下载 deb 文件

让我们来看看。

### 方法 1：通过官方 PPA 安装最新的 LibreOffice（推荐）

你可以使用官方 “LibreOffice Fresh” PPA 在基于 Ubuntu 的发行版上安装 LibreOffice 的最新稳定版本。

PPA 提供了 LibreOffice 的最新稳定版本，而不是开发版本。因此，这使其成为在 Ubuntu 上获取较新 LibreOffice 版本的理想选择。

你甚至不需要使用此方法卸载以前的版本。它将把现有的 LibreOffice 更新到新版本。

```
sudo add-apt-repository ppa:libreoffice/ppa
sudo apt update
sudo apt install libreoffice

```

由于你要添加 PPA，因此你还将获得以这种方式安装的新版本的更新。

### 方法 2：从网站获取二进制文件（如果需要）

你可以随时前往 [LibreOfiice 网站的下载页面](https://www.libreoffice.org/download/download-libreoffice) 下载最新版本的 deb 文件。你还会看到下载较旧但 LTS 稳定版本的选项。

![](/data/attachment/album/202311/04/170633n7pqyq5k5v6p8ebl.png)

我相信你已经 [知道如何从 deb 文件安装应用](https://itsfoss.com/install-deb-files-ubuntu/)。右键单击 deb 文件，选择使用软件中心打开它。进入软件中心后，你可以单击安装按钮进行安装。

### 结论

第二种方法的缺点是，如果有更新，你必须再次下载 deb 文件，删除以前的 LibreOffice 版本，然后使用新下载的 deb 文件安装新版本。

相比之下，PPA 会随着系统更新而自动更新。这就是我推荐 PPA 的原因，特别是当它由 LibreOffice 团队自己维护时。

顺便说一句，这里有一些 [充分利用 LibreOffice 的技巧](/article-15530-1.html)：

>
> **[提高 LibreOffice 生产力的技巧](/article-15530-1.html)**
>
>
>

我希望这个快速技巧可以帮助你在基于 Ubuntu 的发行版上获取最新的 LibreOffice。如果你有疑问，请告诉我。

---

via: <https://itsfoss.com/install-libreoffice-ubuntu/>

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

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


计算机科学学者认为技术支持没什么用处，直到他真正需要它

that was great！

来自河南焦作的 Chrome 114.0|Chrome OS 14541.0 用户

哈哈哈，发现错在自己，但依然保持傲娇的，计算机教授～～～

![](/data/attachment/album/202311/04/175322tfex5vobpe1vkkfe.jpg)

>
> “他们基本上是用 Emacs 作为自己的操作系统，再配上一个自定义的 LISP 脚本来收取邮件” —— 那能有什么问题呢？
>
>
>

本周的故事，故事的主角我们给他起名字 “Declan”，他在 1990 年和 2000 年期间，为一所大学的计算机科学系提供 IT 支持服务。

Declan 这样介绍他的工作：“我的职责多样，从基本的桌面支持，到维护院系网站，有时候还需要开发一些学者们想出来的某个什么系统。”

Declan 还补充说道，“尽管这个院系名字中带有 ‘计算机’ 这个词，但你会惊讶地发现在这个团队中各个教职工对计算机的熟练程度差异如此之大。有些聪明人用非常 ‘有趣’ 的方式使用电脑，当你步入一个教授的办公室协助‘解决他的电子邮件问题’时，你绝对会对你发现的东西感到惊讶。”

一个典型的例子是某位教授，他基本上是以 Emacs 作为其操作系统，而他的邮件客户端则是他自己用 LISP 编写的一个脚本。至于他的邮件为何无法收发，这是另一个故事了。

今天我们要讲的故事，跟 Declan 的部分用户之间发生的冲突有关。他们作为计算机科学家，对 IT 团队的存在感到不满，他们认为用在 Declan 和他的同事身上的投资，可以用于更重要的地方。对于这种观点，其中一部分人并不甘于默默背锅。

“有一次，一位讲话特别直言不讳的学者在全系会议上站出来，当着 400 名员工的面严厉批评 IT 人员，声称他不仅不需要 IT 支持人员，而且每当他提交支持申请时，我们总是无视他，” Declan 回忆道。

IT 部门的负责人因此要求他的团队去调查是否存在他所说的问题。于是，Declan 和他的团队请求那位愤怒的学者再次提交问题申请以重现问题。

学者依照他们的请求提交了申请。然而，他们却并未收到任何申请单。

接下来的步骤，则是对服务器日志的检查。

经过搜索，结果显露出来。这位学者的确提交了一张申请单，甚至还提交过几张其他的。

然而，它们都被发送到了以 “heldesk@” 开头的邮件地址。

而并非正确的包含 “p” 字母的 “hel**p**desk@”。

这位学者的邮件客户端记住了这个错误的地址，并且在他每次向他觉得不应存在的团队寻求帮助时，都会自动填入这个地址。

这个结果无疑是对学术严谨性的一种讽刺。

Declan 说：“这位学者被告知了他的错误，但他还是一本正经地表示，既然他的胳膊受伤，不能期待他打字完全准确，所以整个问题都不是他的责任，而并没有因为指责我们浪费金钱而道歉。”

几年前，我们有位员工手受伤了，然而他却惊讶地发现就算仅用中指打字也比想象中容易。如果 Declan 希望让那位愤怒的学者看看，我们愿意提供一个示例。

然而我们有些离题了。Declan 提到，这件事也带来了一个积极的转机，因为在那次事件发生后，计算机科学系的系主任开始“更倾向于站在 IT 人员这边，于是这场风波并非全然就是一场失败”。

你有没有过这样的经历，即与一个号称专家的人一起工作，但结果却发现他远非其言?如果有，你可以发表评论讲一下你的经历。

*（题图：MJ/e3f2ea48-bd9b-4952-96c3-5963ba6378fc）*

---

via: <https://www.theregister.com/2023/11/03/on_call/>

作者：[Simon Sharwood](https://www.theregister.com/Author/Simon-Sharwood) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

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


活动资料下载 ｜ LLUG 成都场成功举办

Summary: 就在上周末，10 月 29 日的成都，LLUG 成都场成功在武侯区菁蓉汇举办。

就在上周末，10 月 29 日的成都，LLUG 成都场成功在武侯区菁蓉汇举办。

![](/data/attachment/album/202311/05/150303ztoqq5c0clcz6t6w.jpg)

>
> 就在上周末，10 月 29 日的成都，LLUG 成都场成功在武侯区菁蓉汇举办。
>
>
>

![](/data/attachment/album/202311/05/145531ou2mrfruz73r7rys.jpg)

本次活动由 Linux 中国和龙蜥社区（OpenAnolis）联合主办，异步图书、COSCON 中国开源年会提供了支持。本次活动主要由三位嘉宾共同线上线下分享为主，并辅以线下交流沟通，帮助大家在成都本地找到热爱 Linux、 热爱技术的小伙伴们。

Linux 中国的老朋友，成都不周山文化发展有限公司 CEO 孙康先生为参会者分享了他自己从 Linux 从业者，到走上技术从业，再到如今创业的经历，并深刻的剖析了作为技术从业者想要创业需要关注的事情。

![](/data/attachment/album/202311/05/145554hvv155l5vt55g1gy.jpg)![](/data/attachment/album/202311/05/145601nl0wgnanefsl0hhl.jpg)

老王则通过远程的为现场参会的同学们带来了他的分享：《高效开源（个人篇）》，帮助参会的同学们了解开源、学习开源。

Bestony 为现场的同学们分享了自己的大模型的开发经验，帮助参会同学们理解大模型的原理、当下的开发者们如何使用和迭代自己对于大模型的使用，提升自己的能力。

![](/data/attachment/album/202311/05/145631mfs1btt16en6muw2.jpg)

### PPT及视频下载

LLUG 的创办希望帮助 Linux 社区当中的每一个人都可以充分的交流经验和心得，所以我们也将本次活动的视频以及演示文稿开放出来，供大家查看。视频托管在 Bilibili，PPT 文稿则托管在 Github 的 [Linux-CN/LLUG-Shares](https://github.com/Linux-CN/LLUG-Shares) 仓库中，供大家下载。

本次活动的 PPT 已经上传至 GitHub ，方便大家下载，视频也以上传至 Bilibili 和 Linux 中国视频号，方便大家收看。

|  |  |  |  |  |
| --- | --- | --- | --- | --- |
| 类型 | 活动主题 | 主讲人 | PPT | 在线视频 |
| 主题演讲 | 《从结识 Linux 到创业 — 我的 Linux 历程》 | 孙康 | [下载地址](https://github.com/Linux-CN/LLUG-Shares/blob/main/Chendu/2023.10-JingRongHui/%E4%BB%8E%E7%BB%93%E8%AF%86Linux%E5%88%B0%E5%88%9B%E4%B8%9A-%E6%88%91%E7%9A%84Linux%E5%8E%86%E7%A8%8B.pdf) | [Bilibili](https://www.bilibili.com/video/BV1RN4y1S7RG/) |
| 主题演讲 | 《高效开源（个人篇）》 | wxy | [下载地址](https://github.com/Linux-CN/LLUG-Shares/blob/main/Shanghai/2023.07-Qihoo/7.23%20wxy%20%E9%AB%98%E6%95%88%E5%BC%80%E6%BA%90%EF%BC%88%E4%B8%AA%E4%BA%BA%E7%AF%87%EF%BC%89.pdf) | [Bilibili](https://www.bilibili.com/video/BV1DF41117jb/?spm_id_from=333.999.0.0) |
| 主题演讲 | 《大模型应用开发经验分享》 | bestony | [下载地址](https://github.com/Linux-CN/LLUG-Shares/blob/main/Chendu/2023.10-JingRongHui/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB.pdf) | [Bilibili](https://www.bilibili.com/video/BV1pN411G7u8/) |

### 致谢

本次活动的举办，得到了中国开源年会提供的线下场地支持，让我们在成都可以线下畅聊，交接技术和经验。同时，也要感谢异步图书提供的图书支持，这些高质量的图书为参会者们提供了丰富的知识，为大家带来了新知输入。

感谢大家的支持，才能让本次活动成功举办！

### 11 月杭州见

11 月的 LLUG 即将来到杭州～如果你感兴趣做分享，或是有更多的建议给到我们，可以扫描下方二维码，申报议题或提交建议。

![](/data/attachment/album/202311/05/145754t757xzfps83e77pe.png)

*（题图：MJ/55a2abbd-d5cc-499d-8fa0-57c1797aaec1）*


硬核观察 #1176 Arm 收购了树莓派公司的少量股份，以免投向 RISC-V

Summary:
? Arm 收购了树莓派公司的少量股份，以免投向 RISC-V
? 解散 50 年后，披头士乐队发布了最后一首歌曲《Now And Then》
? Mozilla 敦促开发者着手开发安卓扩展程序
»
»

Safari的扩展跟垃圾一样

![](/data/attachment/album/202311/05/172546oc9k2s9t2le2eh99.jpg)

![](/data/attachment/album/202311/05/172600f68tb7tbu7uao82t.jpg)

### Arm 收购了树莓派公司的少量股份，以免投向 RISC-V

Arm CPU 已应用于所有树莓派单板计算机。双方的合作早在树莓派上市销售之前就开始了。最初的树莓派主板采用单核 Arm CPU，运行频率为 700 MHz。Arm 持有树莓派公司的少量股权代表了将来树莓派会继续使用 Arm CPU。随着 RISC-V CPU 的兴起，它在各种设备上出现，但在可预见的未来，我们将不会看到基于 RISC-V 的树莓派。

>
> **[消息来源：Tom's Hardware](https://www.tomshardware.com/raspberry-pi/arm-acquires-minority-stake-in-raspberry-pi)**
>
>
>

>
> 老王点评：会有使用 RISC-V 的、更便宜的开源单板计算机出现的。
>
>
>

![](/data/attachment/album/202311/05/172613zghshp9ygdhgoh1p.jpg)

### 解散 50 年后，披头士乐队发布了最后一首歌曲《Now And Then》

在披头士乐队解散五十年之后，它的四名成员合作发布了歌曲《Now And Then》。这首歌最初是以练习磁带的形式录制的。由于披头士乐队的两名成员约翰·列侬和乔治·哈里森已经先后去世，技术团队使用数字技术完成了新的版本。技术团队通过机器学习技术从模拟录音中分离出单个人或乐器的声音，生成了他们的声音和乐器声。两名在世的乐队成员，81 岁的保罗·麦卡特尼和 83 岁的林戈·斯塔尔分别录制了他们的新版本。这首歌在 YouTube 官方频道上 24 小时内的播放量已经超过 500 万次。

>
> **[消息来源：NBC](https://www.nbcnews.com/news/world/final-beatles-song-now-featuring-four-members-released-rcna123304)**
>
>
>

>
> 老王点评：或许，这可能不会是披头士乐队的最后一首歌，新的 AI 技术可能能为我们复活那些过世的艺术家。
>
>
>

![](/data/attachment/album/202311/05/172633itb18bztz0ti1ul8.jpg)

### Mozilla 敦促开发者着手开发安卓扩展程序

早在 2019 年，Mozilla 就一直在考虑提供安卓扩展，但人们对其安全性存在顾虑。但即使存在安全风险，浏览器的可扩展性也是开放网络的显著特征之一，与电视等被动显示技术不同，浏览器可以让用户主动参与内容的处理和展示。2021 年 1 月，Mozilla 为安卓上的 Firefox 上推出过一组有限的扩展。现在，Mozilla 最终计划在 Firefox 120 版本之后，在安卓平台上为 Firefox 提供浏览器扩展（也称附加组件），预计当 12 月开放可用性时，将拥有至少 200 多个新的 Firefox 安卓扩展。本周，Mozilla 敦促开发人员评估他们的扩展代码，它预计“用户将对探索定制 Firefox 安卓版的各种新方法产生浓厚兴趣”。除了 Firefox 之外，Yandex 手机浏览器于 2016 年在安卓平台上就增加了对扩展的支持，Kiwi 等其他基于安卓的浏览器也是如此。而苹果公司于 2021 年 9 月就在 iOS 15 中推出了对 Safari 扩展程序的支持。

>
> **[消息来源：The Register](https://www.theregister.com/2023/11/03/mozilla_android_extensions/)**
>
>
>

>
> 老王点评：虽然不够早，但是终究是维护开放网络的重要努力。但是 Chrome 呢？
>
>
>


JVM 解释和编译指南

Summary: 通过理解解释、即时编译和预先编译之间的区别，有效地使用它们。

好文

JDK17 jaot又移除了

通过理解解释、即时编译和预先编译之间的区别，有效地使用它们。

![](/data/attachment/album/202311/06/093552kheiob71meqierhd.png)

>
> 通过理解解释、即时编译和预先编译之间的区别，有效地使用它们。
>
>
>

Java 是一种跨平台的编程语言。程序源代码会被编译为 <ruby> 字节码 <rt>  bytecode </rt></ruby>，然后字节码在运行时被转换为 <ruby> 机器码 <rt>  machine code </rt></ruby>。<ruby> 解释器 <rt>  interpreter </rt></ruby> 在物理机器上模拟出的抽象计算机上执行字节码指令。<ruby> 即时 <rt>  just-in-time </rt></ruby>（JIT）编译发生在运行期，而 <ruby> 预先 <rt>  ahead-of-time </rt></ruby>（AOT）编译发生在构建期。

本文将说明解释器、JIT 和 AOT 分别何时起作用，以及如何在 JIT 和 AOT 之间权衡。

### 源代码、字节码、机器码

应用程序通常是由 C、C++ 或 Java 等编程语言编写。用这些高级编程语言编写的指令集合称为源代码。源代码是人类可读的。要在目标机器上执行它，需要将源代码转换为机器可读的机器码。这个转换工作通常是由 <ruby> 编译器 <rt>  compiler </rt></ruby> 来完成的。

然而，在 Java 中，源代码首先被转换为一种中间形式，称为字节码。字节码是平台无关的，所以 Java 被称为平台无关编程语言。Java 编译器 `javac` 将源代码转换为字节码。然后解释器解释执行字节码。

下面是一个简单的 Java 程序, `Hello.java`：

```
//Hello.java
public class Hello {
    public static void main(String[] args) {
         System.out.println("Inside Hello World!");
    }
}

```

使用 `javac` 编译它，生成包含字节码的 `Hello.class` 文件。

```
$ javac Hello.java
$ ls
Hello.class  Hello.java

```

现在，使用 `javap` 来反汇编 `Hello.class` 文件的内容。使用 `javap` 时如果不指定任何选项，它将打印基本信息，包括编译这个 `.class` 文件的源文件、包名称、公共和受保护字段以及类的方法。

```
$ javap Hello.class
Compiled from "Hello.java"
public class Hello {
    public Hello();
    public static void main(java.lang.String[]);
}

```

要查看 `.class` 文件中的字节码内容，使用 `-c` 选项：

```
$ javap -c Hello.class
Compiled from "Hello.java"
public class Hello {
  public Hello();
        Code:
           0: aload_0
           1: invokespecial #1                      // Method java/lang/Object."<init>":()V
           4: return

  public static void main(java.lang.String[]);
        Code:
           0: getstatic         #2                      // Field java/lang/System.out:Ljava/io/PrintStream;
           3: ldc               #3                      // String Inside Hello World!
           5: invokevirtual #4                      // Method
java/io/PrintStream.println:(Ljava/lang/String;)V
           8: return
}

```

要获取更详细的信息，使用 `-v` 选项：

```
$ javap -v Hello.class

```

### 解释器，JIT 和 AOT

解释器负责在物理机器上模拟出的抽象计算机上执行字节码指令。当使用 `javac` 编译源代码，然后使用 `java` 执行时，解释器在程序运行时运行并完成它的目标。

```
$ javac Hello.java
$ java Hello
Inside Hello World!

```

JIT 编译器也在运行期发挥作用。当解释器解释 Java 程序时，另一个称为运行时 <ruby> 分析器 <rt>  profiler </rt></ruby> 的组件将静默地监视程序的执行，统计各部分代码被解释的次数。基于这些统计信息可以检测出程序的 <ruby> 热点 <rt>  hotspot </rt></ruby>，即那些经常被解释的代码。一旦代码被解释次数超过设定的阈值，它们满足被 JIT 编译器直接转换为机器码的条件。所以 JIT 编译器也被称为分析优化的编译器。从字节码到机器码的转换是在程序运行过程中进行的，因此称为即时编译。JIT 减少了解释器将同一组指令模拟为机器码的负担。

AOT 编译器在构建期编译代码。在构建时将需要频繁解释和 JIT 编译的代码直接编译为机器码可以缩短 <ruby> Java 虚拟机 <rt>  Java Virtual Machine </rt></ruby>（JVM） 的<ruby> 预热 <rt>  warm-up </rt></ruby>时间。（LCTT 译注：Java 程序启动后首先字节码被解释执行，此时执行效率较低。等到程序运行了足够的时间后，代码热点被检测出来，JIT 开始发挥作用，程序运行效率提升。JIT 发挥作用之前的过程就是预热。）AOT 是在 Java 9 中引入的一个实验性特性。`jaotc` 使用 Graal 编译器（它本身也是用 Java 编写的）来实现 AOT 编译。

以 `Hello.java` 为例：

```
//Hello.java
public class Hello {
    public static void main(String[] args) {
        System.out.println("Inside Hello World!");
    }
}

$ javac Hello.java
$ jaotc --output libHello.so Hello.class
$ java -XX:+UnlockExperimentalVMOptions -XX:AOTLibrary=./libHello.so Hello
Inside Hello World!

```

### 解释和编译发生的时机

下面通过例子来展示 Java 在什么时候使用解释器，以及 JIT 和 AOT 何时参与进来。这里有一个简单的程序 `Demo.java` :

```
//Demo.java
public class Demo {
    public int square(int i) throws Exception {
        return(i*i);
    }

    public static void main(String[] args) throws Exception {
        for (int i = 1; i <= 10; i++) {
            System.out.println("call " + Integer.valueOf(i));
            long a = System.nanoTime();
            Int r = new Demo().square(i);
            System.out.println("Square(i) = " + r);
            long b = System.nanoTime();
            System.out.println("elapsed= " + (b-a));
            System.out.println("--------------------------------");
        }
    }
}

```

在这个程序的 `main()` 方法中创建了一个 `Demo` 对象的实例，并调用该实例的 `square()`方法，然后显示 `for` 循环迭代变量的平方值。编译并运行它：

```
$ javac Demo.java
$ java Demo
1 iteration
Square(i) = 1
Time taken= 8432439
--------------------------------
2 iteration
Square(i) = 4
Time taken= 54631
--------------------------------
.
.
.
--------------------------------
10 iteration
Square(i) = 100
Time taken= 66498
--------------------------------

```

上面的结果是由谁产生的呢？是解释器，JIT 还是 AOT？在目前的情况下，它完全是通过解释产生的。我是怎么得出这个结论的呢？只有代码被解释的次数必须超过某个阈值时，这些热点代码片段才会被加入 JIT 编译队列。只有这时，JIT 编译才会发挥作用。使用以下命令查看 JDK 11 中的该阈值：

```
$ java -XX:+PrintFlagsFinal -version | grep CompileThreshold
 intx CompileThreshold     = 10000                                      {pd product} {default}
[...]
openjdk version "11.0.13" 2021-10-19
OpenJDK Runtime Environment 18.9 (build 11.0.13+8)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8, mixed mode, sharing)

```

上面的输出表明，一段代码被解释 10,000 次才符合 JIT 编译的条件。这个阈值是否可以手动调整呢？是否有 JVM 标志可以指示出方法是否被 JIT 编译了呢？答案是肯定的，而且有多种方式可以达到这个目的。

使用 `-XX:+PrintCompilation` 选项可以查看一个方法是否被 JIT 编译。除此之外，使用 `-Xbatch` 标志可以提高输出的可读性。如果解释和 JIT 同时发生，`-Xbatch` 可以帮助区分两者的输出。使用这些标志如下：

```
$ java -Xbatch  -XX:+PrintCompilation  Demo
         34        1        b  3           java.util.concurrent.ConcurrentHashMap::tabAt (22 bytes)
         35        2         n 0           jdk.internal.misc.Unsafe::getObjectVolatile (native)
         35        3        b  3           java.lang.Object::<init> (1 bytes)
[...]
        210  269         n 0           java.lang.reflect.Array::newArray (native)   (static)
        211  270        b  3           java.lang.String::substring (58 bytes)
[...]
--------------------------------
10 iteration
Square(i) = 100
Time taken= 50150
--------------------------------

```

注意，上面命令的实际输出太长了，这里我只是截取了一部分。输出很长的原因是除了 `Demo` 程序的代码外，JDK 内部类的函数也被编译了。由于我的重点是 `Demo.java` 代码，我希望排除内部包的函数来简化输出。通过选项 `-XX:CompileCommandFile` 可以禁用内部类的 JIT：

```
$ java -Xbatch -XX:+PrintCompilation -XX:CompileCommandFile=hotspot_compiler Demo

```

在选项 `-XX:CompileCommandFile` 指定的文件 `hotspot_compiler` 中包含了要排除的包：

```
$ cat hotspot_compiler
quiet
exclude java/* *
exclude jdk/* *
exclude sun/* *

```

第一行的 `quiet` 告诉 JVM 不要输出任何关于被排除类的内容。用 `-XX:CompileThreshold` 将 JIT 阈值设置为 5。这意味着在解释 5 次之后，就会进行 JIT 编译：

```
$ java -Xbatch -XX:+PrintCompilation -XX:CompileCommandFile=hotspot_compiler \
-XX:CompileThreshold=5 Demo
        47      1       n 0     java.lang.invoke.MethodHandle::linkToStatic(LLLLLL)L (native)
           (static)
        47      2       n 0     java.lang.invoke.MethodHandle::invokeBasic(LLLLL)L (native)
        47      3       n 0     java.lang.invoke.MethodHandle::linkToSpecial(LLLLLLL)L (native)
           (static)
        48      4       n 0     java.lang.invoke.MethodHandle::linkToStatic(L)I (native)   (static)
        48      5       n 0     java.lang.invoke.MethodHandle::invokeBasic()I (native)
        48      6       n 0     java.lang.invoke.MethodHandle::linkToSpecial(LL)I (native)
           (static)
[...]
        1 iteration
        69   40         n 0     java.lang.invoke.MethodHandle::linkToStatic(ILIIL)I (native)
           (static)
[...]
Square(i) = 1
        78   48         n 0     java.lang.invoke.MethodHandle::linkToStatic(ILIJL)I (native)
(static)
        79   49         n 0     java.lang.invoke.MethodHandle::invokeBasic(ILIJ)I (native)
[...]
        86   54         n 0     java.lang.invoke.MethodHandle::invokeBasic(J)L (native)
        87   55         n 0     java.lang.invoke.MethodHandle::linkToSpecial(LJL)L (native)
(static)
Time taken= 8962738
--------------------------------
2 iteration
Square(i) = 4
Time taken= 26759
--------------------------------

10 iteration
Square(i) = 100
Time taken= 26492
--------------------------------

```

好像输出结果跟只用解释时并没有什么区别。根据 Oracle 的文档，这是因为只有禁用 `TieredCompilation` 时 `-XX:CompileThreshold` 才会生效：

```
$ java -Xbatch -XX:+PrintCompilation -XX:CompileCommandFile=hotspot_compiler \
-XX:-TieredCompilation -XX:CompileThreshold=5 Demo
124     1       n       java.lang.invoke.MethodHandle::linkToStatic(LLLLLL)L (native)   (static)
127     2       n       java.lang.invoke.MethodHandle::invokeBasic(LLLLL)L (native)
[...]
1 iteration
        187   40        n       java.lang.invoke.MethodHandle::linkToStatic(ILIIL)I (native)   (static)
[...]
(native)   (static)
        212   54        n       java.lang.invoke.MethodHandle::invokeBasic(J)L (native)
        212   55        n       java.lang.invoke.MethodHandle::linkToSpecial(LJL)L (native)   (static)
Time taken= 12337415
[...]
--------------------------------
4 iteration
Square(i) = 16
Time taken= 37183
--------------------------------
5 iteration
        214   56        b       Demo::<init> (5 bytes)
        215   57        b       Demo::square (16 bytes)
Square(i) = 25
Time taken= 983002
--------------------------------
6 iteration
Square(i) = 36
Time taken= 81589
[...]
10 iteration
Square(i) = 100
Time taken= 52393

```

可以看到在第五次迭代之后，代码片段被 JIT 编译了：

```
--------------------------------
5 iteration
        214   56        b       Demo::<init> (5 bytes)
        215   57        b       Demo::square (16 bytes)
Square(i) = 25
Time taken= 983002
--------------------------------

```

可以看到，与 `square()` 方法一起，构造方法也被 JIT 编译了。在 `for` 循环中调用 `square()` 之前要先构造 `Demo` 实例，所以构造方法的解释次数同样达到 JIT 编译阈值。这个例子说明了在解释发生之后何时 JIT 会介入。

要查看编译后的代码，需要使用 `-XX:+PrintAssembly` 标志，该标志仅在库路径中有反汇编器时才起作用。对于 OpenJDK，使用 `hsdis` 作为反汇编器。下载合适版本的反汇编程序库，在本例中是 `hsdis-amd64.so`，并将其放在 `Java_HOME/lib/server` 目录下。使用时还需要在 `-XX:+PrintAssembly` 之前增加 `-XX:+UnlockDiagnosticVMOptions` 选项。否则，JVM 会给你一个警告。

完整命令如下：

```
$ java -Xbatch -XX:+PrintCompilation -XX:CompileCommandFile=hotspot_compiler \ -XX:-TieredCompilation -XX:CompileThreshold=5 -XX:+UnlockDiagnosticVMOptions \ -XX:+PrintAssembly Demo
[...]
5 iteration
        178   56        b       Demo::<init> (5 bytes)
Compiled method (c2)    178   56                Demo::<init> (5 bytes)
 total in heap  [0x00007fd4d08dad10,0x00007fd4d08dafe0] = 720
 relocation     [0x00007fd4d08dae88,0x00007fd4d08daea0] = 24
[...]
 handler table  [0x00007fd4d08dafc8,0x00007fd4d08dafe0] = 24
[...]
 dependencies   [0x00007fd4d08db3c0,0x00007fd4d08db3c8] = 8
 handler table  [0x00007fd4d08db3c8,0x00007fd4d08db3f8] = 48
----------------------------------------------------------------------
Demo.square(I)I  [0x00007fd4d08db1c0, 0x00007fd4d08db2b8]  248 bytes
[Entry Point]
[Constants]
  # {method} {0x00007fd4b841f4b0} 'square' '(I)I' in 'Demo'
  # this:       rsi:rsi   = 'Demo'
  # parm0:      rdx     = int
  #             [sp+0x20]  (sp of caller)
[...]
[Stub Code]
  0x00007fd4d08db280: movabs $0x0,%rbx          ;   {no_reloc}
  0x00007fd4d08db28a: jmpq   0x00007fd4d08db28a  ;   {runtime_call}
  0x00007fd4d08db28f: movabs $0x0,%rbx          ;   {static_stub}
  0x00007fd4d08db299: jmpq   0x00007fd4d08db299  ;   {runtime_call}
[Exception Handler]
  0x00007fd4d08db29e: jmpq   0x00007fd4d08bb880  ;   {runtime_call ExceptionBlob}
[Deopt Handler Code]
  0x00007fd4d08db2a3: callq  0x00007fd4d08db2a8
  0x00007fd4d08db2a8: subq   $0x5,(%rsp)
  0x00007fd4d08db2ad: jmpq   0x00007fd4d08a01a0  ;   {runtime_call DeoptimizationBlob}
  0x00007fd4d08db2b2: hlt
  0x00007fd4d08db2b3: hlt
  0x00007fd4d08db2b4: hlt
  0x00007fd4d08db2b5: hlt
  0x00007fd4d08db2b6: hlt
  0x00007fd4d08db2b7: hlt
ImmutableOopMap{rbp=NarrowOop }pc offsets: 96
ImmutableOopMap{}pc offsets: 112
ImmutableOopMap{rbp=Oop }pc offsets: 148 Square(i) = 25
Time taken= 2567698
--------------------------------
6 iteration
Square(i) = 36
Time taken= 76752
[...]
--------------------------------
10 iteration
Square(i) = 100
Time taken= 52888

```

我只截取了输出中与 `Demo.java` 相关的部分。

现在再来看看 AOT 编译。它是在 JDK9 中引入的特性。AOT 是用于生成 `.so` 这样的库文件的静态编译器。用 AOT 可以将指定的类编译成 `.so` 库。这个库可以直接执行，而不用解释或 JIT 编译。如果 JVM 没有检测到 AOT 编译的代码，它会进行常规的解释和 JIT 编译。

使用 AOT 编译的命令如下：

```
$ jaotc --output=libDemo.so Demo.class

```

用下面的命令来查看共享库的符号表：

```
$ nm libDemo.so

```

要使用生成的 `.so` 库，使用 `-XX:+UnlockExperimentalVMOptions` 和 `-XX:AOTLibrary`：

```
$ java -XX:+UnlockExperimentalVMOptions -XX:AOTLibrary=./libDemo.so Demo
1 iteration
Square(i) = 1
Time taken= 7831139
--------------------------------
2 iteration
Square(i) = 4
Time taken= 36619
[...]
10 iteration
Square(i) = 100
Time taken= 42085

```

从输出上看，跟完全用解释的情况没有区别。为了确认 AOT 发挥了作用，使用 `-XX:+PrintAOT`：

```
$ java -XX:+UnlockExperimentalVMOptions -XX:AOTLibrary=./libDemo.so -XX:+PrintAOT Demo
         28        1         loaded        ./libDemo.so  aot library
         80        1         aot[ 1]   Demo.main([Ljava/lang/String;)V
         80        2         aot[ 1]   Demo.square(I)I
         80        3         aot[ 1]   Demo.<init>()V
1 iteration
Square(i) = 1
Time taken= 7252921
--------------------------------
2 iteration
Square(i) = 4
Time taken= 57443
[...]
10 iteration
Square(i) = 100
Time taken= 53586

```

要确认没有发生 JIT 编译，用如下命令：

```
$ java -XX:+UnlockExperimentalVMOptions -Xbatch -XX:+PrintCompilation \ -XX:CompileCommandFile=hotspot_compiler -XX:-TieredCompilation \ -XX:CompileThreshold=3 -XX:AOTLibrary=./libDemo.so -XX:+PrintAOT Demo
         19        1         loaded        ./libDemo.so  aot library
         77        1         aot[ 1]   Demo.square(I)I
         77        2         aot[ 1]   Demo.main([Ljava/lang/String;)V
         77        3         aot[ 1]   Demo.<init>()V
         77        2         aot[ 1]   Demo.main([Ljava/lang/String;)V   made not entrant
[...]
4 iteration
Square(i) = 16
Time taken= 43366
[...]
10 iteration
Square(i) = 100
Time taken= 59554

```

需要特别注意的是，修改被 AOT 编译了的源代码后，一定要重新生成 `.so` 库文件。否则，过时的的 AOT 编译库文件不会起作用。例如，修改 `square()` 方法，使其计算立方值：

```
//Demo.java
public class Demo {

    public int square(int i) throws Exception {
        return(i*i*i);
    }

    public static void main(String[] args) throws Exception {
        for (int i = 1; i <= 10; i++) {
          System.out.println("" + Integer.valueOf(i)+" iteration");
          long start = System.nanoTime();
          int r= new Demo().square(i);
          System.out.println("Square(i) = " + r);
          long end = System.nanoTime();
          System.out.println("Time taken= " + (end-start));
          System.out.println("--------------------------------");
        }
    }
}

```

重新编译 `Demo.java`：

```
$ java Demo.java

```

但不重新生成 `libDemo.so`。使用下面命令运行 `Demo`：

```
$ java -XX:+UnlockExperimentalVMOptions -Xbatch -XX:+PrintCompilation -XX:CompileCommandFile=hotspot_compiler -XX:-TieredCompilation -XX:CompileThreshold=3 -XX:AOTLibrary=./libDemo.so -XX:+PrintAOT Demo
         20        1         loaded        ./libDemo.so  aot library
         74        1         n           java.lang.invoke.MethodHandle::linkToStatic(LLLLLL)L (native)   (static)
2 iteration
sqrt(i) = 8
Time taken= 43838
--------------------------------
3 iteration
        137   56        b            Demo::<init> (5 bytes)
        138   57        b            Demo::square (6 bytes)
sqrt(i) = 27
Time taken= 534649
--------------------------------
4 iteration
sqrt(i) = 64
Time taken= 51916
[...]
10 iteration
sqrt(i) = 1000
Time taken= 47132

```

可以看到，虽然旧版本的 `libDemo.so` 被加载了，但 JVM 检测出它已经过时了。每次生成 `.class` 文件时，都会在类文件中添加一个指纹，并在 AOT 库中保存该指纹。修改源代码后类指纹与旧的 AOT 库中的指纹不匹配了，所以没有执行 AOT 编译生成的原生机器码。从输出可以看出，现在实际上是 JIT 在起作用（注意 `-XX:CompileThreshold` 被设置为了 3）。

### AOT 和 JIT 之间的权衡

如果你的目标是减少 JVM 的预热时间，请使用 AOT，这可以减少运行时负担。问题是 AOT 没有足够的数据来决定哪段代码需要预编译为原生代码。相比之下，JIT 在运行时起作用，却对预热时间有一定的影响。然而，它将有足够的分析数据来更高效地编译和反编译代码。

*（题图：MJ/ed3e6e15-56c7-4c1d-aff1-84a225faeeeb）*

---

via: <https://opensource.com/article/22/8/interpret-compile-java>

作者：[Jayashree Huttanagoudar](https://opensource.com/users/jayashree-huttanagoudar) 选题：[lkxed](https://github.com/lkxed) 译者：[toknow-gh](https://github.com/toknow-gh) 校对：[wxy](https://github.com/wxy)

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


在 Linux 终端利用 Asciiquarium 打造海底世界

Summary: 这是一个小小的 CLI 工具，可在 Linux 终端中添加水族箱。

这是一个小小的 CLI 工具，可在 Linux 终端中添加水族箱。

![](/data/attachment/album/202311/06/104101r2sfkrf27ozfqffq.png)

>
> 这是一个小小的 CLI 工具，可在 Linux 终端中添加水族箱。
>
>
>

[Linux 的众多命令工具](https://itsfoss.com/funny-linux-commands/) 里，有一部分偏向于休闲娱乐而非工作。Asciiquarium 就是一个很好的例子。

Asciiquarium 为 Linux 终端提供了以 ASCII 格式构建的简单的水族馆动画效果。

![](/data/attachment/album/202311/06/104209lct0ic84lfi7l7r4.png)

看起来有趣吗？我们一起进一步了解。

### 如何在 Linux 中安装 Asciiquarium

如果你是 Arch Linux 或 Fedora 用户，你可以直接从官方仓库中安装。

Fedora 的用户请运行：

```
sudo dnf install asciiquarium

```

而 Arch Linux 用户请运行：

```
sudo pacman -S asciiquarium

```

对于 Ubuntu，Asciiquarium 没有包含在默认仓库里。因此，你需要选择使用预编译的二进制文件，或者一些外部的 PPA。

#### 使用 PPA 安装 Asciiquarium

首先，添加 Asciiquarium 的 PPA：

```
sudo add-apt-repository ppa:ytvwld/asciiquarium
sudo apt update

```

然后，安装相关的软件包和依赖：

```
sudo apt install asciiquarium

```

##### 删除 PPA

在你删除 Asciiquarium 的 PPA 之前，首先要移除相关软件包。

```
sudo apt purge asciiquarium
sudo apt autoremove

```

然后，从系统中移除 PPA：

```
sudo add-apt-repository --remove ppa:openshot.developers/ppa
sudo apt update

```

#### 使用二进制文件安装 Asciiquarium

>
> ? 你需要为你的系统单独安装一些 Perl 模块。同时，它将在你的系统中安装几个与 Perl 相关的包，所以请注意。
>
>
>

![安装 Perl 依赖包](/data/attachment/album/202311/06/104210urm8m4r85mmz2pu8.png)

要运行二进制文件，你需要从 CPAN 中安装 Animation 和 Curses 模块。

在 Ubuntu 中安装 CPAN：

```
sudo apt install cpanminus libcurses-perl

```

接着，运行：

```
cpan Term::Animation

```

![Animation 模块安装](/data/attachment/album/202311/06/104210xms8zujqjsj21q19.png)

该操作会要求你做一些配置，只需选取默认值即可。全部设置好后，来下载 Asciiquarium 的发布版。

>
> **[下载 Asciiquarium](https://robobunny.com/projects/asciiquarium/html/)**
>
>
>

解压文件，你会得到一个名为 Asciiquarium 的文件，接下来，让它具有执行权限。

![赋予 Asciiquarium 执行权限](/data/attachment/album/202311/06/104211d5tfhcuyc9x36lzc.png)

如果你需要通过命令行来完成，只需打开终端，并用 [chmod 命令](https://linuxhandbook.com/chmod-command/)赋予执行权限。

```
chmod +x asciiquarium

```

此时，你可以直接在当前目录下运行这个文件以获取动画效果：

```
./asciiquarium

```

或者，你也可以把这个文件放在一个 [包含在你的 PATH 中](https://itsfoss.com/add-directory-to-path-linux/)的位置上。

### 如何使用 Asciiquarium

Asciiquarium 使用起来非常简单，它不设任何命令行选项。只需运行 `asciiquarium`，你就能在终端中看到水族馆的动画效果。

![Asciiquarium 动画效果](/data/attachment/album/202311/06/104209lct0ic84lfi7l7r4.png)

程序还提供了几个热键支持。

* `r`：重绘动画
* `p`：暂停/播放动画
* `q`：退出程序

>
> ?
>
>
>

此外，也可以使用箭头键提升动画的速度。

#### 用 lolcat 加强 Asciiquarium 的体验

如果你想让 Asciiquarium 的颜色更丰富，可以综合使用 `lolcat`。首先安装 `lolcat` ：

```
sudo apt install lolcat

```

然后，运行：

```
asciiquarium | lolcat

```

![Asciiquarium Lolcat 效果](/data/attachment/album/202311/06/104211f4oyakg2ozpzy2lo.png)

如果你还需要更多的动画效果，可以适当调节 `lolcat` 的参数，例如：

```
asciiquarium | lolcat -p 200

```

![Asciiquarium 和 lolcat 的效果调整](/data/attachment/album/202311/06/104211cvwddww8810aatd0.gif)

这样操作会产生各种不同的颜色效果。

你还可以使用 `lolcat` 的 `-i` 选项，来反转颜色：

```
asciiquarium | lolcat -i -p 200

```

![颜色反转效果](/data/attachment/album/202311/06/104212ph7f0zdmdhdagamf.png)

### 赠品：XFishTank（让你的桌面诠释海底世界）

还有一个类似的有趣命令叫做 `xfishtank`。它在你的根窗口，即桌面，创建一片海洋世界。你可以从 Ubuntu 的官方仓库直接安装 `xfishtank`。

```
sudo apt install xfishtank

```

安装完成后，直接运行：

```
xfishtank

```

XFishTank 提供了很多选项供你调节，例如鱼儿的数量、气泡等等。你可以参考 [该命令的 man 页面](https://itsfoss.com/linux-man-page-guide/) 学习更多相关内容。

```
xfishtank -b 100 -f 15

```

![Xfishtank 效果展示](/data/attachment/album/202311/06/104212p24iu99ygkzfkzy9.png)

### 结语

就像你所看到的，Linux 终端里的小鱼或许不能提供实质性的帮助，但它确实能带给我们愉快的心情。

如果你不是那么喜欢鱼，那么试试看牛吧。

>
> **[哞~ 我的 Linux 终端里有头牛](/article-15952-1.html)**
>
>
>

希望你在这些有趣的小工具的陪伴下，能够更加享受 Linux 的世界。?

*（题图：MJ/83766cba-02e1-4d20-8797-a38e5c17a0c0）*

---

via: <https://itsfoss.com/asciiquarium/>

作者：[Sreenath](https://itsfoss.com/author/sreenath/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #1177 大多数使用 jQuery 的网站都运行着不再维护的版本

Summary:
? 大多数使用 jQuery 的网站都运行着不再维护的版本
? Linux 6.7 内核引入一键加固选项
? 埃隆·马斯克的 xAI 推出 Grok 人工智能机器人
»
»

![](/data/attachment/album/202311/06/164243eza6oviss15saavi.jpg)

![](/data/attachment/album/202311/06/164316gi0iyyynf53xzlhn.png)

### 大多数使用 jQuery 的网站都运行着不再维护的版本

据估计，全球近 90% 的网站都在使用 jQuery。OpenJS 基金会发起的一项调查显示，大多数使用 jQuery 的网站都运行着不再维护的版本。对北美和欧洲 500 家企业进行的调查显示，44% 的企业使用正在维护的 3.6.0 或更新版本，而 59% 的企业使用的 1.x - 3.5.1 版本，已经不再维护，许多组织使用了多个版本。旧版本的 jQuery 的漏洞大部分属于常见的跨站脚本漏洞。OpenJS 基金会称四分之三的十亿级网站存在隐私和安全风险，但及时更新 jQuery 并不总是一件简单的事。

>
> **[消息来源：Dev Class](https://devclass.com/2023/11/02/jquery-survey-shows-majority-using-unmaintained-versions-but-upgrading-might-not-be-easy/)**
>
>
>

>
> 老王点评：每一个大版本升级都可能带来颠覆性的改动，这让使用者畏惧更新。
>
>
>

![](/data/attachment/album/202311/06/164332eslgogo2gwns4l8h.png)

### Linux 6.7 内核引入一键加固选项

之前，我们 [报道](/article-16197-1.html) 过，GCC 准备在明年初发布的 GCC 14.1 稳定版中引入一“键”安全加固选项，该选项将启用各种加固功能。现在，Linux 内核也提供了类似实践。作为本周合并的 Linux 6.7 内核加固更新的一部分，它带来了一个新的加固配置文件，以帮助构建一个具有一些合理默认值的安全加固内核。通过运行 `make hardening.config` 可以启用一些基本加固选项，这是 “一套基本的内核加固选项，对性能影响最小（或没有影响），并能移除一套合理的遗留 API”。大多数 Linux 发行版厂商的内核已经启用了大部分或全部这些选项。

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/Linux-6.7-Hardening)**
>
>
>

>
> 老王点评：这为构建默认安全的 Linux 内核提供了一个很好的参考实践。
>
>
>

###

### 埃隆·马斯克的 xAI 推出 Grok 人工智能机器人

马斯克称，该聊天机器人将作为 X 付费计划的一部分提供，每月需花费 16 美元。xAI 称，Grok 应该能回答其他人工智能可能会回避的 “尖锐问题”，此外，Grok 还可以访问 X 的数据，这是它和其它人工智能聊天机器人的主要不同之一。xAI 称，在基于中学数学问题和 Python 编码任务的首轮测试中，Grok 超越了 “计算类中的所有其他模型，包括 ChatGPT-3.5 和 Inflection-1”。

>
> **[消息来源：CNBC](https://www.cnbc.com/2023/11/05/elon-musk-debuts-grok-ai-bot-to-rival-chatgpt-others-.html)**
>
>
>

>
> 老王点评：马斯克在 X 和 AI 这样的互联网科技方面的表现，看起来并不如它在汽车和航天方面那么出色。
>
>
>


红帽的付费墙让开源社区产生裂痕

Summary: “我从未想过会有一天看到红帽对我们封闭源代码。”一位技术评论家说。

RHEL已经不再符合自由软件的定义：“自由之一：有研究该软件如何运作的自由，并且得以修改该软件来符合使用者自身的需求。取得该软件的源码为达成此目的的前提。”<br />
不过我不确定OSI有没有规定Red Hat的这种行为是否不再满足“开源软件”的定义。

红帽的做法是可以取得源代码，但是要给钱，还与哪些完全不开放代码的公司不同。而这条定义和GPL协议里只是要求要开放源代码，但没说清楚是不是无偿开放。相当于钻了协议的漏洞。

社区这个词在英语里和某个词简直太像了，而这两个东西都是资本要极力抹杀的东西。先融入你，然后消灭你。在他们的宣传里，开源已经过时了，企业对你的压榨才是未来，就像那什么运动已被历史证明是错误的。

“我从未想过会有一天看到红帽对我们封闭源代码。”一位技术评论家说。

![](/data/attachment/album/202311/07/165729zn0oholszjn0ld4n.png)

>
> “我从未想过会有一天看到红帽对我们封闭源代码。”一位技术评论家说。
>
>
>

2023 年 6 月 21 日，红帽公司的副总裁 Mike McGrath 宣布了一个引发开源软件社区分裂的声明。

在一篇题为《[推进 CentOS Stream 进化](https://mp.weixin.qq.com/s?__biz=MzA3NjAyNDMyMg==&mid=2649849069&idx=1&sn=b73b4d4bd9541591f59735ca808193af&chksm=87624380b015ca96e086fbd83cd4debf21af148d28f9930ccf58e7b842e2346c720fc72ab31c&scene=21#wechat_redirect)》的 318 个单词的博客文章中，McGrath 宣布，全球最大的开源软件供应商、总部位于美国罗利的红帽公司将开始只向付费用户提供其旗舰产品——红帽企业级 Linux（RHEL）的源代码。

在大多数行业中，这样的决定并不会引起争议。一般来说，只有付费的客户才有权使用一项产品或服务。但在开源的环境中，自由获取信息是至关重要的，因此，许多人认为，红帽公司对红帽企业 Linux（RHEL）实施付费墙的决定是对开源的亵渎。

新政策的发布在网络上引发了轩然大波。McGrath 后来对《<ruby> 新闻与观察家 <rt>  The News & Observer </rt></ruby>》栏目说：“发布这篇博客文章一两个小时之后，他们就都知道了。”

最初的反应是惊讶和愤怒混合在一起。“RHEL 的付费墙可能威胁到红帽公司的长期发展，”一条推特这样写到。

一个观看次数高达 10 万次的 YouTube 视频中，科技评论员 Chris Titus 疑惑，这是否预示着开源运动发生了巨变，在过去的 40 年中，开源已从由草根爱好者推动的亚文化转变为由企业大力支持的重要运动。

他说：“我从未想过会有一天看到红帽对我们封闭源代码。”

如今，基本上每个人都会以某种方式接触到开源软件。它为无数的日常工作提供了便利：预订机票、申请共享乘车服务、访问医疗保健门户网站、使用智能电视等等。而且，开源软件已经广泛渗透到大型企业中，红帽宣称，超过 90% 的财富 500 强企业都在使用他们的服务。

开源软件的关键在于信息的自由交流。由众多的付费和志愿程序员构成的社区持续强化着开源，他们反对把代码局限在专有权后面。他们坚信，只有更多的人关注代码，软件的性能和安全性才会得到提高。

因此，对于红帽公司的举动引发了人们强烈的反弹，这并不令人意外。

“我只知道红帽公司是唯一一家实行付费墙的（公司），”曾在 2017 年出版的书籍《<ruby> 为了乐趣和利润 <rt>  For Fun and Profit </rt></ruby>》中详述开源软件兴起的 Chris Tozzi 说，“这对开源社区来说是一个分歧问题。对我来说，这正是整个故事的关键。社区已经不能就开源如何运作达成共识。”

Tozzi 指出，开源许可证的变化有可能使公众使用软件的方式复杂化，人们也开始担忧会有更多的公司效仿红帽。如果此种状况成为趋势，参与贡献代码的开发者数量将会减少，而公司可能会开始感受到为其代码收费的压力。

McGrath 承认，红帽的员工也对新政策感到矛盾。“我想即使是我们公司内部的同事都未能完全理解我们到底宣布了什么和原因，”他说。

他回忆说，一些反感是针对个人的：有些人指控他是红帽母公司 IBM 派来的人，目的是摧毁这家位于三角洲地区，在当地有着 2000 多名员工、已有 30 年历史的软件公司。

“无论在决策之前、期间还是之后，IBM 的任何人都没跟我讨论过这个问题，”在红帽工作了 16 年的 McGrath 说，“我总是被那些认为 IBM 的高管会开会讨论 CentOS 和重新构建者的人们逗笑。我认为他们可能并不真正了解 CentOS。”

在发布博客文章的五天之后，McGrath 在该公司网站上发布了 [更长篇的信息](https://mp.weixin.qq.com/s/RELpVQ541cQgU7wkyhVjEQ)。他并没有退缩，反而重申了红帽停止向非付费客户提供自由获取 RHEL 代码的决定。

他写道，问题在于有一些新兴的竞争者会完全复制红帽企业版 Linux，甚至连代码中的错误都不放过，然后免费把这些红帽的复制品提供给客户。他认为，这并不是社区成员在增加价值，而是釜底抽薪的竞争对手。今年，红帽公司裁员了总工作人员的 4%，McGrath 表示，该公司没有理由允许这种情况继续下去。

“我认为，虽然在社区与商业之间做出这个决定是困难的，但我们始终坚持自己选择的道路是对的，”他告诉《新闻与观察家》。

然而，不是所有人都同意他的看法。

### “自由”应理解为言论自由，而非免费啤酒的“免费”

红帽争议背后的关键，被认为是理解开源如何开始，以及具体含义。

“这要追溯到几十年前，”Tozzi 表示，“深植于人心的一种观念便是，掌握控制权是至关重要的。而红帽公司剥夺了一定程度的控制权。”

1984 年，研究员理查德·斯托尔曼发布了名为 GNU 的软件项目。他为 GNU 提供了自由的许可，唯一的条件就是用户需要签署被称为 “GNU 通用公共许可证” 的协议，这其中包含了四条基本原则。现在被称为 GPL 的这份协议重申了人们享有使用、更改、分享，甚至重新打包并销售软件的权利。

对斯托尔曼而言，自由意味着没有任何限制，但并不必然代表不收费。“自由，犹如言论的自由，而非免费的啤酒，”他曾经这样形象地描述过。

GNU 与那时世界上最大的软件操作系统 —— 微软的 Windows，在理念上形成鲜明对比。Windows 是封闭且专有的，1985 年，微软首个 Windows 操作系统以 99 美元的价格上市。

然而当时，GNU 存在一个明显的局限，它缺少了被称为“内核”的软件部分，这是操作系统的关键部件。直到 1991 年，芬兰学生林纳斯·托瓦兹创造了一个名为 Linux 的 PC 操作系统内核。受斯托尔曼的启发，托瓦兹授权任何人对 Linux 进行商业性重新打包，只要他们同意 GPL。

“Linux 是在最佳时机推出的最佳产品，”Michael Tiemann 说，他是 1989 年参与创立世界上第一家商业开源公司 —— Cygnus Solutions 的软件工程师，而该公司后来被红帽收购。

### 红帽接管（开源）世界

Linux 的关键优势之一，如 Tiemann 所言，是它的代码是可见的。如果将 Linux 比作一辆汽车并存在故障，车主并不需要依赖特定的制造商来修复它。反之，一个由成千上万的“修理工”所组成的贡献者社区，就可以进行维修，所有人都可以进行检查。

红帽在这种免费的软件中看到了商业机会。该公司于 1993 年由联合创始人 <ruby> 马克·尤因 <rt>  Marc Ewing </rt></ruby> 在位于达勒姆的公寓内创办。公司在最初几年推出了定制版本的 Linux 操作系统光盘，并在书店向计算机科学爱好者销售。

到了 90 年代末，红帽已在企业界取得一席之地。2001 年，红帽发布了第一个面向企业的红帽企业版 Linux（RHEL）。该公司开始销售 RHEL 订阅访问，而非 CD，用于提供咨询和安全服务。

红帽公司不断发展壮大——无论是在业界还是在这个三角洲地区。2013 年，公司将超过 700 名员工转移到了位于罗利市中心新的总部大楼。六年后，IBM 以 340 亿美金的价格收购了这家软件公司。

Tozzi 表示：“就大多数评价指标来看，红帽是历史上最成功的开源公司。在财务成功和在开源社区领导地位方面，我无法想出哪一个公司能与其相匹敌。”

红帽不再是一家弱小的公司，而是随着许多大企业的加入而持续发展。自从被 IBM 收购以来，除了一个财务季度外，公司的收入每个财务季度都实现了两位数的增长。在 2022 年对近 1300 名技术领导者进行的调查显示，有更多的受访者表示他们使用的是开源软件而非专有软件。

McGrath 说：“我认为，那种业余爱好者在业余时间开发开源软件的浪漫景象已经过去了。尽管这样的空间仍然存在——我们依然有这样的场景——但是大部分的开源软件现在都是由全职员工开发的。”

### 截流下游克隆

Linux 内核是由成千上万人共同打造的操作系统之一。其中一些人是业余时间贡献代码的无薪爱好者，其他人则直接受雇于谷歌、Meta、红帽乃至微软等大型科技公司，在工作中编写代码并将其“上游”至 Linux 内核。

红帽公司制作企业版 Linux（RHEL），主要是对来自上游源（包括 Linux 内核和红帽所拥有的 Fedora 项目）的这些免费代码进行重新打包。类似地，直到最近，下游发行版都能直接获取 RHEL 的代码，并通过被称为“复刻”的过程自行重新打包。同时，它们也能将代码贡献给上游的 RHEL。

然而今年，红帽认为下游发行版回馈上游的代码不多，使其无法忽视它们的抄袭行为。

Tiemann 表示：“在许多情况下，开源中的自由使用更多是特性而非缺点。”他在红帽公司待了二十多年后于去年离开。“在这特定例子中，红帽基本上是说，‘你知道吗？这已不再是特性了。’”

这并非红帽第一次朝这个方向发展，早在 2020 年底，公司就宣布将终止 CentOS Linux，它曾经一直是红帽企业版 Linux 认可的免费版本。为弥补这一空缺，下一年就涌现出两个知名的下游 RHEL 发行版，Rocky Linux 和 AlmaLinux，它们都宣称自己与 RHEL 是连错误都一样的复制品。AlmaLinux 的基础设施团队负责人 Jonathan Wright 说：“实际上，就各种方面而言它们几乎完全相同。”

他继续说：“我们把红帽的名字剔除，然后重新打包发布。基本上是，保证不会侵犯他们的商标。”

尽管他的非营利组织的目标是克隆，Wright 仍然认为红帽限制 RHEL 代码的行动违反了“GPL 精神”。

他认为，像 AlmaLinux 这样无费用的下游副本吸引了更大规模、更多元化的贡献者加入开源社区，而这个社区自称是靠 “人多力量大” 而发展壮大的。

Wright 说：“（开源的）的基础是让每个人都能消费和使用你的作品。无论他是在世界另一端几乎无法上网的人，还是身处美国的世界 500 强公司。我认为这就是理查德·斯托尔曼当年的初衷。”

Wright 和其他批评红帽公司政策转变的人还指出，RHEL本身是基于他人可得的编码贡献，尽管他承认红帽公司的员工做了大量工作，使 RHEL 成为有用、稳定和广泛流行的消费产品。他还表示自成立以来，AlmaLinux 已经向更广泛的开源生态系统贡献了代码。

### 开源社区向前发展

McGrath 并没有对那些依赖 RHEL 一比一复制版的用户带来多少安慰。他们可以继续使用下游版本，寻找其他的提供商，或者选择付钱给红帽。

“我认为（人们）过于习惯了原有的工作方式，”他表示，“一些大公司的人可能需要红帽的支持，但他们却不甘心为此支付。对此我无能为力……因为我们并没什么好说的。”

自从做了 RHEL 决定以来，红帽已经获得了几个重要的合作伙伴。九月份时，云计算软件公司 Salesforce 将其 20 万套系统从免费的 CentOS Linux 迁移到了红帽企业级 Linux。同月，红帽还宣布 RHEL 将开始支持甲骨文的云架构。今年夏季时，甲骨文是少数公开批评红帽将其最流行的代码设置了付费壁垒的大公司之一。

10 月 24 日，数据安全公司 Cohesity 表示它也会放弃 CentOS Linux 转而选择使用 RHEL，这又是红帽的另一场胜利。

McGrath 反驳了 RHEL 被设置付费壁垒的说法，他表示人们仍然可以通过一个名为 CentOS Stream 的发行版在上游免费获取代码，这是 RHEL 的测试版本。

批评人士注意到，CentOS Stream 与 RHEL 源代码不同，因为它处于开发过程的早期。Wright 使用了烹饪的比喻来形容它：CentOS Stream 提供的可能是配料，但不是确切的比例。

非客户仍然可以访问红帽其他程序的源代码，如自动化平台 Ansible。

10 月中旬，Wright 从阿拉巴马的伯明翰出发，参加了每年在罗利举办的开源活动《All Things Open 大会》，红帽是会议的主要赞助商之一。

他提到：“我被问的每一个问题都是这次变革对我们的影响。”

在 7 月份，AlmaLinux 正式改变了其目标，相反这个非营利组织声明它不再是 RHEL 的精确副本，而是一个兼容于 RHEL 的操作系统。三个月后，Wright 说道，红帽的决定实际上使 AlmaLinux 变得更好了。

“就像我们已经摘掉了拐杖一样，”他说，“我们现在开始走自己的路了。”

那么他现在是否同意红帽的决定了呢？

完全不同意。

Wright 坚信，这个位于罗利的软件巨头在今年夏天对 GPL 进行了快速和不严谨的摆弄。对许多开源信仰者来说，这样对待他们视为神圣的文本的威胁是不能宽恕的。

*（题图：MJ/ba400e7a-8692-4935-8270-dac2e8f45acc）*

---

via: <https://www.newsobserver.com/news/business/article279099964.html>

作者：[Brian Gordon](https://www.newsobserver.com/profile/263041588) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

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


如何在 Vim 中剪切、复制和粘贴

Summary: 在本篇 Vim 快速技巧中，你将学习到剪切和复制粘贴的相关知识。

我只用y、d和p，结果是总是会出现多复制/少复制一个字符，或者粘贴时前面或后面多出一个字符（或位置错误）的问题。

在本篇 Vim 快速技巧中，你将学习到剪切和复制粘贴的相关知识。

![](/data/attachment/album/202311/07/172330q49ttt4ee9r86u39.png)

>
> 在本篇 Vim 快速技巧中，你将学习到剪切和复制粘贴的相关知识。
>
>
>

剪切、复制和粘贴文本是文本编辑中最基本的任务之一，我们都知道 Vim 有不同的处理方式。

这意味着，在你掌握它之前，你会害怕它，一旦你掌握了它，它就只是一个兔子洞。

虽然我将详细介绍剪切、复制和粘贴，但这里是本教程的基本摘要，以帮助你开始使用：

| **按键** | **描述** |
| --- | --- |
| `yiw` | 复制当前单词。 |
| `yy` | 复制整行。 |
| `diw` | 剪切当前单词。 |
| `dd` | 剪掉整行。 |
| `p` | 粘贴文本。 |

别担心，Vim 为你提供的选项比我上面提到的要多得多。

在本教程中，我将引导你完成以下内容：

* 如何在 Vim 中复制文本
* 如何在 Vim 中剪切文本
* 如何在 Vim 中粘贴文本
* 如何使用可视模式在 Vim 中剪切和复制文本

那么让我们从第一个开始。

### 如何在 Vim 编辑器中复制文本

虽然我们使用术语“复制”，但 Vim 有一个不同的术语，称为 “<ruby> 扽出 <rt>  yank </rt></ruby>”，因此从现在开始，我将使用“扽出”而不是“复制”。

正如我之前提到的，你可以使用多种方法在 Vim 中扽出文本，以下是一些有用的方法：

| 命令 | 描述 |
| --- | --- |
| `nyy` 或 `nY` | 扽出（复制）当前行和接下来的 `n-1` 行。例如，`3yy` 复制当前行及其下面的两行。 |
| `yaw` | 扽出（复制）光标所在的当前单词。 |
| `yy` 或 `Y` | 扽出（复制）整个当前行。 |
| `y$` | 扽出（复制）从光标到行尾的文本。 |
| `y^` 或 `y0` | 扽出（复制）从光标到行首的文本。 |

要在 Vim 中扽出，请执行以下 3 个简单步骤：

1. 按 `Esc` 键切换到正常模式
2. 移动到要复制的行或单词
3. 按上表中的相关命令，你的文本将被复制

想学习交互式复制行的方式吗？ 跳到本教程的最后一部分。

### 如何在 Vim 编辑器中剪切文本

在 Vim 中，你没有任何删除文本的选项。取而代之的是剪切文本，因此删除和剪切文本与 Vim 中的操作类似。

要在 Vim 中剪切文本，请按 `d` 命令。但你永远不会在没有任何选项的情况下使用 `d` 命令。你总是会添加一些东西来做更多操作。

因此，你可以使用以下一些实用方法使用 `d` 命令剪切文本：

| 命令 | 描述 |
| --- | --- |
| `dd` | 剪切整个当前行。 |
| `d$` | 将文本从光标剪切到行尾。 |
| `d^` 或 `d0` | 将文本从光标剪切到行首。 |
| `ndd` 或 `dN` | 剪切当前行和接下来的 `n-1` 行。例如，`3dd` 剪切当前行及其下面的两行。 |
| `daw` | 剪切光标所在的当前单词。 |

假设我想从文件中剪切前 4 行，然后我需要使用 `4dd`，我是这样做的：

![](/data/attachment/album/202311/07/172432w9s9ve9u4v468csf.gif)

### 如何在 Vim 编辑器中粘贴文本

在 Vim 中复制或剪切文本后，只需按 `p` 键即可粘贴它。

你可以多次按 `p` 键多次粘贴文本，也可以使用 `np`，其中 `n` 是要粘贴文本的次数。

例如，在这里，我粘贴了之前复制了三遍的行：

![](/data/attachment/album/202311/07/172432c41w8aaq1lxjv1p1.gif)

就是这么简单！

### 如何通过选择文本来剪切和复制文本

如果你使用过 GUI 文本编辑器，那么你肯定习惯于通过选择文本来复制和剪切文本。

让我们从如何通过在 Vim 中选择文本来复制开始。

#### 通过选择文本复制

要在可视模式下复制文本，请执行以下 3 个简单步骤：

1. 移动到要开始选择的地方
2. 按 `Ctrl + v` 启用可视模式
3. 使用箭头键进行选择
4. 按 `y` 键复制所选文本

例如，在这里，我使用可视模式复制了 4 行：

![](/data/attachment/album/202311/07/172432coxvtncbjmnv0v97.gif)

如果你注意到，当我按下 `y` 键，它就会显示有多少行被扽出（复制）。就我而言，有 4 行被复制。

#### 在 Vim 中选择文本来剪切文本

要在 Vim 中以可视模式剪切文本，你所要做的就是遵循 4 个简单步骤：

1. 移动到要剪切的位置
2. 按 `Ctrl + v` 切换到可视模式
3. 使用箭头键选择要剪切的行
4. 按 `d` 键剪切选定的行

假设我想剪掉 4 行，那么我会这样做：

![](/data/attachment/album/202311/07/172432ocy7myhmsu5m5u45.gif)

挺容易。是吧？

### 更多关于 Vim 的内容

你知道 Vim 有多种模式吗？ [了解有关 Vim 中不同模式的更多信息](https://linuxhandbook.com/vim-modes/)。

想提高你的 Vim 水平吗？请参阅 [成为 Vim 专业用户的提示和技巧](https://linuxhandbook.com/pro-vim-tips/)。

我希望本指南对你有所帮助。

*（题图：MJ/3555eed2-ab14-433d-920f-17b80b46ce74）*

---

via: <https://itsfoss.com/vim-cut-copy-paste/>

作者：[Sagar Sharma](https://itsfoss.com/author/sagar/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #1178 Linux 系统也将出现 “蓝屏死机”

Summary:
? Linux 系统也将出现 “蓝屏死机”
? OpenAI 推出 GPT-4 Turbo 和 AI 应用商店
? Firefox 的开发将完全转到 Git
»
»

systemd招致不少批评不是没有原因的。。。

SVN表示在非IT行业的企业环境，我还活得很好。。。

除了非IT行业，有些开源项目也在用SVN。像是Read The Docs，以及Arch Linux的软件仓库，内部都还在用SVN。其中Arch还借助SVN2Git来向Git用户开放对软件仓库的访问

![](/data/attachment/album/202311/07/195726uor9afzf2irfrooq.jpg)

![](/data/attachment/album/202311/07/195745r4dkcrsnwinnki3o.png)

### Linux 系统也将出现 “蓝屏死机”

几乎所有主流的 Linux 系统都在使用 systemd 作为启动、初始化和服务管理等系统。systemd 在不断增加各种功能，吞噬各种 Linux 系统功能。而即将发布的 systemd 255 甚至引入了 “蓝屏死机” 功能，用于在 Linux 启动失败时显示重要的错误信息 —— 这不是愚人节恶作剧。

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/systemd-255-rc1)**
>
>
>

>
> 老王点评：果然，这就是 systemd 之父 Lennart Poettering 被微软雇佣后的结果。
>
>
>

![](/data/attachment/album/202311/07/195759fkf5iainninubtks.png)

### OpenAI 推出 GPT-4 Turbo 和 AI 应用商店

OpenAI 在其首届开发者大会上发布了 GPT-4 Turbo，该公司称其不仅更强大，而且成本更低。GPT-4 Turbo 有两个版本：一个是纯文本分析版本，另一个是可以同时理解文本和图像上下文的版本。GPT-4 Turbo 提供 128k 个令牌的上下文窗口，相当于约 100,000 个单词或 300 页书籍，这个大小是 GPT-4 的四倍，也是所有商用模型中最大的上下文窗口。此外，OpenAI 还 [宣布](https://techcrunch.com/2023/11/06/app-store-for-ai-build-your-own-gpt-and-sell-it-on-openais-gpt-store/) 推出 AI 应用商店，任何人都可以创建这种被称作 “GPT” 的对话式人工智能系统，然后你可以将其上架到 AI 应用商店。OpenAI 称，没有编码经验也可以制作 GPT，只需与 ChatGPT 聊天并描述你想要的东西，就可以制作一个 GPT。

>
> **[消息来源：Tech Crunch](https://techcrunch.com/2023/11/06/openai-launches-gpt-4-turbo-and-launches-fine-tuning-program-for-gpt-4/)**
>
>
>

>
> 老王点评：这个 AI 时代，我们却难以接触最前沿的技术进步。
>
>
>

![](/data/attachment/album/202311/07/195819al7evvab8i9emli1.png)

### Firefox 的开发将完全转到 Git

Firefox 的开发工作一直都在同时使用两个版本控制系统 Mercurial 和 Git。但这对 Mozilla 来说是一个 “沉重的负担”，因此它决定将开发工作完全转移到 Git 上。Mozilla 预计至少需要 6 个月才能开始全面过渡到 Git。此外，Mozilla 将继续使用 Bugzilla 等工具。不过，虽然该项目将会托管在 GitHub，但短时间内不会接受拉取请求，贡献工作流维持不变。

>
> **[消息来源：Phoronix](https://www.phoronix.com/news/Firefox-Going-Git)**
>
>
>

>
> 老王点评：还有其它版本控制系统吗？感觉现在 Git 已经将其它版本控制系统都挤压得没有空间了。这应该不是好事。
>
>
>


Graphite：由 AI 助力的基于网络的开源矢量图形编辑器

Summary: 让我们了解更多即将亮相的矢量图形编辑器 Graphite。

每一台安装该应用的机器都向网络获取算力：如果它没有中心化算力基础，就是向每一台安装该应用的机器本身获取闲置算力。

让我们了解更多即将亮相的矢量图形编辑器 Graphite。

![](/data/attachment/album/202311/07/233225ho5gwy3gypdkn5iz.jpg)

>
> 让我们了解更多即将亮相的矢量图形编辑器 Graphite。
>
>
>

此次，我们要介绍的是一个完全免费而开源的 **平面图形编辑器**，名为 “Graphite”，它专注于创建一个完善的 **非破坏性所见即所得编辑体验**。

许多为 Linux 提供 [出色的矢量图形编辑器](https://itsfoss.com/vector-graphics-editors-linux/#bonus-svg-edit-web-based-alternative-) 的应用都有一个专门的应用程序，但 Graphite 则选择了不同的路径，成为一个 **仅基于浏览器的应用**。不过，根据路线图，它计划为 Linux、Windows 和 macOS 提供桌面应用。

考虑到它能在网络上运行，它的目标是在提供所有必要功能的同时保持轻量级。

>
> ? 目前，此应用处于 alpha 开发阶段，许多计划中的功能还处在概念验证状态。
>
>
>

### Graphite：综述 ⭐

![](/data/attachment/album/202311/07/233308fvhdo404f8o4qoph.png)

Graphite 是一个轻量级的、在网络浏览器上运行的 **基于 Rust 的矢量图形编辑器**。由 **Graphene 节点图组合引擎** 驱动，提供了一个易于访问、基于层的优秀编辑器。

其中 **最值得注意的特性** 包括：

* 精美、直观的界面
* 节点图图像效果
* AI 辅助艺术创作
* 实时协作

开发者分享的一段视频展示了几乎所有前述的特性。我被视频中如此直接简洁的编辑体验深深打动。

事实上，我亲自尝试使用它的 [开发版](https://news.itsfoss.com/graphite/dev.graphite.rs) 创作了下面的杰作，**编辑体验类似于你在大多数图形编辑器中所发现的**。

不过，我必须手动寻找各种选项，因为 Graphite **并没有官方文档**。

我之前与首席开发者交谈过，他告诉我他们正在努力提供文档，并且已经在期待它的发布了。

同时，值得注意的是，在一个轻量级应用上我们获得众多需要文档的选项，这听起来就很赞！

![](/data/attachment/album/202311/07/233310o8wre9xbwj8jeerr.jpg)

当然，目前的状态下我们还无法真正检验该应用的核心理念。然而，对我来说，如果 Graphite 矢量图形编辑器能实现其展示和承诺的话，那么它的影响将是 **颠覆性的**。

我也好奇他们会如何在他们的自由开源应用中添加 AI 辅助艺术创作功能。谁不想试用这个呢？对吧！?

与此同时，我建议你关注 [Graphite 的路线图](https://graphite.rs/features/) 和 [GitHub 仓库](https://github.com/GraphiteEditor/Graphite)，以了解重要的开发里程碑或可以贡献你的智慧。

### ? 如何获取 Graphite

因为这是一个网络应用，它基本上可以 **在任何支持的网络浏览器上运行**，尽管我不确定智能手机上的编辑体验会怎样。然而，对于台式机、笔记本电脑，甚至是平板电脑，这都可能是个不错的选择。

你可以访问这个 [在线编辑器](https://editor.graphite.rs/) 来获取最新的 alpha 版本。如果你想获取最新的开发版本，可以试试 [开发版](https://dev.graphite.rs/)。

>
> **[Graphite](https://editor.graphite.rs/)**
>
>
>

? 你对 Graphite 矢量图形编辑器有什么看法？你喜欢它的概念吗？你认为他们能实现吗？欢迎分享你的想法。

---

via: <https://news.itsfoss.com/graphite/>

作者：[Sourav Rudra](https://news.itsfoss.com/author/sourav/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[ChatGPT](https://linux.cn/lctt/ChatGPT) 校对：[wxy](https://github.com/wxy)

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