标签 Linux 下的文章

编者按:近些年来 Rust 语言由于其内存安全性和性能等优势得到了很多关注,尤其是 Linux 内核也在准备将其集成到其中,因此,我们特邀阿里云工程师苏子彬为我们介绍一下如何在 Linux 内核中集成 Rust 支持。

2021 年 4 月 14 号,一封主题名为《Rust support》的邮件出现在 LKML 邮件组中。这封邮件主要介绍了向内核引入 Rust 语言支持的一些看法以及所做的工作。邮件的发送者是 Miguel Ojeda,为内核中 Compiler attributes、.clang-format 等多个模块的维护者,也是目前 Rust for Linux 项目的维护者。

Rust for Linux 项目目前得到了 Google 的大力支持Miguel Ojeda 当前的全职工作就是负责 Rust for Linux 项目。

长期以来,内核使用 C 语言和汇编语言作为主要的开发语言,部分辅助语言包括 Python、Perl、shell 被用来进行代码生成、打补丁、检查等工作。2016 年 Linux 25 岁生日时,在对 Linus Torvalds 的一篇 采访中,他就曾表示过:

这根本不是一个新现象。我们有过使用 Modula-2 或 Ada 的系统人员,我不得不说 Rust 看起来比这两个灾难要好得多。

我对 Rust 用于操作系统内核并不信服(虽然系统编程不仅限于内核),但同时,毫无疑问,C 有很多局限性。

在最新的对 Rust support 的 RFC 邮件的回复中,他更是说:

所以我对几个个别补丁做了回应,但总体上我不讨厌它。

没有用他特有的回复方式来反击,应该就是暗自喜欢了吧。

目前 Rust for Linux 依然是一个独立于上游的项目,并且主要工作还集中的驱动接口相关的开发上,并非一个完善的项目。

项目地址: https://github.com/Rust-for-Linux/linux

为什么是 Rust

Miguel Ojeda 的第一个 RFC 邮件中,他已经提到了 “Why Rust”,简单总结下:

  • 安全子集 safe subset 中不存在未定义行为,包括内存安全和数据竞争;
  • 更加严格的类型检测系统能够进一步减少逻辑错误;
  • 明确区分 safeunsafe 代码;
  • 更加面向未来的语言:sum 类型、模式匹配、泛型、RAII、生命周期、共享及专属引用、模块与可见性等等;
  • 可扩展的独立标准库;
  • 集成的开箱可用工具:文档生成、代码格式化、linter 等,这些都基于编译器本身。

编译支持 Rust 的内核

根据 Rust for Linux 文档,编译一个包含 Rust 支持的内核需要如下步骤:

  1. 安装 rustc 编译器。Rust for Linux 不依赖 cargo,但需要最新的 beta 版本的 rustc。使用 rustup命令安装:
rustup default beta-2021-06-23
  1. 安装 Rust 标准库的源码。Rust for Linux 会交叉编译 Rust 的 core 库,并将这两个库链接进内核镜像。
rustup component add rust-src
  1. 安装 libclang 库。libclangbindgen 用做前端,用来处理 C 代码。libclang 可以从 llvm 官方主页 下载预编译好的版本。
  2. 安装 bindgen 工具,bindgen 是一个自动将 C 接口转为 RustFFI 接口的库:
cargo install --locked --version 0.56.0 bindgen
  1. 克隆最新的 Rust for Linux 代码:
git clone https://github.com/Rust-for-Linux/linux.git
  1. 配置内核启用 Rust 支持:
Kernel hacking
  -> Sample kernel code
    -> Rust samples
  1. 构建:
LIBCLANG_PATH=/path/to/libclang make -j LLVM=1 bzImage

这里我们使用 clang 作为默认的内核编译器,使用 gcc 理论上是可以的,但还处于 早期实验 阶段。

Rust 是如何集成进内核的

目录结构

为了将 Rust 集成进内核中,开发者首先对 Kbuild 系统进行修改,加入了相关配置项来开启/关闭 Rust 的支持。

