Skip to content

Linux 兼容性验证结果与后续完善计划 #64

Description

@necoarc08

背景

我对当前 Amadeus 在 Linux 下的安装、后端、Electron、角色渲染、语音、VAD、本地模型和动态壁纸等路径进行了一轮实机验证。

本轮工作的主要目标不是重新实现一套 Linux runtime,而是确认当前项目已有能力在 Linux 下的实际状态,并逐步将 Linux 的兼容性和维护程度完善到接近当前 Windows / macOS 的水平。

主要关注:

  1. 当前哪些功能已经可以直接在 Linux 下工作;
  2. 哪些问题会阻塞标准安装或正常使用;
  3. 哪些已有能力缺少 Linux CI、依赖 profile 或使用文档;
  4. 哪些问题属于真正的平台边界,需要 Linux-specific implementation;
  5. 在尽量不影响现有 Windows / macOS 路径的前提下建立长期可维护的 Linux 支持。

目前的总体结论是:

Amadeus 的大部分核心路径已经具备较好的跨平台基础。Linux 当前更主要缺少持续集成、依赖配置、文档和正式 qualification,而不是需要进行大规模的平台移植。


验证环境

本轮主要实机环境:

  • Arch Linux
  • Linux Zen kernel
  • Python 3.12 project environment
  • uv
  • Electron
  • Wayland
  • niri
  • NVIDIA RTX 4060 Laptop GPU 8GB

另外对 GNOME Wayland 下的动态壁纸路径进行了实际验证。

需要说明的是:

  • Arch Linux 是本轮主要实机验证环境;
  • 当前结果不能直接代表所有 Linux 发行版;
  • 对发行版相关问题会尽量区分 Linux 通用问题和 rolling-release / 新 toolchain 问题;
  • KDE 等其他桌面环境目前尚未进行实机 qualification;
  • Linux 兼容工作会尽量复用现有跨平台实现,不计划为了 Linux 改变已经正常工作的 Windows / macOS 行为。

当前验证结果

能力 Linux 状态 说明
L1 Core / Backend 通过 locked environment、server import、backend、WebSocket 均正常
Electron build 通过 npm ci / npm run build 正常
Electron desktop 通过 Wayland 实机启动、backend discovery、GUI 渲染正常
Character rendering 通过 SpriteForge / KTX2 / PixiJS 实际显示正常
L2 Voice runtime 部分通过 runtime 可运行,但标准 voice extra 被 AEC dependency 阻塞
L3 CPU VAD 通过 verifier 和实际语音片段检测均正常
GPT-SoVITS CUDA TTS 实验验证通过 Linux + NVIDIA 实机推理成功,但当前 dependency profile 尚未正式覆盖 Linux
Qwen3-ASR CUDA 实验验证通过 Linux + NVIDIA 实机识别成功
GNOME Wayland Wallpaper 实验验证通过 通过兼容的 Web wallpaper host 可正常运行
niri Wallpaper 未 qualification 涉及 layer-shell / interactive overlay 等 compositor-specific 集成
Linux CI 正在补充 第一阶段 Core qualification workflow 已准备

1. L1 Core / Backend

L1 是目前最明确的 Linux 兼容路径。

以下流程已经在 Linux 实机通过:

uv venv .venv --python 3.12
uv sync --locked

环境验证:

uv run --locked --no-sync \
  python tools/verify_python_environment.py --profile cpu

后端可以正常启动:

uv run --locked --no-sync \
  python -m server.app --port 17777

WebSocket handlers、runtime.statuscapability.list 等基础路径均正常。

目前没有发现需要 Linux-specific runtime implementation 的问题。

因此这里的优先工作不是增加新的 Linux Core 实现,而是通过 CI 固化当前已经存在的跨平台能力,避免后续修改产生 Linux regression。


2. Electron / Character Rendering

Electron renderer 可以在 Linux 正常构建:

cd electron
npm ci
npm run build

在 Wayland 实机环境中,Electron desktop 可以正常:

  • 自动发现 .venv/bin/python3
  • 启动 Python backend
  • 建立 WebSocket 连接
  • 渲染主界面
  • 使用主要页面和基础功能

角色渲染链路也已经完成实机验证:

KTX2 assets
    ↓
SpriteForgeAnimator
    ↓
RenderHandler
    ↓
PixiJS
    ↓
Electron renderer
    ↓
visible character

Kurisu 角色可以在 Linux Electron 界面中实际显示并播放动画。

目前没有发现需要单独维护 Linux renderer implementation 的问题。

