标签 Linux 下的文章

编者注:本文译自微软官方发布的指南。

Linux 是一款操作系统,与 Windows 有许多相似之处,但由于其开源和高度定制化的特性,衍生出众多的版本。安装 Linux 的前提是,你需要决定一个安装方式,并选定一个适合的 Linux 发行版。

要安装 Linux,你需要如下步骤:

  1. 首先,确定一个安装方式。你可以选择使用 Windows 的 Linux 子系统 Windows Subsystem for Linux (WSL)进行安装,也可以选择完全安装在物理硬件上(即裸机安装),或者在本地或云端创建一个虚拟机(VM)来运行 Linux。
  2. 其次,选择一个 Linux 发行版。如:Ubuntu、Debian、Kali Linux、OpenSUSE 等。
  3. 然后,按照你所选的安装方法进行操作。具体可以是以下四种方式之一:

    • 使用 Windows 子系统 Linux(WSL)中的安装 Linux 命令
    • 在云中创建一个 Linux 虚拟机(VM)
    • 在本机创建一个 Linux 虚拟机(VM)
    • 创建一个可引导的 USB,以安装裸机版 Linux
  4. Linux 安装完成后,你需要熟悉你所选发行版的包管理器,更新和升级可获取的包,并熟悉微软提供的 Linux 资源,比如培训课程、为 Linux 设计的流行工具、新闻以及开源活动等。

步骤 1:选择一个安装 Linux 的方法

至于如何选择安装 Linux 的方式,这主要取决于你的需求和喜好。

  • 如果你是 Linux 新手,我们推荐你首先尝试 Windows 的 Linux 子系统(WSL),这是入门 Linux 最简单的方法。
  • 如果你正在企业环境中工作,或你在处理的业务有更复杂的需求,如规模或安全性等方面,我们推荐你在云端运行 Linux 虚拟机,并查看 Azure 所能提供的帮助。此建议也适用于想要将 Linux 作为服务器的用户。
  • 如果你只想将 Linux 作为你主要的操作系统,可以选择在物理硬件上裸机安装 Linux,尽管这个安装过程稍微复杂一些,且你可能无法访问到 Windows 的工具(如 Outlook、Teams、Word、PowerPoint 等),但你可以全力发挥你硬件的全部性能,无需承担虚拟化或仿真的开销。

你可以在下文中了解这些选项的详细信息。

Windows 的 Linux 子系统(WSL)

Windows 的 Linux 子系统(WSL)是一个安装 Linux 的简便方式,适用于使用 Windows 机器的用户。这是安装 Linux 最简单的一种方式。你只需执行 Linux 的安装命令:wsl --install,即可安装 Ubuntu 发行版。

此方法通过虚拟技术,将 Windows 和 Linux 操作系统(后者运行在真实的 Linux 内核上)整合到一起。你可以根据需要添加任何数量的 Linux 发行版,并且可以方便地在 Windows 中运行你喜爱的 Linux 工具,包括图形界面应用。此外,你还可以在同一条命令行中混合使用 Bash 和 PowerShell 命令。在这种方式下,项目文件由 Linux 文件系统托管,你可能需要用到的开发工具(如 VS Code)则由 Windows 文件系统托管。此安装方式的效率高且性能优秀。选择 Linux 发行版(或默认的 Ubuntu 发行版)后,你可以按照 Windows 的 Linux 子系统下的 Linux 安装命令 进行操作,或在 WSL 文档 中查阅更多信息。

WSL install command screenshot

创建虚拟机(VM)

创建虚拟机(VM)的选项适合所有人,无论你正在使用 Windows 还是 MacOS。然而,如果你想在云端创建虚拟机,你需要有一个 Azure 账户,或者如果你打算在你的电脑上直接创建虚拟机,你需要安装虚拟化软件。

虚拟机实际上是真实计算机的数字版,对于在可能需要提高硬件支持(例如:需要更多内存和处理能力)以及安全级别(如防病毒、加密、备份、策略管理等)的环境中运行 Linux 的场景非常受欢迎。

就像使用 WSL一样,你可以根据自己的需求创建多个不同 Linux 发行版的虚拟机实例,这些虚拟机在相互独立的环境中运行,它们没有任何冲突,非常适合进行软件开发和测试。虽然在 WSL 上运行 Linux 发行版的性能稍微更优,但 Linux 虚拟机更易于复制和迁移。可以根据你的需求,在 Azure 等云服务上或者通过虚拟化软件(也称为 管理程序 hypervisor )在自己的电脑上创建虚拟机。

在 Azure 上创建虚拟机,实际上是在云端的微软的服务器上托管你的虚拟机,你只是在向微软租用计算资源以运行虚拟机。这种方式在当你需要快速配置新的虚拟机或需要运行需求超过你个人电脑能力的任务时,将非常方便。大规模企业,由于其对扩展性、控制和功能需求更高,往往选择 在 Azure 上运行 Linux 虚拟机

在本地计算机上创建虚拟机需要使用虚拟化软件,即管理程序。Windows 提供了一个名为 Hyper-V 的 “类型 1” 管理程序,可以直接在你的硬件上运行虚拟化。此外,还有一些在操作系统上运行的“类型 2” 管理程序,比如 VirtualBox 或 VMware。如果你使用的是 Mac,一般推荐使用的管理程序是收费的“Parallels Desktop”。如果你想了解更多关于在配备了苹果硅芯片的 Mac 上如何安装 Linux 虚拟机的信息,可以参考对应的 安装教程。需要指出的是,VirtualBox 支持 Windows 和 MacOS。有关于如何在苹果硅芯片或基于英特尔的 Mac 上设计并运行自定义 Linux 客户机的更多信息,请参考 这篇

使用虚拟机管理器时,你需要自行管理虚拟机,包括分配内存、磁盘空间等资源,并确保系统的安全和及时性。相比其他选项,这需要更多的技术专长,并且可能无法达到同等的扩展性和容错容忍度。

一旦你选定了 Linux 发行版,并决定是在 本地通过虚拟机管理器运行虚拟机,还是 在云端通过 Azure 运行,你就可以按照相应的说明,在云上或在本地创建 Linux 虚拟机。

Create a Linux VM on Azure screenshot

裸机 Linux

所谓的裸机 Linux,意味着 Linux 是直接在设备硬件上运行。要进行裸机安装,你需要从你选择的 Linux 发行版官方网站下载 ISO 安装文件,并从这个文件创建一个可启动的 USB 驱动器。为了完成这个步骤,你需要一个已经安装有操作系统(Windows 或者其他操作系统)的设备。

许多用户选择裸机安装 Linux,并在同一台设备上与 Windows 共存,这就需要利用所谓的“双启动”模式。使 Windows 和 Linux 能双启动,就需要对你的硬盘进行分区,以保证两个操作系统(Linux 和 Windows)都有各自独立的空间。尽管 WSL、虚拟机和裸机 Linux 的性能已经相差无几,但由于双启动方式需要在两个操作系统间切换的时候频繁重启设备,所以这种安装方式并不是首选。此外,如果选择裸机安装 Linux,还需要对可能出现的设备驱动或硬件兼容性问题做好准备。