此外,为了编译 rs 文件,添加了一些 Makefile 的规则。这些修改分散在内核目录中的不同文件里。

Rust 生成的目标代码中的符号会因为 Mangling 导致其长度超过同样的 C 程序所生成符号的长度,因此,需要对内核的符号长度相关的逻辑进行补丁。开发者引入了 “大内核符号”的概念,用来在保证向前兼容的情况下,支持 Rust 生成的目标文件符号长度。

其他 Rust 相关的代码都被放置在了 rust 目录下。

在 Rust 中使用 C 函数

Rust 提供 FFI( 外部函数接口 Foreign Function Interface )用来支持对 C 代码的调用。Bindgen 是一个 Rust 官方的工具,用来自动化地从 C 函数中生成 Rust 的 FFI 绑定。内核中的 Rust 也使用该工具从原生的内核 C 接口中生成 Rust 的 FFI 绑定。

quiet_cmd_bindgen = BINDGEN $@
      cmd_bindgen = \
    $(BINDGEN) $< $(shell grep -v '^\#\|^$$' $(srctree)/rust/bindgen_parameters) \
        --use-core --with-derive-default --ctypes-prefix c_types \
        --no-debug '.*' \
        --size_t-is-usize -o $@ -- $(bindgen_c_flags_final) -DMODULE

$(objtree)/rust/bindings_generated.rs: $(srctree)/rust/kernel/bindings_helper.h \
    $(srctree)/rust/bindgen_parameters FORCE
    $(call if_changed_dep,bindgen)

ABI

Rust 相关的代码会单独从 rs 编译为 .o,生成的目标文件是标准的 ELF 文件。在链接阶段,内核的链接器将 Rust 生成的目标文件与其他 C 程序生成的目标文件一起链接为内核镜像文件。因此,只要 Rust 生成的目标文件 ABI 与 C 程序的一致,就可以无差别的被链接(当然,被引用的符号还是要存在的)。

Rust 的 alloccore

目前 Rust for Linux 依赖于 core 库。在 core 中定义了基本的 Rust 数据结构与语言特性,例如熟悉的 Option<>Result<> 就是 core 库所提供。

这个库被交叉编译后被直接链接进内核镜像文件,这也是导致启用 Rust 的内核镜像文件尺寸较大的原因。在未来的工作中,这两个库会被进一步被优化,去除掉某些无用的部分,例如浮点操作,Unicode 相关的内容,Futures 相关的功能等。

之前的 Rust for Linux 项目还依赖于 Rust 的 alloc 库。Rust for Linux 定义了自己的 GlobalAlloc 用来管理基本的堆内存分配。主要被用来进行堆内存分配,并且使用 GFP_KERNEL 标识作为默认的内存分配模式。

不过在在最新的 拉取请求 中,社区已经将移植并修改了 Rust的 alloc 库,使其能够在尽量保证与 Rust 上游统一的情况下,允许开发者定制自己的内存分配器。不过目前使用自定义的 GFP_ 标识来分配内存依然是不支持的,但好消息是这个功能正在开发中。

“Hello World” 内核模块

用一个简单的 Hello World 来展示如何使用 Rust 语言编写驱动代码,hello_world.rs:

#![no_std]
#![feature(allocator_api, global_asm)]

use kernel::prelude::*;

module! {
    type: HelloWorld,
    name: b"hello_world",
    author: b"d0u9",
    description: b"A simple hello world example",
    license: b"GPL v2",
}

struct HelloWorld;

impl KernelModule for HelloWorld {
    fn init() -> Result<Self> {
        pr_info!("Hello world from rust!\n");

        Ok(HelloWorld)
    }
}

impl Drop for HelloWorld {
    fn drop(&mut self) {
        pr_info!("Bye world from rust!\n");
    }
}

与之对应的 Makefile

obj-m := hello_world.o

构建:

make -C /path/to/linux_src M=$(pwd) LLVM=1 modules

之后就和使用普通的内核模块一样,使用 insmod 工具或者 modprobe 工具加载就可以了。在使用体验上是没有区别的。

module! { }

这个宏可以被认为是 Rust 内核模块的入口,因为在其中定义了一个内核模块所需的所有信息,包括:AuthorLicenseDescription 等。其中最重要的是 type 字段,在其中需要指定内核模块结构的名字。在这个例子中:

module! {
    ...
    type: HelloWorld,
    ...
}

struct HelloWorld;

module_init()module_exit()

在使用 C 编写的内核模块中,这两个宏定义了模块的入口函数与退出函数。在 Rust 编写的内核模块中,对应的功能由 trait KernelModuletrait Drop 来实现。trait KernelModule 中定义 init() 函数,会在模块驱动初始化时被调用;trait Drop 是 Rust 的内置 trait,其中定义的 drop() 函数会在变量生命周期结束时被调用。

编译与链接

所有的内核模块文件会首先被编译成 .o 目标文件,之后由内核链接器将这些 .o 文件和自动生成的模块目标文件 .mod.o 一起链接成为 .ko 文件。这个 .ko 文件符合动态库 ELF 文件格式,能够被内核识别并加载。

其他

完整的介绍 Rust 是如何被集成进内核的文章可以在 我的 Github 上找到,由于写的仓促,可能存在一些不足,还请见谅。


作者:苏子彬,阿里云 PAI 平台开发工程师,主要从事 Linux 系统及驱动的相关开发,曾为 PAI 平台编写 FPGA 加速卡驱动。

如果一切顺利的话,周日 Linus Torvalds 将会发布 Linux 5.13 稳定版,而不是发布 5.13-rc8 测试版并把最终版本再推后一个版本。不管是哪种情况,Linux 5.13 很快就会发布,而且会有很多新功能。

在合并窗口结束后,我们照例发布了 Linux 5.13 的功能概述。但是,对于那些不记得在 4 月底到 5 月初的合并窗口期间所有这些变化的人来说,这里回顾了这个下一个内核版本中最突出的变化:


via: https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.13-Features

作者:Michael Larabel 选题:wxy 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在某些领域,Linux 确实要比 Windows 和 macOS 更加优秀。人们正在意识到这一点,而且 Linux 也在桌面操作系统市场上变得愈发流行。

当然,目前大多数桌面操作系统用户仍然对 Windows 或者 macOS 推崇备至,但是也有着越来越多的用户开始尝试新的 Linux 发行版,看看他们是否可以从原来的系统切换到 Linux 系统。

他们可能已经听过 用 Linux 作为桌面操作系统 的一些优秀案例,又或者是仅仅想要去尝试一些与原先不同的事物,谁知道呢?

在这里,我将为你解释为什么在 2021 年我仍然推荐你使用 Linux。

Linux 真棒,但是究竟是什么让其在 2021 年值得推荐呢?

如果已经知道了 使用 Linux 的优点,你可能就知道接下来我会说些什么。

1、你不需要购买许可证

你必须付费才能获得 Windows 10 许可证。

虽然有更便宜的选择,如获得 OEM 密钥。但是,如果你不愿意通过一些地下网站,而是从官方网站获得许可证,那么仅授权使用 1 台 PC 的家庭版就至少需要花费 140 美元

当然,macOS 是一个完全不同的模式(你需要购买先进的硬件才能使用 macOS)——所以我们才会一直使用微软的 Windows。

关键是,在失业的浪潮中,配置一台新电脑是一个挑战。此外,你还需要花钱购买操作系统的许可证,但是你却可以在多台计算机上免费使用 Linux。

是的,你不需要为 Linux 获取许可证密钥。你可以轻松下载 Linux 发行版,并根据需要将其安装在尽可能多的设备上。

不要担心,如果你不了解 Linux 发行版,你可以看看我们的 最好的 Linux 发行版 列表。

2、重新唤醒你的 PC 并节省资金

全球芯片短缺 已经严重影响了电脑组件的价格,特别是显卡。并不是简单的价格上升,而是你不得不支付 2 到 5 倍的零售价来购得显卡。

当然,如果你没有电脑,现在配置一个新的电脑可能是难以置信的挑战,但如果你有一个旧电脑的话,选择在上面运行 Windows 10 将会是十分卡顿的。

如果你不想要 Windows 系统,那 macOS 呢?入门级 Mac 系统将会花费至少 1100 美金,甚至更多,这取决于你住在哪里。对许多人来说,这会是一笔昂贵的开销。

你肯定需要升级你的系统 —— 但是如果我说 Linux 可以让你的旧电脑重新派上用场,能为你省钱呢?

你将能够在你认为无法运行最新版本的微软 Windows 的电脑上运行 Linux。是的,就是这样的。

Linux 是一个资源高效型的操作系统,可在各种较旧的系统配置上运行。

所有你需要做的只是参考我们的列表 轻量级 Linux 发行版,并选择一个你喜欢的。

3、通过再次利用系统来减少电子浪费

考虑到电子废物正在全球不断产生,尤其是由加密矿工产生的,我们可以尽量减少浪费。除非你真正需要新的硬件,否则最好将现有硬件设备重新用于新任务。

而且,多亏了 Linux,你可以将旧电脑或单片机转变成媒体服务器或个人 Nextcloud 服务器。

你可以在现有硬件上使用 Linux 做更多工作。

因此,这将显著降低对新硬件的需求,并让你高效地重复使用现有的设备。

4、远离病毒和恶意软件

在远程工作无处不在的时代,病毒和恶意软件显著增加。因此,即使你想平静地工作,你最终也可能受到恶意软件的影响。

Windows 和 macOS 比以往任何时候都更容易受到恶意软件的影响。但是,对于 Linux?这是不太可能的。

Linux 发行版会定期修补,以确保最佳安全性。

此外,正因为用户群体小,攻击者就不会花太多时间制作欺骗 Linux 用户的病毒或软件。因此,在使用 Linux 时遇到某种形式的恶意软件的机会较小。

5、没有强制更新

在一个人们压力倍增的时代,强制更新然后发现计算机无法启动可能是一大烦恼。

至少,Windows 用户的情况就是这样。

但是,使用 Linux,你可以继续使用你的系统,而无需在后台强制下载任何更新。

你的操作系统只有你能决定。

当你想要更新你的 Linux 发行版本时,你可以选择更新,也可以不更新,它可以一直保持不更新的状态并且不会打扰你,除非你有很长一段时间没有更新。

总结

这些只是我能想到的几个原因之一,Linux 作为操作系统的选择在 2021 年比以往任何时候都更值得被推荐。

当然,这也取决于你的要求,这些好处可能不会体现在在你的用例中。但是,如果你确实不了解 Linux,至少,现在你可以评估你的需求,重新作出选择。

除了上述几点之外,你还能想到什么?请在下面的评论中告诉我。


via: https://news.itsfoss.com/switch-to-linux-in-2021/

作者:Ankush Das 选题:lujun9972 译者:zepoch 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

加密货币矿工滥用迫使 Docker Hub 取消免费构建服务

本周,Docker Hub 宣布其自动构建服务不再提供给免费用户。那些滥用的加密货币矿工们在这些免费云计算平台上肆虐。这不仅让 Docker Hub 额外付出很多成本,而且还降低了他们的付费客户的性能。该公司试图通过删除大约一万个账户来解决这个问题,但这些滥用的矿工们接下来又成群结队地返回。因此,在提供免费构建服务七年之后,Docker 公司将于 6 月 18 日停止免费构建服务。

之前是利用 GitHub Action,现在又盯上了 Docker Hub 的自动构建,这些无耻的小偷们滥用了开源世界的免费服务。

我不反对花自己钱去挖矿,但是这种利用别人的免费服务或盗用别人的计算机挖矿就是一种盗窃行为。

7 年之久的 Linux 特权升级漏洞的补丁发布

Polkit 是一个包含在几乎所有现代 Linux 发行版中的 Linux 系统服务,它为非特权进程与特权进程的通信提供了一种有组织的方式,七年来它一直隐藏着一个重大的安全漏洞。该漏洞允许非特权用户通过少数的标准命令行工具获得管理权限的 Shell。任何使用 systemd 的 Linux 发行版均受影响,包括最新的 RHEL 8 和 Ubuntu 20.04。

请尽快升级系统。

84 亿:史上最大的密码清单在网上公布

有人在网上的黑客论坛提交了一个 100GB 的文本文件,其中包含 84 亿个密码,很可能是从以前的数据泄露和安全漏洞中汇编的。上传者声称,所有密码的长度都在 6 到 20 个字符之间,并删除了所有非 ASCII 字符和空白字符。这个名为 RockYou2021 的集合包含了“众多泄露事件汇编(COMB)” 所有 32 亿个密码,以及其他已披露数据库的密码。由于全球在线用户只有 47 亿人,RockYou2021 可能包含了世界上近三分之二人口的密码。你可以通过 CyberNews 的泄漏密码检查器来检查你的密码是否已经被泄露。

几乎可以肯定你的密码已经泄露,你需要的密码之外的保护,比如双因子认证。

可能你已经知道原计划支持 2 年的 Linux 5.10 LTS 已经延长支持到 6 年了,但是你可能不知道是谁站出来提供了支持。

支持到 2026 年的 Linux 5.10!

去年年底,Linux 内核社区发布最新长期支持版本 Linux 5.10 LTS 时,该内核只支持到 2022 年 12 月,这让很多社区成员不解,因为发布于 2016 年底的 4.9 版本都支持到 2023 年 1 月。

未延长前的 LTS 支持计划

面对疑问,Linux 内核维护者 Greg Kroah-Hartman 解释说,“我希望看到公司们将如何帮助我测试和维护该内核版本,以使支持它 6 年成为实际可能。”

前不久,我们看到了 Linux 内核社区发布的一则新消息,“在有足够多的公司加强帮助测试之后,Linux 5.10 LTS 现在将维护到 2026 年底。”

发生了什么?在偶然的一个机会,我得知了是谁为 5.10 LTS 承诺了支持。这其中有一家中国公司,这是一家将开源置于战略级高度的公司,我想,你也许已经猜到了,是华为

说实话,听到这个消息时,既有些意外也不意外。意外的是,我没想到中国开发者和 IT 企业已经在承担这样的重任了;不意外的是,毕竟华为已经是全球首屈一指的 Linux 内核贡献大厂了,就在 Linux 5.10 中,华为以提交 1434 个补丁而位列内核代码贡献第一名,同时以代码修改行数 41049 行位列第二名。

Linux 5.10 贡献排行榜,华为名列榜首

可能作为普通用户并不关心使用的是不是 Linux,更不关心使用的是什么版本和有多久的支持期,但作为一家专注于 Linux 与开源的技术社区,我深刻理解其中的含义,也更关心华为在做出这样的决定背后的考虑、付出和可持续性。于是,我和 Linux ARM64 ACPI Maintainer、openEuler Maintainer、华为工程师郭寒军约了一个访谈,现在将其中主要内容分享给诸位读者。

为 LTS 提供支持

杭州的梅雨季显得并不炎热,在一间很大的房间中,我和看起来比我年轻多了的受访者郭寒军同学进行了一段简短而精炼的对话。

郭寒军(左)接受老王(右)的专访

首先,我直奔主题问到了为什么华为会做出对 5.10 LTS 支持的承诺?从事了 Linux 内核开发十余年的郭寒军很有技术人员本色,他坦诚说,“华为将 Linux 内核用于各种各样的产品。我们在 Linux 内核上积累了很多经验,包括开发、测试和维护的能力。我们觉得可以做这些支持。”在华为内部进行了简单的讨论,讨论了需要投入的机器的资源、人的资源等等。在资源协调到位之后,“我们就公开地在邮件列表上向 Linux 内核社区与 Greg 表态说,我们愿意从公司的角度协助做维护和测试工作。”

据我所知,Linux 5.10 LTS 也将是 Debian 11 和安卓的下一个版本的内核,而在一众已经或即将采用 Linux 5.10 LTS 的软件或产品中,openEuler 发行版家族并不是最引人注目的一个,但是华为却是最主动站出来的一个。当然,在华为的表态带动之下,也有更多企业参与到了 LTS 的支持工作当中。

郭寒军还说,“其实我们提供支持的不仅仅是 Linux 5.10 LTS,而是会对目前较新的 4 个 LTS 内核都提供支持,并且会持续支持更多的 LTS 内核。”这又是一个令我意外的事情。作为一位从业互联网软件开发二十多年,眼看着 Linux 内核从一张低密度软盘即可承载的软件变成了世界上最大的软件项目,我深知要支持现在这么庞大的软件项目背后的代价有多大。其实,之所以 Greg 在一开始给 Linux 5.10 LTS 只计划了 2 年的支持期,就是因为 Linux 内核社区已经积累了 6 个 LTS 支持版本,在支持力量上有些力不从心了。目前,Linux 稳定内核的维护负责人只有两位 Greg Kroah-Hartman 和 Sasha Levin,可想而知,仅仅两人是很难照顾这么多的 LTS 内核维护工作的。

据我了解,华为对 Linux LTS 内核的测试用例已经有 8000 多项,而且还支持包括 x86\_64、ARM64 等多种架构,每个版本的测试就需要 7-8 个小时,这就需要投入大量的基础设施。

当然,我想华为在 Linux 内核方面的偌大投入,绝非是一时心血来潮,也不仅仅是技术极客们的热情奉献所致。这个支持决定不仅符合华为整体的开源战略,也给鲲鹏和 openEuler 等提供了一个坚实的底座。

内核能力对云原生社区的重要性

Linux 内核是整个系统的底座。所有的上层的技术,包括其上的一些应用软件都是构建在内核上面的。内核的稳定性、性能以及内核的后续的技术创新方向,都会对整个 Linux 生态和社区产生重要影响。这就是为什么我们要花这么多精力去保证它的稳定性,也是为什么要主动去承担 Linux LTS 支持的原因。

为了打造这样的一个底座,华为在内核方面进行了长期而卓有成效的投入,并把在内核方面的积累在 openEuler 社区开放。郭寒军认为 openEuler 在内核方面的能力主要体现在三个方面:兼容性、性能提升和创新。

从兼容性来说,这包括 CPU 架构和硬件的兼容性。除了支持 ARM64 架构的鲲鹏、飞腾处理器之外,openEuler 还可以支持 x86\_64 架构的兆芯、英特尔、AMD 等 CPU 架构,以及 RISC-V 家族。

从性能提升方面来说,openEuler 的多核并行等技术,针对调度机制、CPU 资源管控等来提升整个业务的线性度以提升性能。这些技术已经通过 openEuler 的下游发行版提供给了更多行业用户,真正使社区和行业用户受惠于软件技术带来的全新使用体验。

从创新方面来说,openEuler 内核的创新包括:

  • 第一个创新是文件系统方面的。文件系统是华为的强项之一,从可扩展只读文件系统 EROFS 到基于非易失性内存的新型文件系统,随着存储技术的发展,也需要有新型的文件系统做支撑。
  • 第二个创新是弹性软内存。这是指如何有效的利用不同速度和不同容量的存储系统,做一些分级控制,既能使用到大容量的存储,而又不降低性能。
  • 第三个是目前正在重点打造的云原生内核。在云原生内核方面,业界已经有了一些探索,而华为可以结合其硬件能力做全栈的云原生支持,从进程的调度,到内存、网络以及存储,再到最底层的硬件,提供一个 QoS 控制来支持高优先级任务。

openEuler 对 Linux 生态的意义

自 2019 年 12月 31 日 openEuler 开源以来,已有 70多家企业、机构和组织加入了 openEuler 社区,4700 多位社区开发者,成立了 83个 SIG,并有 8 家合作伙伴推出基于 openEuler 的商业发行版,在金融、政府、运营商和电力等各行业得到了广泛商用。而在去年,openEuler 社区理事会正式成立、技术委员会升级;今年,又新成立了用户委员会和品牌宣传委员会,社区治理逐步完善,走向“共建、共享、共治”。