后续重点是补充 Linux desktop qualification,并在必要时处理真正属于 OS integration 的差异。


3. L2 Voice:AEC dependency 阻塞标准安装

这是目前发现的最明确的 Linux dependency 问题。

在当前 Arch Linux toolchain 下:

uv sync --locked --extra voice

会在:

aec-audio-processing==1.0.1

编译阶段失败。

当前测试环境使用较新的 GCC / Abseil,aec-audio-processing 内置的 WebRTC 代码仍使用旧的 absl::Nullable<T*> API,与当前 Abseil headers 不兼容。

进一步验证发现:

  • PyAudio 可以正常安装;
  • av 可以正常安装;
  • scipy 可以正常安装;
  • soundfile 可以正常安装;
  • voice verifier 可以通过;
  • backend 在缺少 AEC 时可以正常降级为 aec realtime enabled=False
  • 当前 server runtime 未发现对 aec-audio-processing 的直接强制 import。

因此目前需要进一步明确这里的 dependency contract:

AEC 应该作为 L2 Voice 的 mandatory dependency,还是作为 optional capability?

该问题计划单独建立 Issue 处理。

根据最终确定的 dependency contract,再决定是:

  • 保持 mandatory 并解决当前 toolchain compatibility;
  • 将 AEC 拆分为 optional extra;
  • 或采用其他更合适的依赖组织方式。

目前只确认该问题会在本次 Arch / 新 toolchain 环境触发,因此暂不将其描述为所有 Linux 发行版都会遇到的问题。


4. L3 CPU VAD

CPU VAD 已经在 Linux 实机验证。

使用 CPU PyTorch 环境后:

python tools/verify_python_environment.py --profile vad-cpu

可以正常通过。

另外使用实际语音素材进行了 Silero VAD 推理,可以正常检测 speech segments。

因此目前没有发现 L3 本身存在 Linux runtime compatibility 问题。

后续工作主要是逐步补充对应的 Linux dependency / qualification 路径,而不是增加 Linux-specific VAD implementation。


5. L4 NVIDIA CUDA

Linux + NVIDIA 下已经实际完成:

  • GPT-SoVITS CUDA TTS
  • Qwen3-ASR CUDA inference

本轮测试硬件:

NVIDIA RTX 4060 Laptop GPU 8GB

两条实际推理路径均成功。

但这里需要区分:

Linux + NVIDIA runtime 可以工作,并不代表当前 local-cu124 dependency profile 已经正式覆盖 Linux。

当前项目的 cu124 dependency routing 仍主要面向现有 Windows + NVIDIA 路径。

Linux 实机验证中,需要显式安装正确的 CUDA PyTorch build,才能得到实际可用的 CUDA environment。

因此目前更准确的状态是:

Linux NVIDIA runtime 已经实验验证,但尚缺少能够稳定复现该环境的正式 dependency profile。

后续计划单独处理 Linux NVIDIA dependency profile,使:

clean install
    ↓
correct CUDA PyTorch build
    ↓
environment verification
    ↓
local inference

成为可重复的标准流程,而不是依赖手工修正环境。

第一阶段 Linux CI 暂不加入 CUDA qualification。


6. Linux Desktop / Wallpaper

Wallpaper 与 Core Linux compatibility 分开考虑。

它除了 Amadeus 本身的 Web runtime 外,还受到 Linux desktop environment / Wayland compositor 的窗口模型影响,因此不适合简单地用一个统一的 Linux platform branch 处理。

GNOME Wayland

在 GNOME Wayland 环境中,通过兼容的 Web wallpaper host 已经实际验证:

  • Amadeus Web wallpaper 可以加载;
  • 角色动画正常;
  • 动态状态可以更新;
  • voice-triggered subtitle 可以更新。

这至少说明 Amadeus Web wallpaper frontend 本身不存在普遍性的 Linux / Wayland incompatibility。

niri

niri 下目前仍属于实验状态。

现阶段已经确认:

  • Web wallpaper 内容本身可以运行;
  • layer-shell 可以提供真正的 background layer;
  • 普通 Wallpaper Engine Web wallpaper 可以通过对应 host 在 niri 下运行。

但 Amadeus 当前 wallpaper architecture 还涉及额外的透明 interactive overlay。

在 niri 这样的 standalone Wayland compositor 下,这会进一步涉及:

  • layer-shell
  • input handling
  • overlay window semantics
  • compositor-specific window management

目前实验 wrapper 本身也仍存在尚未定位的问题,因此现阶段不能将结果直接归因为 Amadeus runtime bug。