你可以在 Linux.org 网站上找到各种可供下载的主流 Linux 发行版。在你选定一个发行版之后,按照指南制作一个 可启动的 USB 驱动器,进行裸机 Linux 的安装就可以了。

Create a bootable USB screenshot

步骤 2:选择一个 Linux 发行版

Linux 的不同版本被称为“发行版”。因此,实际上并没有一个简单的“安装 Linux”的方法,你需要首先选择你想下载和安装哪一个使用了 Linux 内核的发行版。目前存在超过 600 种活跃的 Linux 发行版,如 Ubuntu、Debian、Kali Linux、OpenSUSE 等。在选择发行版时,有许多因素需要考虑,如:

需要 Linux 经验

如果你是 Linux 新手,可能会首选 Ubuntu。由于其支持健全且易用,Ubuntu 是 Linux 用户的主要起点之一。Ubuntu 提供了桌面版和服务器版供你选择,具体使用哪个版本由你打算如何使用它决定。操作系统需要负责的具体任务可能帮助你确定使用哪个发行版。Arch Linux 对于希望具有高度自定义、自行决定如何配置,但仍然稳定且得到大用户群支持的用户来说是个不错的选择。从这个地方开始可能会更复杂,但可以帮助你更好地理解 Linux 如何工作。

系统要求

如果需要一个资源消耗较少,或者说“轻量级”的发行版,就需要考虑对内存和处理速度需求较低的发行版。Alpine Linux 是一个热门的选择,用户会发现大部分的功能默认关闭或者没有安装,但这个发行版仍有你运行一个容器化应用所需的所有东西。

安全需求

有些 Linux 用户可能有特殊的安全需求需要考虑。Kali Linux 是设计用于进行安全任务如渗透测试、安全研究、计算机鉴识和逆向工程的发行版的一个例子。

对商业和企业环境的需求

与普通用户环境相比,商业、企业或者学术环境可能有着各自独特的要求。红帽企业 Linux(RHEL)和 Oracle Linux 提供全天候的全球支持和订阅服务。CentOS 也是一款备受欢迎的企业级发行版,它由社区支持,同时与 RHEL 具有良好的兼容性。

社区支持

具有强大用户社区的发行版往往受到青睐,因为这样的社区可以持续对发行版作出贡献,包括修复问题,增加新的功能,解答使用中的问题等。Ubuntu 就是最受欢迎的发行版之一,而 OpenSUSE 的历史比大多数其他发行版更悠久,且仍然在活跃更新中。随着用户需求和喜好的变化,许多其他的发行版也迅速赢得了用户的喜爱。Linux.org 网站提供了一些资源帮助你了解哪些发行版具有良好的支持或正在日益受到欢迎。

Screenshot of the list of distributions on Linux.org

步骤 3:按照安装方法步骤执行安装

在 Windows 的 Linux 子系统(WSL)中安装 Linux

若在 Windows PC 上安装 Linux,需要执行 Linux 安装命令。

  1. 首先,通过右键点击选择 “ 以管理员身份运行 Run as administrator ” 来打开 PowerShell 或 Windows 命令提示符。
  2. 执行 Linux 安装命令:wsl --install
  3. 然后,重启你的电脑。

WSL Linux Install List Command screenshot

Linux 安装命令的选项

默认情况下,安装命令会选择 Ubuntu 的 Linux 发行版。你可以查看微软商店中的其它可用发行版,方法是输入命令:wsl -l -o 。如需安装 Ubuntu 之外的其它发行版,在安装命令后加上 -d 参数,然后输入你想安装的发行版的名称:

wsl --install -d <发行版名称>

若你想安装的发行版不在微软商店中,你可参照 WSL 文档,学习如何 导入 你想与 WSL 一起使用的任何 Linux 发行版。

若想获取更多关于如何使用 VS Code、Git、Database、Docker、GUI apps、GPU 加速、NodesJS、USB 设备、挂载磁盘、创建自定义发行版、管理磁盘空间、为企业业务设置 WSL 的信息,你可以查阅 WSL 的文档

在云端创建 Linux 虚拟机

若想在 Azure 云上创建由 Linux 支持的虚拟机(VM),你需要登录 Azure Portal,并选择 “ 创建虚拟机 Create a Virtual Machine ” 服务。然后,按照指示完成用户名、项目、实例、SSH 密钥、端口设置,并复制 IP 地址。

Azure 提供了多种在云上创建 Linux VM 的选项。你可以选择喜欢的方法创建 Linux VM,快速指南选择方法如下:

如果你还没有 Azure 订阅账户,可以在开始之前创建一个 免费账户。如果这是你第一次在 Azure 上创建 Linux VM,你可以学习更多 有关 VM 的知识,或者查看在线培训课程:在 Azure 上创建 Linux 虚拟机

Select Linux VM size on Azure screenshot

使用虚拟机管理程序在本地创建 Linux 虚拟机

要在你的本地机器上使用虚拟机管理程序创建 Linux 虚拟机,你可以选择使用:

首先,你需要根据你所选择的管理程序检查硬件需求。在管理程序启用或安装后,你需要确定你想要安装的操作系统类型及其安装源(一般为 .iso 或 .vhdx 文件)。给虚拟机命名,选择文件存储的目录,设置分配给虚拟机的内存和虚拟硬盘大小(通常可以在固定或动态分配的硬盘空间中选择)。由于显示驱动和其他硬件依赖关系,有时候整合 Linux 虚拟机可能比较棘手,但大部分的管理程序都有活跃的用户社区,可以提供必要的帮助。如果你希望你的虚拟机能够连接到网络,可能还需要设置一个虚拟网络。

如果你刚接触管理程序,想要了解更多的话,可以尝试免费的在线课程:配置和管理 Hyper-V 虚拟机

Hyper-V install screenshot

创建可引导的 USB 驱动器以安装裸机 Linux

如果你需要裸机的 Linux,不论是在设备上单独运行某个发行版,还是在该发行版和 Windows 之间进行双启动,皆可以按照以下步骤进行:

  1. 下载你所选的 Linux 发行版的镜像文件,一般是 ISO 文件,例如,你可以在 Ubuntu 桌面版下载 页面下载最新版的 Ubuntu 镜像。有些 Linux 发行版可能在下载前需要你验证镜像签名。
  2. 创建一个可引导的 USB 驱动器。你通常需要一个至少有 16GB 空间的 USB 驱动器。同样,你也需要一个可以创建引导驱动器的软件,例如 balenaEtcher、Rufus、UNetbootin 等。通常情况下,你选择的 Linux 发行版的下载页面会推荐使用哪种引导盘创建软件。
  3. 从 USB 驱动器启动你的设备。在设备重启时,你需要进入启动菜单,这通常通过在启动期间按下 F12 键来实现。然后你可以选择安装包含有你的 Linux 发行版本 ISO 文件的 USB 驱动器。
  4. 选择安装选项。通常,你的 Linux 发行版的安装器会包括一系列安装步骤,这些步骤中会包含是否包括某些特性、第三方软件包等的选项。你还可能需要在该 Linux 发行版会是唯一操作系统的情况下选择是否对磁盘进行清除,或者如果你计划运行多个操作系统,你可能需要使用一个分区。你也可能会被询问是否希望启用加密。
  5. 最后,与任何 Linux 安装一样,你需要创建一个用户名和密码。

Ubuntu install screenshot

步骤 4:Linux 安装成功后需要进行的操作

在你成功安装 Linux 发行版后,还需要进行以下几个重要的步骤:

  1. 首先,熟悉你选择的 Linux 发行版所使用的首选包管理器。Linux 通过包管理器来下载和更新你打算使用的所有软件。例如,Ubuntu 就使用了 Advanced Packaging Tool(APT)。
  2. 进一步,利用你的发行版的包管理器进行发行版的更新和升级。稳定的 Linux 发行版中的软件包往往已经过时,因此我们建议你定期更新你的系统。同时,你可能希望进行升级操作,它会更新你已经安装的所有包文件的版本。如你使用的是 Ubuntu,那么你可以运行命令:sudo apt update && sudo apt upgrade
  3. 除此之外,探索 Microsoft 提供的 Linux 资源 也非常重要,例如针对 Linux 的 Microsoft 工具(如 Visual Studio Code、.NET 和 PowerShell),Learn 目录中可供学习的免费 Linux 相关课程,以及关于事件、新闻和 Linux 组织与 Microsoft 之间的持续伙伴关系的信息,包括 Microsoft 支持的 Mariner 发行版。

(题图:MJ/36b362bf-a6c5-4e60-b279-65b67e157872/)


via: https://learn.microsoft.com/en-us/linux/install

作者:mattwojo 译者:ChatGPT 校对:wxy

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

一份让你深入体验最新 Linux 内核编译过程的实操指南。

出于各种原因,自行编译 Linux 内核可能引起你的兴趣。这些原因可能包括但不限于:

  • 测试一个比你目前的 Linux 发行版更新的内核版本
  • 采用一组不同的配置选项、驱动来构建内核
  • 学习者的好奇心 ?

此指南将一步步指导你如何亲自编译 Linux 内核,包括你该运行哪些命令,为什么运行这些命令以及这些命令的执行效果。本文篇幅较长,所以请做好准备!

? 诸如 Ubuntu 这样的发行版提供了更简单地安装主线 Linux 内核的方式。但本教程目标是从源码手动完成所有工作。此教程需要你付出时间、耐心以及丰富的 Linux 命令行使用经验。本文更注重亲身实践的体验。不管怎么说,我仍建议你在虚拟机或备用系统中尝试此冒险,而非在你的主系统上进行。

前置准备

在软件领域,构建任何事物都有两个基本要求:

  1. 源代码
  2. 构建依赖

因此,作为预备环节,我们需要下载 Linux 内核的源码压缩包,并安装一些能让我们成功构建 Linux 内核的依赖项。

Linux 版本导览

在任何时刻,Freax Linux 内核都有四种“版本”。

Linux 的这些 “版本”,按照开发流程的顺序是:

  1. linux-next 树: 所有准备合并到 Linux 代码库的代码首先被合并到 linux-next 树。它代表的是 Linux 内核最新也是“最不稳定”的状态。大多数 Linux 内核开发者和测试人员使用这个来提高代码质量,为 Linus Torvalds 的后续提取做准备。请谨慎使用!
  2. 发布候选版(RC) / 主线版: Linus 从 linux-next 树抽取代码并创建一个初始发布版本。这个初始发布版本的测试版称为 RC( 发布候选 Release Candidate )版本。一旦 RC 版本发布,Linus 只会接受对它的错误修复和性能退化相关的补丁。基础这些反馈,Linus 会每周发布一个 RC 内核,直到他对代码感到满意。RC 发行版本的标识是 -rc 后缀,后面跟一个数字。
  3. 稳定版: 当 Linus 觉得最新的 RC 版本已稳定时,他会发布最终的“公开”版本。稳定发布版将会维护几周时间。像 Arch Linux 和 Fedora Linux 这样的前沿 Linux 发行版会使用此类版本。我建议你在试用 linux-next 或任何 RC 版本之前,先试一试此版本。
  4. LTS 版本: 每年最后一个稳定版将会再维护 几年。这通常是一个较旧的版本,但它会 会积极地维护并提供安全修复。Debian 的稳定版本会使用 Linux 内核的 LTS 版版本。

若想了解更多此方面的知识,可参阅 官方文档

本文将以当前可用的最新稳定版为例,编写此文时的 Linux 内核版本是 6.5.5

系统准备

由于 Linux 内核使用 C 语言编写,编译 Linux 内核至少需要一个 C 编译器。你的计算机上可能还需要其他一些依赖项,现在是安装它们的时候了。

? 这个指南主要聚焦于使用 GNU C 编译器(GCC)来编译 Linux 内核。但在未来的文章中(可能会深入介绍 Rust 的支持),我可能会介绍使用 LLVM 的 Clang 编译器作为 GCC 的替代品。

不过,请注意,MSVC 并不适用。尽管如此,我仍期待有微软的员工为此发送修补程序集。我在瞎想啥?

对于 Arch Linux 以及其衍生版本的用户,安装命令如下:

sudo pacman -S base-devel bc coreutils cpio gettext initramfs kmod libelf ncurses pahole perl python rsync tar xz

对于 Debian 以及其衍生版本的用户,安装命令如下:

sudo apt install bc binutils bison dwarves flex gcc git gnupg2 gzip libelf-dev libncurses5-dev libssl-dev make openssl pahole perl-base rsync tar xz-utils

对于 Fedora 以及其衍生版本的用户,安装命令如下:

sudo dnf install binutils ncurses-devel \
    /usr/include/{libelf.h,openssl/pkcs7.h} \
    /usr/bin/{bc,bison,flex,gcc,git,gpg2,gzip,make,openssl,pahole,perl,rsync,tar,xz,zstd}

下载 Linux 内核源码

请访问 kernel.org,在页面中寻找第一个 稳定 Stable 版本。你不会找不到它,因为它是最显眼的黄色方框哦 ?

点击访问 kernel.org

通过点击黄色的方框,你就可以下载 Tar 文件。同时,也别忘了下载相匹配的 PGP 签名文件,稍后我们需要用到它来验证 Tar 文件。它的扩展名为 .tar.sign

校验 Tar 文件的完整性

你如何知道刚下载的 Tar 文件是否被损坏?对于个人来说,一个损坏的 Tar 文件只会浪费你的宝贵时间,如果你是在为一个组织工作,那么可能会危及到组织的安全(这时你可能还有更大的问题需要担忧,但我们并不想让所有人都产生创伤后应激障碍!)。

为了验证我们的 Tar 文件的完整性,我们需要先解压它。目前,它是使用 XZ 压缩算法压缩的。因此,我将使用 unxz 工具(其实就是 xz --decompress 的别名)来解压 .tar.xz 格式的压缩文件。

unxz --keep linux-*.tar.xz

解压完成后,我们需要获取 Linus Torvalds 和 Greg KH 使用的 GPG 公开密钥。这些密钥用于对 Tar 文件进行签名。

gpg2 --locate-keys [email protected] [email protected]

你应该可以得到一个与我在我的电脑上看到的类似的结果:

$ gpg2 --locate-keys [email protected] [email protected]
gpg: /home/pratham/.gnupg/trustdb.gpg: trustdb created
gpg: key 38DBBDC86092693E: public key "Greg Kroah-Hartman <[email protected]>" imported
gpg: Total number processed: 1
gpg:               imported: 1
gpg: key 79BE3E4300411886: public key "Linus Torvalds <[email protected]>" imported
gpg: Total number processed: 1
gpg:               imported: 1
pub   rsa4096 2011-09-23 [SC]
      647F28654894E3BD457199BE38DBBDC86092693E
uid           [ unknown] Greg Kroah-Hartman <[email protected]>
sub   rsa4096 2011-09-23 [E]

pub   rsa2048 2011-09-20 [SC]
      ABAF11C65A2970B130ABE3C479BE3E4300411886
uid           [ unknown] Linus Torvalds <[email protected]>
sub   rsa2048 2011-09-20 [E]

在导入 Greg 和 Linus 的密钥后,我们可以使用 --verify 标志来验证 Tar 的完整性,操作如下:

gpg2 --verify linux-*.tar.sign

如果验证成功,你应该会看到如下的输出信息:

$ gpg2 --verify linux-*.tar.sign
gpg: assuming signed data in 'linux-6.5.5.tar'
gpg: Signature made Saturday 23 September 2023 02:46:13 PM IST
gpg:                using RSA key 647F28654894E3BD457199BE38DBBDC86092693E
gpg: Good signature from "Greg Kroah-Hartman <[email protected]>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 647F 2865 4894 E3BD 4571  99BE 38DB BDC8 6092 693E

务必查看是否存在 gpg: Good signature 的提示,然后再继续!

? 你可以忽略以下警告:WARNING: This key is not certified with a trusted signature! There is no indication that the signature belongs to the owner.

我们已根据 Linus 和 Greg 的邮件地址获取了公开密钥,并无需对此警告感到担忧。

解压 Tar 文件

如果你顺利的进行到这里,意味着你的 Tar 文件完整性检查已经成功完成。接下来,我们将从 Tar 文件中解压出 Linux 内核的源码。

The "TAR" xkcd comic: https://xkcd.com/1168/

这个步骤十分简单,只需对 Tar 文件执行 tar -xf 命令,如下:

tar -xf linux-*.tar

在这里,-x 选项表示解压,-f 选项则用来告诉 Tar 文件的文件名。

这个解压过程可能需要几分钟时间,你可以先放松,耐心等待一下。

配置 Linux 内核

Linux 内核的构建过程会查找 .config 文件。顾名思义,这是一个配置文件,用于指定 Linux 内核的所有可能的配置选项。这是必需的文件。

获取 Linux 内核的 .config 文件有两种方式:

  1. 使用你的 Linux 发行版的配置作为基础(推荐做法
  2. 使用默认的,通用的配置
? 也有第三种方法,也就是从零开始,手动配置每一个选项,但注意,这需要配置超过 12,000 个选项。并不推荐这种方式,因为手动配置所有选项将花费大量的时间,并且你还需要理解每个启用和禁用选项的含义。

使用发行版提供的配置

使用你的 Linux 发行版提供的配置是一个安全的选择。 如果你只是跟随这个指南测试一个不是你的发行版提供的新内核,那么这就是推荐的方式。

你的 Linux 发行版的 Linux 内核配置文件会在以下两个位置之一:

  • 大多数 Linux 发行版,如 Debian 和 Fedora 及其衍生版,将会把它存在 /boot/config-$(uname -r)
  • 一些 Linux 发行版,比如 Arch Linux 将它整合在了 Linux 内核中。所以,可以在 /proc/config.gz 找到。
? 如果两者都有,建议使用 /proc/config.gz。这是因为它在只读文件系统中,所以是未被篡改的。

进入含有已经解压出的 Tar 文件的目录。

cd linux-*/

接着,复制你的 Linux 发行版的配置文件:

### Debian 和 Fedora 及其衍生版:
$ cp /boot/config-"$(uname -r)" .config

### Arch Linux 及其衍生版:
$ zcat /proc/config.gz > .config
更新配置文件

一旦完成这些步骤,接下来就需要“更新”配置文件了。因为你的发行版提供的配置很可能比你正在构建的 Linux 内核版本要旧。

? 这同样适用于像 Arch Linux 和 Fedora 这样前沿的 Linux 发行版。 它们并不会因为有新版本可用就立刻发布更新。他们会进行一些质量控制工作,这必然会花费些时间。因此,即便是你的发行版提供的最新内核,相较于你在 kernel.org 上获取的版本也会滞后几个小版本。

要更新一个已有的 .config 文件,我们使用 make 命令搭配 olddefconfig 参数。简单解释一下,这个命令的意思是使用 旧的、默认的、配置

这将使用“旧的配置文件”(当前保存为 .config,这是你发行版配置的一份直接副本),并检查从上一版本以来 Linux 代码库中新加的任何配置选项。如果找到任何新的、未配置 的选项,该选项的默认配置值会被使用,并会对 .config 文件进行更新。

原来的 .config 文件将被重命名为 .config.old 进行备份,并将新的更改写入至 .config 文件。

make olddefconfig

以下是我机器上的输出:

$ file .config
.config: Linux make config build file, ASCII text

$ make olddefconfig
    HOSTCC  scripts/basic/fixdep
    HOSTCC  scripts/kconfig/conf.o
    HOSTCC  scripts/kconfig/confdata.o
    HOSTCC  scripts/kconfig/expr.o
    LEX     scripts/kconfig/lexer.lex.c
    YACC    scripts/kconfig/parser.tab.[ch]
    HOSTCC  scripts/kconfig/lexer.lex.o
    HOSTCC  scripts/kconfig/menu.o
    HOSTCC  scripts/kconfig/parser.tab.o
    HOSTCC  scripts/kconfig/preprocess.o
    HOSTCC  scripts/kconfig/symbol.o
    HOSTCC  scripts/kconfig/util.o
    HOSTLD  scripts/kconfig/conf
.config:8593:warning: symbol value 'm' invalid for USB_FOTG210_HCD
.config:8859:warning: symbol value 'm' invalid for USB_FOTG210_UDC
#
# configuration written to .config
#
针对 Debian 及其衍生版用户

Debian 及其衍生版为内核模块使用一个签名证书。默认情况下,你的计算机并不包含这个证书。

我推荐关闭启用模块签名的选项。具体如下所示:

./scripts/config --file .config --set-str SYSTEM_TRUSTED_KEYS ''
./scripts/config --file .config --set-str SYSTEM_REVOCATION_KEYS ''

如果你不这么做,在后面你进行 Linux 内核构建时,可能会导致构建失败。要注意这点。

使用自定义配置

如果你出于学习内核开发的目的学习如何构建 Linux 内核,那你应该这样做。

? 请注意,偏离你的 Linux 发行版的配置可能无法在实体硬件上“正常”工作。问题可能是特定硬件无法工作、Linux 内核无法启动等。

因此,我们只建议在虚拟机中使用。

你可以通过查看 make help 的输出 来查看 所有 可用的选项,但我们主要关注三个 make 目标:

  • defconfig: 默认配置。
  • allmodconfig: 根据当前系统状态,尽可能地把项目构建为可加载模块(而非内建)。
  • tinyconfig: 极简的 Linux 内核。

由于 tinyconfig 目标只会构建少数项目,构建时间将会缩短。我个人选择它的原因主要有:

  1. 检查我在代码/工具链中做的修改是否正确,以及代码是否可以编译。
  2. 在虚拟机中只进行少数选项的测试。

? 在为 ARM 或 RISC-V 机器构建 Linux 内核时,你可能需要 DTB(设备树的二进制文件)。使用 tinyconfig 目标将不会启用构建 DTB 的选项,你的内核很可能无法启动。

当然,你可以用 QEMU 在没有任何 DTB 的情况下启动 Linux 内核。但这篇文章并不会聚焦在此。或许你可以通过评论,让我在之后的时间里覆盖这个话题 ?

除非你确切地知道自己在做什么,否则你应当使用 defconfig 目标。 以下是我在我的电脑上运行的效果:

$ make defconfig
    HOSTCC  scripts/basic/fixdep
    HOSTCC  scripts/kconfig/conf.o
    HOSTCC  scripts/kconfig/confdata.o
    HOSTCC  scripts/kconfig/expr.o
    LEX     scripts/kconfig/lexer.lex.c
    YACC    scripts/kconfig/parser.tab.[ch]
    HOSTCC  scripts/kconfig/lexer.lex.o
    HOSTCC  scripts/kconfig/menu.o
    HOSTCC  scripts/kconfig/parser.tab.o
    HOSTCC  scripts/kconfig/preprocess.o
    HOSTCC  scripts/kconfig/symbol.o
    HOSTCC  scripts/kconfig/util.o
    HOSTLD  scripts/kconfig/conf
*** Default configuration is based on 'defconfig'
#
# configuration written to .config
#

修改配置

无论你是使用 Linux 发行版的配置并更新它,还是使用 defconfig 目标创建新的 .config 文件,你都可能希望熟悉如何修改这个配置文件。最可靠的修改方式是使用 menuconfignconfig 目标。

这两个目标的功能是相同的,只不过提供给你的界面有所不同。这是这两者间唯一的区别。我个人更偏向于使用 menuconfig 目标,但近来我发现 nconfig 在搜索选项时似乎更具直观性,所以我逐渐转向使用它。

首先,带着 menuconfig 目标运行 make 命令:

$ make menuconfig
    HOSTCC  scripts/kconfig/mconf.o
    HOSTCC  scripts/kconfig/lxdialog/checklist.o
    HOSTCC  scripts/kconfig/lxdialog/inputbox.o
    HOSTCC  scripts/kconfig/lxdialog/menubox.o
    HOSTCC  scripts/kconfig/lxdialog/textbox.o
    HOSTCC  scripts/kconfig/lxdialog/util.o
    HOSTCC  scripts/kconfig/lxdialog/yesno.o
    HOSTLD  scripts/kconfig/mconf

在此界面,你可以根据各选项的类型来进行切换操作。

有两类可切换选项:

  • 布尔状态选项:这类选项只能关闭([ ])或作为内建组件开启([*])。
  • 三态选项:这类选项可以关闭(< >)、内建(<*>),或作为可加载模块(<M>)进行构建。

想要了解更多关于某个选项的信息,使用上/下箭头键导航至该选项,然后按 <TAB> 键,直至底部的 < Help > 选项被选中,然后按回车键进行选择。此时就会显示关于该配置选项的帮助信息。

在修改选项时请务必谨慎。

当你满意配置后,按 <TAB> 键直到底部的 < Save > 选项被选中。然后按回车键进行选择。然后再次按回车键(记住,此时不要更改文件名),就能将更新后的配置保存到 .config 文件中。

构建 Linux 内核

构建 Linux 内核实际上十分简单。然而,在开始构建之前,让我们为自定义内核构建添加一个标签。我将使用字符串 -pratham 作为标签,并利用 LOCALVERSION 变量来实施。你可以使用以下命令实现配置:

./scripts/config --file .config --set-str LOCALVERSION "-pratham"

这一命令将 .config 文件中的 CONFIG_LOCALVERSION 配置选项设为我在结尾指定的字符串,即 -pratham。当然,你也不必非得使用我所用的名字哦 ?

LOCALVERSION 选项可用于设置一个“本地”版本,它会被附加到通常的 x.y.z 版本方案之后,并在你运行 uname -r 命令时一并显示。

由于我正在构建的是 6.5.5 版本内核,而 LOCALVERSION 字符串被设为 -pratham,因此,对我来说,最后的版本名将会是 6.5.5-pratham。这么做的目的是确保我所构建的自定义内核不会与发行版所提供的内核产生冲突。

接下来,我们来真正地构建内核。可以用以下的命令完成此步骤:

make -j$(nproc) 2>&1 | tee log

这对大部分(99%)用户来说已经足够了。

其中的 -j 选项用于指定并行编译任务的数量。而 nproc 命令用于返回可用处理单位(包括线程)的数量。因此,-j$(nproc) 其实意味着“使用我拥有的 CPU 线程数相同数量的并行编译任务”。

2>&1 会将 STDOUT 和 STDIN 重定向到相同的文件描述符,并通过管道传输给 tee 命令,这会将输出存储在一个名为 log 的文件,并且在控制台打印出完全相同的文本。如果你在构建时遇到错误,并希望回顾日志来检查出了什么问题,这将会十分有用。遇到那种情况,你只需要简单执行 grep Error log 命令就能找到线索。

自定义 make 目标

在 Linux 内核的源文件夹中,make 命令有一些自定义的目标可供执行各种操作。这些主要作为开发者的参考。如果你的唯一目标是安装一个比你当前发行版更新的 Linux 内核,那么你完全可以跳过这部分内容 ?

构建目标

作为一名开发者,你可能只想构建 Linux 内核,或者只想构建模块,或者只想构建设备树二进制(DTB)。在这种情况下,你可以指定一个构建目标,然后 make 命令只会构建指定的项目,而不会构建其他的。

以下是一些构建目标:

  • vmlinux:纯粹的 Linux 内核。
  • modules:可加载模块。
  • dtbs:设备树二进制文件(主要用于 ARM 和 RISC-V 架构)。
  • all:构建所有被标记了星号 * 的项目(从 make help 的输出中可以查看)。

通常情况下,你并不需要指定构建目标,因为它们都已经在构建列表中。所列出的目标是在你只想要测试某一个构建目标,而不是其他目标时的情况。

依据你的 计算机架构,构建完成的 Linux 内核镜像(存放在 /boot 目录)的名称会有所不同。

对于 x86_64,Linux 内核的默认镜像名称是 bzImage。因此,如果你只需要构建引导所需的 Linux 内核,你可以像下面这样设定 bzImage 为目标:

### 对于 x86_64
$ make bzImage

“那么如何在我的架构上找到用来调用 make 的目标名称呢?”

有两种方法。要么你可以执行 make help 之后查找在 Architecture specific targets 下,第一个前面带有星号 * 的选项。

或者,如果你希望自动完成,你可以利用 image_name 目标得到镜像的完全路径(相对路径),选择性地添加 -s 标志来获得有用的输出。

以下是我拥有的三台电脑的输出,一台是 x86_64,另一台是 AArch64,还有一台是 riscv

### x86_64
$ make -s image_name
arch/x86/boot/bzImage

### AArch64
$ make -s image_name
arch/arm64/boot/Image.gz

### RISC-V
$ make -s image_name
arch/riscv/boot/Image.gz

现在,要只构建 Linux 内核镜像,你可以这样进行:

make $(make -s image_name | awk -F '/' '{print $4}')
清理目标

如果你需要清理构建产生的文件,你可以用以下的目标来实现你的需求:

  • clean:除了 .config 文件外,删除几乎所有其他内容。
  • mrproper:执行了 make clean 的所有操作外,还会删除 .config 文件。
  • distclean:除了执行 make mrproper 的所有操作外,还会清理任何补丁文件。

安装

一旦成功编译了 Linux 内核,接下来就是启动安装一些东西的时候了。“一些 东西?” 没错,我们至少构建了两种不同的东西,如果你使用的是 ARM 或 RISC-V 架构,那就有三种。我会在以下内容中详细解释。

? 虽然我将告诉你不同的安装方式,尤其是关于如何改变默认安装路径的方法,但如果你不确定自己在做什么,那么我不建议你这么做! 请慎重考虑,如果你决定走自定义的路线,那你需要自己负责后果。默认设置之所以存在,是因为它们有其特殊的原因 ?

安装内核模块

Linux 内核有部分在系统启动时并非必需的。这些部分被构建为可加载模块,即在需要时才进行加载和卸载。

所以,首先需要安装这些模块。这可以通过 modules_install 目标完成。必须使用 sudo,因为模块会被安装在 /lib/modules/<kernel_release>-<localversion> 这个需要 root 权限的路径下。

这个过程不仅会安装内核模块,还会对其进行签名,所以可能需要一些时间。好消息是你可以通过之前提到的 -j$(nproc) 选项来并行执行安装任务,这样会快一些。?

sudo make modules_install -j$(nproc)

给开发者的提示: 你可以通过设定 INSTALL_MOD_PATH 变量来指定一个不同的路径存放 Linux 模块,而不用默认的 /lib/modules/<kernel_release>-<localversion>,具体如下:

   sudo make modules_install INSTALL_MOD_PATH=<path>
另一个给开发者的提示: 你可以使用 INSTALL_MOD_STRIP 变量来决定是否需要剥离模块的调试符号。如果未设定该变量,调试符号不会被剥离。当设为 1 时,符号信息将会被使用 --strip-debug 选项剥离,随后该选项会传递给 strip(或者在使用 Clang 的时候传递给 llvm-strip)工具。

(可选)安装 Linux 内核头文件

如果你打算使用这个内核来支持树外模块,比如 ZFS 或英伟达 DKMS,或者打算尝试自行编写模块,你可能会需要 Linux 内核提供的头文件。

可以通过以下方式使用 headers_install 目标来安装 Linux 内核头文件:

sudo make headers_install

应使用 sudo 命令,因为这些头文件会被安装到 /usr 目录。同时还会在 /usr 目录内创建子目录 include/linux,然后将头文件安装到 /usr/include/linux 内。

给开发者的提示: 通过设定 INSTALL_HDR_PATH 变量,你可以修改 Linux 内核头文件的安装路径。

安装 DTB(只针对 ARM 和 RISC-V)

如果你使用的是 x86\_64 架构,那么你可以跳过此步骤!

如果你针对 ARM 或者 RISC-V 构建了内核,那么在运行 make 的过程中,设备树的二进制文件可能已经被编译出来了。你可以通过在 arch/<machine_architecture>/boot/dts 目录查找 .dtb 文件来确认这一点。

这里提供了一个快速检查的技巧:

### 对于 AArch32
$ find arch/arm/boot/dts -name "*.dtb" -type f | head -n 1 > /dev/null && echo "DTBs for ARM32 were built"

### 对于 AArch64
$ find arch/arm64/boot/dts -name "*.dtb" -type f | head -n 1 > /dev/null && echo "DTBs for ARM64 were built"

### 对于 RISC-V
$ find arch/riscv/boot/dts -name "*.dtb" -type f | head -n 1 > /dev/null && echo "DTBs for RISC-V were built"

如果你看到出现 DTBs for <arch> were built 的消息,那么你可以开始安装 DTB。这可以通过 dtbs_install 目标来实现。

需要使用 sudo,因为它们会被安装在 /boot/dtb-<kernel_release>-<localversion> 中,而这个目录是由 root 所拥有的。

sudo make dtbs_install
给开发者的提示: 就像安装模块一样,你可以使用 INSTALL_DTBS_PATH 变量指定一个自定义的路径来安装设备树二进制文件。

安装 Linux 内核

最后,我们来安装 Linux 内核本身!这可以通过 install 目标来完成,就像这样:

sudo make install

在这里必须使用 sudo,因为 Linux 内核将被安装在 /boot 目录,而这个目录不允许普通用户写入。

? 一般来讲,install 目标也会更新引导加载程序,但是如果它没有成功,那可能是不支持你使用的引导加载程序。如果你没有使用 GRUB 作为你的引导加载程序,请一定要阅读你引导加载程序的使用手册 ?
给开发者的提示: 并不奇怪,INSTALL_PATH 变量被用来设定 Linux 内核的安装位置,而非默认的 /boot 目录。

针对 Arch Linux 用户的说明

如果你尝试执行了 make install 命令,可能已经注意到产生了错误。错误如下:

$ sudo make install
    INSTALL /boot
Cannot find LILO.

要在 Arch Linux 上实际完成 Linux 内核的安装,我们需要手动复制 Linux 内核镜像文件。别担心,如果你使用的是 Arch Linux,手动操作应该是家常便饭了。( ͡° ͜ʖ ͡°)

可以使用以下命令完成这个步骤:

sudo install -Dm644 "$(make -s image_name)" /boot/vmlinuz-<kernel_release>-<localversion>

因为我编译的是 6.5.5 版本的内核,所以我将会执行下面这条命令,你可以根据你的实际情况进行适当调整:

sudo install -Dm644 "$(make -s image_name)" /boot/vmlinuz-6.5.5-pratham

虽然不是必须的,但最好复制一份名为 System.map 的文件。既然你已经在操作了,一并也复制了 .config 文件吧 ?

sudo cp -vf System.map /boot/System.map-<kernel_release>-<localversion>
sudo cp -vf .config /boot/config-<kernel_release>-<localversion>
生成初始 RAM 磁盘

当你安装 Arch Linux 时,可能已经了解过 mkinitcpio 这个工具。现在,我们将使用它来创建初始的 RAM 磁盘。

首先,我们需要创建一个预设文件。向 /etc/mkinitcpio.d/linux-<localversion>.preset 文件中添加以下内容,根据实际需要来替换 <kernel_release><localversion>

ALL_config="/etc/mkinitcpio.conf"
ALL_kver="/boot/vmlinuz-<kernel_release>-<localversion>"

PRESETS=('default' 'fallback')

default_image="/boot/initramfs-<kernel_release>-<localversion>.img"
fallback_options="-S autodetect"

配置完成后,执行下面的命令来生成初始 RAM 磁盘:

sudo mkinitcpio -p linux-<localversion>

我自己的电脑上得到的输出如下,你的结果应该会类似!

$ sudo mkinitcpio -p linux-pratham
==> Building image from preset: /etc/mkinitcpio.d/linux-pratham.preset: 'default'
==> Using configuration file: '/etc/mkinitcpio.conf'
    -> -k /boot/vmlinuz-6.5.5-pratham -c /etc/mkinitcpio.conf -g /boot/initramfs-6.5.5-pratham.img
==> Starting build: '6.5.5-pratham'
    -> Running build hook: [base]
    -> Running build hook: [udev]
    -> Running build hook: [autodetect]
    -> Running build hook: [modconf]
    -> Running build hook: [kms]
    -> Running build hook: [keyboard]
==> WARNING: Possibly missing firmware for module: 'xhci_pci'
    -> Running build hook: [keymap]
    -> Running build hook: [consolefont]
==> WARNING: consolefont: no font found in configuration
    -> Running build hook: [block]
    -> Running build hook: [filesystems]
    -> Running build hook: [fsck]
==> Generating module dependencies
==> Creating zstd-compressed initcpio image: '/boot/initramfs-6.5.5-pratham.img'
==> Image generation successful
==> Building image from preset: /etc/mkinitcpio.d/linux-pratham.preset: 'fallback'
==> Using configuration file: '/etc/mkinitcpio.conf'
==> WARNING: No image or UKI specified. Skipping image 'fallback'

初始 RAM 磁盘已成功生成,现在我们可以进入下一步,更新引导加载器!

更新 GRUB

一旦所有必要的文件已成功复制到其对应的位置,接下来,我们将进行 GRUB 的更新。

使用以下命令对 GRUB 引导加载器进行更新:

sudo grub-mkconfig -o /boot/grub/grub.cfg
? 如果你使用的引导加载器不是 GRUB,请参看 Arch Wiki 中相关的引导加载器文档。

注意,更新 GRUB 并不会直接使新的内核版本设为默认启动选项。在引导时,请在启动菜单中手动选择新的内核版本。

你可以通过选择 Advanced options for Arch Linux 菜单,并在随后的菜单中选择 Arch Linux, with Linux <kernel_release>-<localversion> 来启用新版的 Linux 内核。

重启电脑

恭喜你!你已经完成了获取 Linux 内核源代码、进行配置、构建以及安装等所有步骤。现在只需要通过重启电脑并进入新构建和安装的 Linux 内核,就可以开始享受你的努力成果了。

启动时,请确保从引导加载器中选择正确的 Linux 内核版本。系统启动后,运行 uname -r 命令来确认你正在使用预期的 Linux 内核。

以下是我自己的电脑输出的内容:

$ uname -r
6.5.5-pratham

是时候开始庆祝了! ?

卸载操作

? 提示:在删除当前正在使用的内核版本之前,你应该首先切换至较旧的内核版本。

可能你的 Linux 发行版所使用的 Linux 内核版本就是你手动编译的版本,或者你自行编译了新的内核并注意到应卸载旧的内核以节省空间,于是你开始想如何才能卸载。当然,虽然我们无法简单地运行 make uninstall 命令,但这并不代表没有其他的方法!

我们清楚各个文件的安装位置,因此删除它们相对简单。

### 删除内核模块
$ rm -rf /lib/modules/<kernel_release>-<localversion>

### 删除设备树二进制文件
$ rm -rf /boot/dtb-<kernel_release>-<localversion>

### 删除 Linux 内核本身
$ rm -vf /boot/{config,System,vmlinuz}-<kernel_release>-<localversion>

总结

这个过程不是一次简单的旅程,是吧?但是现在,我们终于抵达了终点。我们一起学习了手动编译 Linux 内核的全过程,包括安装依赖、获取和验证源码、解压源码、配置 Linux 内核、构建内核以及安装内核。

如果你喜欢这个详细的步骤指南,请给我留言反馈。如果在操作过程中遇到问题,也欢迎提出,让我知道!

(题图:MJ/853481c5-87e3-42aa-8ace-e9ddfa232f75)


via: https://itsfoss.com/compile-linux-kernel/

作者:Pratham Patel 选题:lujun9972 译者:ChatGPT 校对:wxy

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

Linux 基金会是世界上最大的“软件公司”

Linux 基金会执行董事 Jim Zemlin 在上海举办的 KubeCon 上发表演讲,他开玩笑地说,“Linux 基金会很可能是世界上最大的软件公司”。他指出,如果把软件开发人员的平均工资(假定全球平均工资为 4 万美元)乘以为基金会做出贡献的开发人员人数,工资总额将达到约 260 亿美元,超过微软 240 亿美元的研发工资总额。当然,为 Linux 基金会项目工作的开发人员实际上都不为 Linux 基金会工作,因此这一统计数字并不能当真。

消息来源:The Register
老王点评:说 Linux 基金会是个企业其实也没错,只是这个企业经营模式不太一样罢了。

人工智能语言模型在无损压缩方面可超越 PNG 和 FLAC

研究人员详细介绍了他们的发现:名为 Chinchilla 70B 的 DeepMind 大型语言模型(LLM)可以将 ImageNet 图像数据库中的图像片段无损压缩至原始大小的 43.4%,超过了将相同数据压缩至 58.5% 的 PNG 算法。在音频方面,Chinchilla 可将 LibriSpeech 音频数据集的样本压缩至原始大小的 16.4%,超过 FLAC 压缩的 30.3%。结果表明,尽管 Chinchilla 70B 主要是为处理文本而训练的,但它在压缩其他类型的数据时也出奇地有效,往往比专门为这些任务设计的算法更好。

消息来源:Ars Technica
老王点评:所以,以后图片和音频会有一种 AIC 格式么?

人工智能驱动的必应聊天回复中被注入了恶意广告

微软于 2023 年 2 月推出了由 OpenAI 的 GPT-4 引擎驱动的必应聊天工具。今年 3 月,微软开始在必应聊天对话中注入广告,以从这一新平台中创收。研究人员发现,当你询问必应聊天如何下载 “Advanced IP Scanner”时,它会在聊天中显示一个下载链接。但是,当你将鼠标悬停在聊天中的下划线链接上时,必应聊天可能会先显示广告,然后再显示合法的下载链接。在这种情况下,赞助链接就是推送恶意软件的恶意广告。这种类似于对话的互动会让人工智能提供的 URL 充满错位的权威感和可信度,因此搜索平台中现有的恶意广告问题因人工智能助手的引入而被放大。

消息来源:Bleeping Computer
老王点评:投放恶意广告并不稀奇,只是这种对话式的场景,容易让人放松警惕。

有一个软件用了 32 年版本号才变成 6.6

2023 年 9 月 17 日,Linus Torvalds 发布了 Linux 6.6-rc2,他写道,“我认为,6.6-rc2 最值得注意的一点是,它距 0.01 版本发布整整 32 年。如果你是计算机专业人士,这就是一个整数。”不过,除了这个日期之外,这个版本没有什么特别的,“到处都有随机修复,但没有一个看起来特别奇怪”。

消息来源:Phoronix
老王点评:之前我曾经觉得 Linux 内核的版本号变得太快了,但要是放到 32 年这个跨度上来说,倒也不算快,虽然近些年快的有点晕车。

看起来 ChatGPT 不会抢走你的编程工作

《连线》发布了一篇评论文章说,在功能开发受阻的情况下,解雇工程师并投入人工智能很可能会导致灾难,随后很快就会重新雇佣这些工程师。更合理的做法是,大型语言模型可以取代工程设计中的一些枯燥工作。如果提示词正确,它们可以提供自动完成建议或数据排序方法。计算的历史已经证明,试图减少开发人员的存在或简化他们的角色,最终只会增加工作的复杂性,使这些工作人员变得更加必要。如果说 ChatGPT 能够消除编码工作的枯燥乏味的话,那就像编译器终结了二进制工作的繁琐一样,它能让开发人员更轻松地专注于构建其作品的实际架构。

消息来源:连线
老王点评:每一个新的技术进步都淘汰了一些不能跟上的人,并创造了更多新的工作机会。

AI 专家认为构建出真正反映人类集体自我的 AI 是可能的

DeepMind 联合创始人 Mustafa Suleyman 在 2022 年创办了 AI 公司 Inflection, 获得了 15 亿美元的投资。他认为构建出真正反映人类集体自我的 AI 是可能的,能代表人类做出更好的权衡、更一致且更公平。他长期以来一直坚信对话是未来的界面,你将与 AI 进行交流,而不是点击按钮和打字。他认为 AI 的第一阶段是分类,深度学习表明可以训练计算机对不同类型的输入数据分类;第二阶段是生成式 AI,即当前大热的 ChatGPT 之类的 AI;第三阶段是交互式 AI:机器人可以通过调用其他软件和其他人来完成你为它们设定的任务。

消息来源:Technology Review
老王点评:虽然结合上一条看起来人类总会有事情做,但是可能最终的结果就是被 AI 养起来,干一些很轻松而 AI 干不了的事情。

回音

  • Unity 道歉,并承诺修改之前公布的定价政策。之前,由于受到死亡威胁,Unity 甚至关闭了两处办公室。

无人注意,新安装的 Ubuntu 23.04 不支持安装 32 位应用

有用户报告,在新安装的 Ubuntu 23.04 上从 Ubuntu 仓库安装的 Steam 客户端是不工作的。在 Ubuntu 23.04 中使用了基于 Flutter 的新安装程序,它在后台使用了 Subiquity,默认情况下并不支持 32 位库。结果就是,尽管 Ubuntu 23.04 用户可以运行 apt 命令或点击软件中心的安装按钮来安装,但由于 Steam 所依赖的 32 位库无法被调入,因此,对大多数用户来说 Steam 无法正常运行。问题是,4 月份发布的 Ubuntu 23.04 现在才被发现这个问题。原因可能是,一方面大部分用户是从之前版本升级而来,带有 32 位库支持,也有很多人是直接从 Valve 下载了带有 32 位支持的 Linux 版 Steam;另外一方面,短期版的 Ubuntu 用户可能真不多。

消息来源:Omg Ubuntu
老王点评:Ubuntu 开发人员不可能也不应该发现所有问题,但是 Linux 桌面的用户群体,可能真的很少。

研究称 Linux 市场规模每年增长约 20%

根据一家研究机构的报告,2022 年,全球 Linux 操作系统市场规模为 62 亿美元,预计在预测期内将以 18.94% 的年复合增长率增长,到 2028 年将达到 170 亿美元。

消息来源:Benzinga
老王点评:结合上一条,Linux 整体的市场发展是很好,但 Linux 桌面可能会是一直的短板。

安卓 14 仍不能正确计算存储空间利用率

我们通常依靠安卓的存储利用率工具来查找占用存储空间的应用程序和文件,以便在需要时卸载或删除它们。然而有专家发现,谷歌对安卓系统组件占用空间的计算存在缺陷。安卓将系统存储空间计算为除了音频、视频、图片、文档、垃圾和游戏等之外的其他类别所占的空间。也就是说,安卓“系统”不仅仅包括安卓系统文件。

消息来源:Android Police
老王点评:只能说安卓开发人员偷懒了,他们认为就不应该有“偷偷”以其它未分类类别出现的文件。

回音

  • 在 Linus Torvalds 提出 批评 后,Bcachefs 首席开发者继续 表达 了他对 Linux 内核上游进程和开发者互动的不满,表示要休息一段时间。显然,Bcachefs 不会在 Linux 6.6 合并窗口关闭的最后一分钟提交新的拉取请求了。

1/7 的 Linux 内核代码是 AMD GPU 驱动代码

随着开发中的 Linux 6.6 内核增加了对更多即将推出的 Radeon 图形处理器的支持,现在内核中 AMD GPU 驱动代码的行数已超过 500 万行。其中很大一部分是 AMD 在每一代新版本中不断引入的新的自动生成的头文件,这些冗长的头文件就像是 AMD 为其 GPU 创建详尽的公共文档一样。与此同时,整个 Linux 内核源代码树现在大约有 3480 万行,这包括文档、各种树内实用程序/工具、其他辅助工具等。作为对比,英伟达的开源 Nouveau 驱动程序仅有大约 20 万行。

消息来源:Phoronix
老王点评:相比 Linus 曾经对英伟达的愤怒,AMD 倒是大量往内核提交代码,可是这样往内核中“灌水”真的好吗?

ReiserFS 被正式标记为“过时”

ReiserFS 曾是二十多年前 Linux 引入的第一个日志文件系统,在 2006 年前 SUSE Linux 发行版一直将其作为默认文件系统。但自从 ReiserFS 作者 Hans Reiser 因谋杀罪被判刑之后,该文件系统的开发就几乎停滞了。内核开发者去年开始讨论 废弃 ReiserFS 文件系统,并在 Linux 5.18 中将其标记为废弃,openSUSE 也结束了对 ReiserFS 的支持。在 Linux 6.6 中,ReiserFS 不再被标记为“支持”,而是被正式标记为“过时”,将在未来几年来从主线内核中移除。

消息来源:Phoronix
老王点评:很可惜,但更令人遗憾的是,在主要开发者入狱后,因为没有人和公司愿意继续参与一个有污点的人开创的项目,而导致项目消亡。

Visual Studio for Mac:从开源到闭源,到废弃

微软正在停止 Visual Studio for Mac(VS Mac)的开发,将于 2024 年结束支持。VS Mac 是作为 Windows 版 Visual Studio 的 Mac 版本推出的,但该产品的起源不同,其功能也从未接近 Windows 版的同类产品。它主要是一个 .NET 集成开发环境,不支持 C/C++。它始于 2000 年 SharpDevelop,它是一个 C# 的开源集成开发环境。然后它分叉成为 Linux 上的 MonoDevelop,并被 Xamarin 接管成为 Xamarin Studio,在 2016 年随同 Xamarin 被微软收购。微软将其重新命名为 Visual Studio for Mac,并关闭了源代码。随后几年,直到被废弃前,它的开发几乎停滞不前。幸运的是,MonoDevelop 还有一个开源的复刻 DotDevelop 正在持续开发当中。

消息来源:Dev Class
老王点评:微软发现 VS Code 更好时,这种边缘项目自然就废弃了。不知道会不会有一天微软将 Visual Studio 也废弃了,只保留下 VS Code 呢?