对此,郭寒军认为,建立在 openEuler 下游的发行版天然会具备一些优势。华为一直坚持并倡导“上游优先”原则,积极地将其对 Linux 内核的改进推送到上游 Linux 内核主线,但是基于内核社区的运作机制,这个过程必然是较为漫长和复杂的。因此,openEuler 开源社区拥有的强大的 Linux 内核能力,对 openEuler 及下游的发行版来说,可以更快的响应一些特定的功能需求和硬件支持。这对于国内的一些硬件厂商来说尤为重要,可以统合更多的力量而做到更广泛的支持。

结语

作为一家迅速崛起的 Linux 生态开源社区,openEuler 所取得的进展令人侧目。一两年间,openEuler 及其背后的华为、麒麟、统信、联通数科、中科院软件所等一批企业,已经在整个 Linux 生态、云原生领域取得了长足发展。而在企业战略级的支持下, openEuler 社区所回哺给 Linux 社区的也足以令人赞叹,这让我对开源、对中国开源的未来有更多信心。

Python 之父对 Rust、Go、Julia 和 TypeScript 的看法

Python 之父 Guido 在最近一次新采访中分享了他对其它编程语言的看法,其中有些很有趣:

  • Rust 在一个特定的领域真正改进了 C++,它使绕过编译器的检查变得更加困难。当然,它以一种近乎完美的方式解决了内存分配问题。
  • 在所有的新语言中,Go 可能是最像 Python 的 —— 或者至少是在通用的新语言中。
  • Julia 有太多的细节看起来与 Python 非常相似。Julia 会在某个小众的地方是优越的,因为它的编译器为你优化了代码,而 Python 可能永远不会这样。
  • TypeScript 做了一些 Python 仍在等待解决的事情。我们正在向TypeScript学习。听起来 TypeScript 也在向 Python 学习,就像 JavaScript 在一些领域向 Python 学习一样。
嗯,作为目前顶级的编程语言神级人物,Guido 的一些看法挺有意思的。如果有机会得到完整的采访脚本,我们会翻译分享给大家。

Linux 5.13-rc3 发布,主要是撤销明大的提交

Linus Torvalds 如期发布了 Linux 5.13-rc3 内核。他 ,“这是一个非常平静的 RC3 周,至少在纯提交数量上,这是我们在 5.x 系列中最小的 RC3。”

Linux 5.13-rc3 最主要的工作是,撤销了明尼苏达大学研究人员三十几个有问题的补丁,以及因他们的“伪君子提交”研究而引起的清理工作。过去一个月里审查了明尼苏达大学对 Linux 内核的所有补丁,虽然有些补丁部分地解决了真正的问题,但在许多情况下,它们可以进一步改进,或者作用有限。

终究明大还是丧失了 Linux 内核社区的所有信任,即便是有些补丁属于可撤销也可不撤销的。此事的是非曲直大家各有不同的看法,但是我觉得 Linux 内核社区或许应该考虑如何建立更健壮的代码审核机制。

安全研究人员艰难攻破了波音 747 的机上娱乐系统

信息安全公司 PTP 的研究人员在利用了一个可追溯到 1999 年的漏洞后,在一架波音 747 客机的机上娱乐系统上建立了一个持久的 shell。PTP 说,“攻破它比我们预期的要困难得多,主要是因为这个机上娱乐系统已经有 25 年的历史了,缺少许多我们认为在最近的系统上理所当然的功能。”该系统是如此古老,其管理服务器运行在 Windows NT4 SP3 上。许多现代工具和技术都不起作用,甚至连 Kali Linux 的前身 Backtrack 也没有成功。最终,研究人员使用 Metasploit 的 TFTP 服务器模块进入机器,获得了命令行访问权,并从那里获得了管理密码的哈希值并将其破解。

虽然说系统越老漏洞越多,但是过于老的系统,你可能都没有足够工具去破解它。