所以:

standalone Wayland compositor 的 wallpaper integration 暂时不作为 Linux Core compatibility 的 blocker。

后续如果继续处理,会优先考虑清晰的平台集成边界,而不是在 Core / renderer 中加入大量针对不同 compositor 的条件分支。


7. Linux CI

第一阶段已经准备新增:

.github/workflows/python-linux.yml

这一阶段的目的不是通过一条 CI workflow 宣布完整 Linux support,而是先为已经确认可工作的 Linux Core 路径建立 regression baseline。

初始 workflow 使用:

  • Ubuntu 24.04
  • Python 3.12.10
  • uv 0.12.8
  • Node.js 22.21.1

覆盖:

  • locked L1 + dev installation
  • ci environment verifier
  • L1 model-less dependency contract
  • Ruff
  • architecture view check
  • platform-safe contract test subset
  • Electron renderer build

第一阶段暂不覆盖:

  • Voice / AEC
  • VAD
  • CUDA
  • GUI runtime
  • Wayland session
  • Wallpaper

这些能力会根据实际 Linux qualification 结果逐步纳入,而不是在第一条 CI 中一次性扩大范围。

对应的第一阶段 PR 保持为独立 CI change,不修改 runtime 和现有平台行为。


后续工作计划

当前 Linux 兼容工作的目标是逐步补齐与现有 Windows / macOS 路径之间的差距,而不是额外建立一套独立的 Linux runtime。

计划按照以下顺序推进。

P0:Linux Core CI

首先建立 Linux L1 / Electron build qualification。

目标:

将目前已经验证可运行的 Linux Core 路径变成持续的 regression contract。

对应的第一阶段 CI PR 已准备。

P0:AEC dependency

单独处理当前 aec-audio-processing 对标准 Voice 安装造成的阻塞。

首先明确 AEC 在 L2 中的 dependency contract,再根据结果实现对应修改。

避免为了 Linux 临时绕过依赖,而使不同平台产生难以维护的行为差异。

P1:Linux 使用文档

在基础 CI 稳定后,补充 Linux source deployment / Electron startup 文档。

目标是让 Linux 用户可以按照与当前 Windows / macOS 类似的清晰路径完成:

environment setup
    ↓
dependency installation
    ↓
backend startup
    ↓
Electron startup

尽量减少目前依赖手工排查环境的情况。

P1:Linux NVIDIA dependency profile

基于已经完成的 GPT-SoVITS / Qwen3-ASR 实机验证,补充可重复的 Linux NVIDIA dependency profile。

重点是解决当前 CUDA runtime 虽然可以工作,但标准 dependency path 尚不能稳定复现实机环境的问题。

P1:Linux Desktop qualification

继续验证和补齐 Electron desktop 在 Linux 下的实际行为,包括:

  • backend discovery
  • GUI startup
  • renderer behavior
  • audio path
  • 必要的 platform-specific system integration

这里仍优先复用现有跨平台实现。

只有确认某项行为确实属于操作系统边界时,再增加 Linux-specific implementation。

后续:Wayland compositor integration

GNOME 与 standalone Wayland compositor 的 wallpaper hosting 模型存在明显差异。

niri / layer-shell / interactive overlay 等问题后续单独研究。

这一部分属于 desktop integration,而不是当前 Core Linux compatibility 的前置条件。


当前结论

目前没有发现 Amadeus 需要进行一次大规模的 Linux port。

相反,本轮实机验证表明:

  • Core / Backend 已经可以工作;
  • Electron desktop 已经可以工作;
  • Character Rendering 已经可以工作;
  • CPU VAD 已经可以工作;
  • NVIDIA TTS / ASR runtime 已经可以工作;
  • Web Wallpaper frontend 也已经在 Linux 桌面环境中得到实际验证。

因此当前 Linux 兼容工作的重点,是把这些已经存在的跨平台能力逐步补齐到接近当前 Windows / macOS 的支持和维护程度。

近期主要工作集中在:

  1. Linux CI qualification;
  2. Voice / AEC dependency;
  3. Linux NVIDIA dependency profile;
  4. Linux source deployment / startup 文档;
  5. Electron desktop qualification;
  6. 必要的 desktop environment / compositor integration。

后续 Linux 兼容工作会尽量遵循一个原则:

优先固化已有跨平台能力,只在确实属于平台边界的位置增加 Linux-specific implementation。

这样可以在完善 Linux 兼容性的同时,尽量降低长期维护成本,并避免对现有 Windows / macOS 路径造成不必要的影响。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions