2026-05-10

13 篇热帖

Show HN: Building a web server in assembly to give my life (a lack of) meaning

ymawky:一个纯 ARM64 汇编编写的网络服务器

ymawky 是一个完全用 ARM64 汇编语言编写的网络服务器,采用系统调用方式,不依赖于 libc,并采用每个连接 fork 一个进程的方式。 虽然最初开发于 MacOS,但作者力求使其尽可能具有可移植性,但仍可能需要在 Linux/其他 Unix 系统上进行一些(可能较小的)调整。

构建

  • 依赖: 需要 Xcode Command Line Tools,可通过 xcode-select --install 安装。
  • 平台: 仅在 Apple Silicon (arm64) 平台上运行。
  • 编译: 运行 make 命令进行编译。
  • 文档根目录: 需要在 ymawky 可执行文件旁边创建一个 www/ 目录,作为文档根目录。 GET / 请求将查找 www/index.html,建议创建该文件。
  • 错误页面: ymawky 会尝试提供自定义的错误页面(如 404),这些页面位于 err/(code).html 目录下,确保 err/ 目录存在。可以通过 Configuration 部分修改默认文件和文档根目录。

运行

  • ./ymawky: 在 127.0.0.1:8080 上启动服务器。
  • ./ymawky [port]: 在 127.0.0.1:[port] 上启动服务器。
  • ./ymawky [任何非 0-9 的字符]: 以调试模式启动服务器在 127.0.0.1:8080 上运行。 调试模式禁用 fork,服务器仅处理一个请求。

功能

ymawky 是一个静态文件网络服务器,不支持服务器端代码或高级 URL 解析(例如 /search?query=term)。

  • 支持的 HTTP 方法: GET, PUT, DELETE, OPTIONS, HEAD
  • 慢 Loris 防护: 具有基本的慢 Loris 拒绝服务攻击防护。
  • URL 解码: 能够解码 %16进制编码,例如 %20 解码为空格。
  • 路径遍历防护: 智能检测并阻止路径遍历攻击,例如 ..,但允许文件名的多个点。
  • 自动补全: 自动在请求的文件名前面添加 www/
  • 默认请求:GET / 请求将默认查找 GET www/index.html
  • PUT 请求: 支持高达 1GiB 的文件上传,可配置更大的文件大小。 PUT 请求是原子性的,通过写入临时文件然后重命名来实现,避免了部分或损坏的文件。
  • Content-Length 验证: 检查 PUT 请求中的 Content-Length 字段。
  • MIME 类型检测: 检测文件扩展名并设置响应头中的 Content-Type
  • Range 请求: 支持 Range: bytes= 范围请求,包括完整范围、后缀范围和开放范围,支持视频分段播放。
  • HTTP 版本解析: 需要请求中指定 HTTP/1.1HTTP/1.0,如果请求 HTTP/1.1,则需要包含 Host: 字段。
  • 自定义错误页面: 可以提供自定义的 HTML 错误页面,位于 err/ 目录中。
  • 目录列表: 如果请求的资源是目录,则列出目录中的所有文件和子目录(不包括文档根目录)。

安全性

ymawky 采取了一些安全预防措施:

  • 拒绝路径长度超过 PATH_MAX (4096 字节) 的请求。
  • 拒绝包含路径遍历的请求(/../..)。
  • 拒绝不包含 16 字节以内路径的请求。
  • 限制在 www/ 目录内运行。
  • 拒绝包含符号链接的路径。
  • PUT 请求将写入临时文件 (www/.ymawky_tmp_<pid>),成功接收完整文件后,再重命名为请求的文件名。
  • 拒绝以 www/.ymawky_tmp_ 开头的路径。
  • 在 10 秒内接收数据。 否则,连接将被关闭。

HTTP 状态码

ymawky 支持以下 HTTP 状态码:

  • 200 OK
  • 201 Created
Debian must ship reproducible packages

Please provide the content you want me to summarize. I'm ready when you are! Just paste the text here, and I will generate a concise and accurate summary in markdown format and Chinese language, adhering to your requirements.

Getting arrested in Japan

日本の拘置所:逮捕された場合の体験談とシステム解説 (Nihon no Kouchijō: Daiho Sareta Baai no Taiken-tan to Shisutemu Kaishaku - Japanese Detention Centers: A First-Hand Account and System Explanation)

この文章は、日本で逮捕された場合の拘置所の状況、仕組み、そして生活について解説しています。日本は安全な国として知られていますが、法律が厳しく、些細な違反でも逮捕につながる可能性があります。

拘置所の概要 (Kouchijō no Gaiyō - Overview of Detention Centers)

逮捕後、裁判所に直行するのではなく、まず警察が運営する拘置所 (kōchi-sho) に収容されます。これは刑務所ではなく、逮捕から裁判までの間、一時的に収容される施設です。日本では、正式な起訴前に最長23日間、単一の逮捕で拘置することができます。しかし、追加の逮捕がなされると、この期間が延長される可能性があり、数ヶ月に及ぶこともあります。

拘置所の環境 (Kouchijō no Kankyō - Detention Center Environment)

拘置所は快適な場所ではなく、精神的・肉体的に追い詰めるように設計されています。厳格なスケジュール、限られたコミュニケーション、常に監視される環境、そして日本語でのみ会話が許可されるという状況が、受刑者を疲弊させます。目的は、抵抗を奪い、自白を促すことです。

日本とアメリカのシステムの違い (Nihon to Amerika no Shisutemu no Chigai - Differences Between the Japanese and American Systems)

日本のシステムは、起訴するに捜査を優先します。一方、アメリカでは、より迅速に法的手続きに入り、裁判所での手続きが進められます。日本では、無実の人が数週間、あるいは数ヶ月間拘置されることがあり、その間、生活が崩壊する可能性があります。

拘置所での生活 (Kouchijō de no Seikatsu - Life in Detention Centers)

  • 入所時: 全身検査、規則の説明、必要品の購入、そして標準的な制服への着替えが行われます。
  • 細胞: 窓のない小さな部屋で、自由はほとんどありません。
  • 規則: 厳格で、座り方、動き方、会話の許可など、細部に至るまで管理されます。
  • スケジュール:
    • 6:00 AM 起床、照明点灯
    • 6:30 AM 点呼/細胞検査
    • 7:00 AM 朝食
    • 8:30 AM 理容/スキンケア
    • 12:00 PM 昼食
    • 3:00 PM 点呼/細胞検査
    • 6:00 PM 夕食
    • 9:00 PM 消灯
  • 食事: 冷たい、質素で、不味い食事。
  • できること: ほとんど何もできません。読書は許可されることがありますが、制限があります。執筆も厳しく制限されます。

精神的な苦痛 (Seishinteki na Kutō - Mental Distress)

拘置所では、食事、睡眠不足、隔離、外部との遮断、精神的な疲労、厳格な管理、言語の壁、刺激の欠如、反復的な日常、そして外部での生活の混乱など、様々な要素が組み合わさり、精神的に追い詰められます。

アドバイス (Adobaisu - Advice)

逮捕された場合は、大使館に連絡することが重要です。大使館は、状況の説明、弁護士の紹介、家族への連絡などの支援を提供してくれます。

役立つ日本語の単語とフレーズ (Yaku ni Tatsu Nihongo no Tango to Furēzu - Useful Japanese Words and Phrases)

文章の最後に、拘置所内で役立つ日本語の単語とフレーズがリストアップされています。

まとめ (Matome - Summary)

日本拘置所のシステムは、厳格で、受刑者を精神的に追い詰めるように設計されています。無実の人が長期間拘置される可能性があり、その結果、精神的なトラウマや生活への深刻な影響が生じることがあります。

Zed Editor Theme-Builder

MeetingScheduler 组件总结 (Summary of MeetingScheduler Component)

MeetingScheduler 是一个 React 组件,旨在帮助用户安排关于安排会议的会议。它提供了一个界面,允许用户创建会议,并跟踪已安排的会议列表。

主要功能 (Key Features):

  • 会议创建 (Meeting Creation): 用户可以通过表单输入会议标题和选择会议时长来创建会议。组件会验证参与者数量是否有效。
  • 会议列表 (Meeting List): 组件会显示已创建的会议列表,包括会议标题和参与者数量。
  • 会议时长选择 (Duration Selection): 用户可以选择会议时长,包括 30 分钟、1 小时、2 小时和全天选项。
  • 状态管理 (State Management): 使用 useState hook 管理会议列表 (meetings)、借口索引 (excuseIndex) 和加载状态 (isLoading)。
  • 借口轮换 (Excuse Rotation): 组件会显示一个随机的会议借口,例如 "Sorry, I was on mute" 或 "Let's take this offline"。
  • 开发者健康度 (Developer Sanity): 组件有一个效果,会逐渐降低开发者健康度,并在健康度耗尽时发出警告。
  • 回调函数 (Callback Function): onMeetingCreate 回调函数允许父组件处理会议创建事件。onEscapeAttempt 回调函数提供了一个逃离会议安排的机制。

组件结构 (Component Structure):

  • Props:
    • defaultDuration: 默认会议时长 (分钟)。
    • maxAttendees: 最大参与者数量。
    • requiresSnacks: 是否需要提供零食。
    • onMeetingCreate: 会议创建回调函数。
    • onEscapeAttempt: 逃离会议安排回调函数。
  • 状态 (State):
    • meetings: 一个包含已安排会议的数组。
    • excuseIndex: 用于选择借口的索引。
    • isLoading: 表示组件是否正在加载的状态。
  • Hook:
    • useRef: 用于引用表单元素和开发者健康度值。
    • useMemo: 用于 memoize 借口轮换。
    • useEffect: 用于启动开发者健康度递减的定时器。
    • useCallback: 用于 memoize handleCreateMeeting 函数。

关键细节 (Key Details):

  • 组件使用 date-fns 库进行日期和时间格式化。
  • MEETING_EXCUSES 是一个常量数组,包含一系列常见的会议借口。
  • 会议 ID 使用 crypto.randomUUID() 生成。
  • 默认情况下,新会议的 couldHaveBeenAnEmail 属性设置为 trueactuallyStartsOnTime 设置为 "never",这可能导致类型错误。
  • 组件在创建会议时会设置加载状态,并在创建完成后将其重置。

代码风格 (Code Style):

  • 使用了 TypeScript 进行类型检查。
  • 使用了 React Hooks 进行状态管理和副作用处理。
  • 使用了 CSS 类名进行样式设置。
  • 代码包含注释,解释了组件的功能和结构。
Show HN: Rust but Lisp

rlisp 项目总结 (rlisp Project Summary)

rlisp 是一个周末项目,旨在探索将 Lisp 宏应用于 Rust 语义的可能性。它并非一个完整的编译器,缺少部分 Rust 语法(例如 turbofish,生命周期边界正在计划中),而是专注于展示一种新的语法风格。

核心概念:

  • Rust 语义,Lisp 语法: rlisp 将 Rust 的语义(所有权、借用、生命周期、泛型、特性、模式匹配等)表达为 S 表达式,并将其转换为 Rust 源代码 (S-expression → .rs → binary)。
  • 利用现有工具: rlisp 仅仅处理语法转换,Rust 编译器 rustc 仍然负责类型检查、借用检查和优化。

主要功能:

  • S 表达式语法: 允许使用 Lisp 风格的 S 表达式编写 Rust 代码。
  • 宏系统: 实现了编译时 S 表达式转换的宏系统,无需 proc_macro crate、token streaming 或 syn/quote
  • 诊断信息: 使用 Ariadne 库提供友好的错误诊断信息。
  • 内嵌 Rust 代码: 允许在 Lisp 代码中嵌入原始 Rust 代码,使用 (rust "...") 语法。

安装和使用:

  • 安装: git clone 仓库后,使用 cargo install --path . 安装。
  • 编译: rlisp compile file.lisp
  • 构建: rlisp build file.lisp (编译并使用 rustc 构建)
  • 运行: rlisp run file.lisp (编译、构建并运行)

语法参考:

rlisp 提供了 Lisp 语法到 Rust 语法的映射,包括:

  • fn 定义函数
  • let 定义变量
  • struct 定义结构体
  • enum 定义枚举
  • match 模式匹配
  • if 条件语句
  • impl 实现方法
  • trait 定义特性
  • . 访问字段和方法
  • new 创建实例
  • loopwhilefor 循环
  • lambda 定义匿名函数
  • ! 用于宏调用
  • pub 定义公共可见性
  • mod 定义模块
  • use 导入模块
  • unsafe 定义不安全代码块
  • as 类型转换

宏示例:

rlisp 宏使用 quasiquoteunquoteunquote-splicing 三个特殊形式:

  • quasiquote: 引用模板,允许在内部使用 unquote
  • unquote: 插入变量的值。
  • unquote-splicing: 将列表插入到周围的表达式中。

项目动机:

作者旨在探索 Rust 在失去传统语法后,使用 Lisp 风格语法所带来的编程体验,并发现宏和结构化编辑的优势。

许可证:

MIT 许可证。

更多信息:

Gemini API File Search is now multimodal

Gemini API 文件搜索工具更新:支持多模态数据、自定义元数据和页面引用

谷歌AI最近对Gemini API的“文件搜索”工具进行了扩展,主要更新包括:支持多模态数据处理、引入自定义元数据过滤功能以及提供页面引用机制,旨在提升检索增强生成 (RAG) 系统的性能和透明度。

1. 多模态数据支持 (Give your apps a photographic memory):

  • 文件搜索工具现在能够同时处理图像和文本数据。
  • 依托于Gemini Embedding 2模型,它可以理解图像的原始数据,从而为代理(agents)提供上下文感知能力。
  • 举例来说,创意机构可以根据自然语言描述的视觉风格或情感基调来搜索图像,而无需依赖关键字或文件名。
  • K-Dense、Klipy 和 Code Fundi 等公司已经在使用该功能,提升了科学研究、GIF 搜索以及工程领域知识检索的效率和准确性。

2. 自定义元数据过滤 (Filter the noise with custom metadata):

  • 通过在非结构化数据上附加键值标签(例如 department: Legalstatus: Final)来实现自定义元数据。
  • 在查询时应用元数据过滤器,可以缩小搜索范围,减少无关文档,从而提高 RAG 工作流程的速度和准确性。

3. 页面引用 (Show your work with page citations):

  • 文件搜索现在将模型的响应与原始来源直接关联,记录每个索引信息的页码。
  • 这使得用户能够准确地查阅到答案的出处,有助于建立信任,并方便进行严格的事实核查。

4. 快速上手:

  • 文件搜索工具简化了数据存储和检索流程,开发者可以专注于产品构建。
  • 上传文件和搜索操作简单易行。
  • 详细的开发者指南Gemini API 文档提供了更多代码示例和技术细节。

总而言之,此次更新旨在帮助开发者构建更强大的 RAG 系统,能够处理各种数据类型,提高检索精度,并增强用户对结果的信任度。

Show HN: I made a Clojure-like language in Go, boots in 7ms

let-go 项目摘要

let-go 是一个用 Go 编写的 Clojure 方言,带有字节码编译器和堆栈虚拟机。它旨在提供一个轻量级、快速的 Clojure 运行时环境,无需 JVM。

主要特点:

  • 轻量级: 单个约 10MB 的二进制文件,冷启动时间约为 7ms。
  • 兼容性:jank-lang 测试套件 上达到约 95% 的 Clojure 兼容性。
  • 目标平台: 可以编译为独立二进制文件或自包含的 WASM Web 页面,甚至可在 Plan 9 上运行。
  • Go 互操作性: 提供舒适的双向 Go 互操作,包括函数、结构体和通道。
  • AOT 编译: 支持将程序编译为字节码和独立二进制文件。
  • WebAssembly 支持: 可以编译为自包含的 WASM Web 页面,并提供终端仿真。

目标:

  • 提供娱乐性。
  • 实现 Clojure 的大部分功能,包括持久数据结构、延迟序列、转换器、协议、记录、多方法、core.async、BigInt 等。
  • 实现舒适的 Go 互操作。
  • 实现 AOT 编译。
  • 在单个 requestAnimationFrame 中启动运行时。
  • 支持在浏览器中运行 nREPL。

非目标:

  • 成为 Clojure JVM 的直接替代品。
  • 提供 Clojure 代码的 linter/formatter。

性能基准:

在 Apple M1 Pro 上进行了基准测试,结果显示 let-go 在以下方面优于其他实现:

  • 二进制大小: 最小 (10MB)。
  • 启动时间: 最快 (约 6.7ms,比 JVM 快约 50 倍)。
  • 空闲内存: 最低 (约 13.5MB)。
  • 短生命周期数据工作:map/filter 和持久映射,速度更快。

在更大的数值工作负载中,其他实现(如 go-joker 和 JVM)表现更好。

兼容性:

  • 通过了 jank-lang/clojure-test-suite 的 95.4% 的测试用例 (4696/4921)。
  • 支持多种标准命名空间,包括 clojure.core, clojure.string, clojure.set, clojure.walk, clojure.edn, clojure.pprint, clojure.test, clojure.core.async, io, http, json, transit, os, System, syscall, pods
  • Babashka Pods 支持: 可以加载 Babashka pods,扩展其功能。

已知限制:

  • 未实现:Refs/STM, Agents, Hierarchies, with-precision, Chunked sequences, Reader tagged literals, deftype, reify, Spec, alter-var-root
  • 行为差异:concat* 是急切的,<! / <!! 相同,go 块是真正的 goroutine,numeric overflow 默认为 wrap。

示例:

  • xsofy:在浏览器和终端中运行的 Roguelike 游戏。
  • lgcr:基于 syscall 命名空间的守护程序无关容器运行时。

安装:

  • Homebrew (macOS/Linux)
  • 下载预编译的二进制文件
  • 从源代码构建 (Go 1.22+)

使用:

  • lg: REPL
  • lg -e '(+ 1 1)': 评估表达式
  • lg myfile.lg: 运行文件

资源:

CPanel's Black Week: 3 New Vulnerabilities Patched After Attack on 44k Servers

cPanel 安全补丁发布:紧急应对多重漏洞 (cPanel Security Patch Release: Urgent Response to Multiple Vulnerabilities)

本文概述了 cPanel 最近发布的两轮紧急安全补丁,以及它们的重要性。2026 年 5 月 8 日,cPanel 发布了第二轮紧急技术安全发布 (TSR),旨在修复 CVE-2026-29201、CVE-2026-29202 和 CVE-2026-29203 三个新漏洞。这在 2026 年 4 月 28 日发布针对 CVE-2026-41940 (认证绕过) 的补丁后,仅仅 10 天内发布的第二次 TSR。

背景:大规模勒索软件攻击

CVE-2026-41940 漏洞被恶意利用,导致超过 44,000 台 cPanel 服务器遭到入侵,并部署了“Sorry”勒索软件。这次事件促使 cPanel 对代码进行更深入的审计,并发现了新的安全问题。

三个新漏洞详解

  • CVE-2026-29201 (任意文件读取,CVSS 4.3): 由于功能文件名的输入验证不足,攻击者可以读取服务器上未经授权的文件。虽然不能直接获取 root 权限,但可获取配置信息、凭据等,为后续攻击做准备。
  • CVE-2026-29202 (任意 Perl 代码执行,CVSS 8.8): 这是最危险的漏洞。通过 create_user API 调用,攻击者可以注入任意 Perl 代码,以已认证账户的系统用户身份执行。在共享主机环境中,这可能允许一个租户影响整个服务器。
  • CVE-2026-29203 (利用不安全符号链接的权限提升,CVSS 8.8): 存在不安全的符号链接处理漏洞,攻击者可以通过修改符号链接,进而修改任意文件的访问权限,导致拒绝服务或可能获得权限提升。该漏洞可与 CVE-2026-29202 结合使用,先创建符号链接,再利用权限提升漏洞获取更深层次的访问权限。

补丁安装步骤

  • 标准更新: 使用 /scripts/upcp 命令。
  • 强制更新 (自动更新禁用或使用固定版本): 使用 /scripts/upcp --force 命令。
  • CloudLinux 6 服务器: 使用 sed -i "s/CPANEL=.*/CPANEL=cl6110/g" /etc/cpupdate.conf 命令修改配置,然后运行 /scripts/upcp
  • 重启 cPanel 服务: 使用 /scripts/restartsrv_cpsrvd 命令。
  • 验证版本: 使用 /usr/local/cpanel/cpanel -V 命令确认已安装补丁版本。

安全建议

  • 如果服务器在 2026 年 2 月底至 4 月 28 日期间运行了未经补丁的 cPanel 版本,应将其视为可能已被入侵,并进行调查。
  • 审核日志文件 (/usr/local/cpanel/logs/access_log/usr/local/cpanel/logs/login_log),查找异常的认证模式。
  • 扫描用户主目录,查找 .sorry 扩展名的文件。

更广泛的趋势

cPanel 遇到的问题反映了整个 Web 主机安全环境的变化。 AI 驱动的安全研究正在以前所未有的速度发现漏洞,攻击窗口正在迅速缩短。建议启用自动更新,定期验证补丁,并在发生重大事件后审查日志。

总结检查清单

行动 优先级
运行 /scripts/upcp 应用 May 8 TSR 🔴 立即
重启 cpsrvd 🔴 立即
验证补丁版本 /usr/local/cpanel/cpanel -V 🔴 立即
审核 2 月 23 日起后的访问日志 🟡 今天
扫描主目录中的 .sorry 文件 🟡 今天
启用自动 cPanel 更新 (如果禁用) 🟡 本周
审查是否存在可能异常运行 create_user API
France moves to break encrypted messaging

法国议会情报代表团报告:建议破解 WhatsApp、Signal 和 Telegram 加密

核心内容:

法国议会情报代表团(由四名众议员和四名参议员组成)近日发布报告,正式支持破解 WhatsApp、Signal 和 Telegram 等消息平台的端到端加密,建议授权法官和情报人员对这些平台上的信息进行“定向访问”。该代表团认为,目前的消息平台加密技术阻碍了司法和情报工作的开展。

主要观点和细节:

  • 加密是障碍: 代表团将端到端加密视为一种需要解决的问题,而非一种需要保护的隐私措施。他们认为,目前法国警方和情报机构无法有效拦截加密消息,而可以拦截传统电话和短信。
  • 现有手段不足: 法国警方和情报部门目前可以通过“数字数据收集”(RDI)手段,入侵目标设备并获取其内容,但代表团认为这种手段效率低下。
  • “幽灵参与者”方案: 参议员 Cédric Perrin 推动了一种名为“幽灵参与者”的方案,该方案旨在让情报机构在加密之前,将一个“隐形特工”加入到对话中,用户对此毫不知情。 这种方案曾在 2018 年被英国政府情报局 (GCHQ) 提出并遭到广泛批评。
  • 技术可行性: 代表团报告认为,定向访问技术上并非不可实现,并指出欧盟委员会正在制定技术路线图,以探索如何实现此类访问。
  • 反对声音: 部分参议员,如 Olivier Cadic,则主张将加密保护写入法律,禁止消息服务安装后门,认为这会带来新的安全漏洞。
  • 立法动向: 前首相 Sébastien Lecornu 已委托副 Florent Boudié 研究修改现有法律框架,以允许调查人员访问加密通信。未来可能将通过新的提案法来实现这一目标。
  • 现有监控能力: 报告指出,法国情报部门已经拥有多种监控工具,包括设备入侵、算法监控、卫星拦截、传统窃听和与电信运营商的合作。 争论的焦点在于是否要改变目前仅凭数学而非承诺来保障安全的加密通信这一特殊类别。

核心争议:

争论的核心在于,是否应该打破目前仅凭数学保障安全的加密通信,使其成为情报机构可以随时访问的渠道。 代表团的报告明确支持后者,但批评人士担心,针对定向访问的基础设施可能会被滥用,扩展到更广泛的监控范围,甚至被其他国家要求采用。

总结:

法国议会情报代表团的报告为加密通信的未来发展带来了新的挑战,引发了关于隐私、安全和国家安全之间的复杂权衡。 尽管存在反对声音,但该报告的发布表明,法国政府正在积极寻求突破加密技术的手段,以增强情报收集能力。

Space Cadet Pinball on Linux

Space Cadet Pinball 在 Linux 上的复兴:为 Windows XP 用户带来怀旧

这篇文章分享了作者将经典的 Windows XP 预装游戏 Space Cadet Pinball 带到 Linux 机器上的方法,并探讨了该游戏及其周边的一些有趣细节。

核心内容:

  • Space Cadet Pinball 的意义: 对于许多人来说,Space Cadet Pinball 是 Windows XP 中最吸引人的游戏,它比 Solitaire 等其他预装游戏更具吸引力。
  • 项目介绍: 感谢一位开发者使用反编译和逆向工程工具,将 Space Cadet Pinball 的代码移植到多个平台,项目托管在 GitHub 上 (https://github.com/k4zmu2a/SpaceCadetPinball)。
  • Linux 安装: 最简单的安装方式是使用 Flatpak 包管理器:
    flatpak install com.github.k4zmu2a.spacecadetpinball
    
    Flatpak 包自带了原始 Windows 版本的游戏资源。
  • 提高分辨率: 原始游戏的分辨率较低 (480p)。 幸运的是,存在一个名为 Full Tilt! Pinball 的版本,其游戏数据支持高达 1024x768 的分辨率。 该数据可以在 archive.org 上找到 (https://archive.org/details/full%5Ftilt%5Fpinball)。
  • 使用 Full Tilt 数据: 使用 Full Tilt 数据需要以下步骤:
    1. 先运行游戏至少一次,创建数据目录。
    2. 将下载的 ZIP 文件解压到数据目录:
      cd ~/.var/app/com.github.k4zmu2a.spacecadetpinball/data/SpaceCadetPinball
      unzip ~/Downloads/CADET.ZIP
      
    3. 删除(或重命名)Flatpak 包中自带的旧数据目录:
      sudo rm -r $(flatpak info --show-location com.github.k4zmu2a.spacecadetpinball)/files/extra/Pinball
      
  • 其他说明:
    • 可以将原始数据和 Full Tilt 数据合并,在游戏中切换不同版本。
    • Full Tilt 数据对游戏规则有影响,例如,重新进入通道的灯泡会始终亮着,方便玩家完成灯泡收集和升级挡板。
    • 作者提到了与 Space Cadet Pinball 类似,在 macOS 上预装的 Marble Blast 游戏,后者有后续版本。

作者观点:

  • 作者赞扬了开发者为 Space Cadet Pinball 的开源移植所做的努力,并表示愿意为原开发人员付费。
  • 作者认为软件保护工作非常重要,理想情况下,专有软件应该可以放入源代码托管库,以便在原版权持有者停止销售产品后,代码可以转换为自由开源许可,以便用户可以改进和维护软件。

总而言之,这篇文章介绍了如何在 Linux 上重温 Space Cadet Pinball 的乐趣,并探讨了软件保护和开源的重要性。

Local privilege escalation via execve()

FreeBSD 安全公告 FreeBSD-SA-26:13.exec 总结

发布日期: 2026年4月29日

主题: 通过 execve() 的本地特权提升

影响: 所有受支持的 FreeBSD 版本。

漏洞描述:

FreeBSD 存在一个操作符优先级错误,导致内核中存在缓冲区溢出漏洞。攻击者可以利用此漏洞,通过控制 execve() 函数的参数来覆盖相邻的缓冲区,从而可能获取超级用户权限。

CVE 编号: CVE-2026-7270

解决方案:

升级到 FreeBSD 的受支持稳定或发布分支(releng),日期在修复日期之后,并重新启动系统。

升级方法:

  • 使用 pkg(8) (适用于 amd64 和 arm64 平台,安装自 base 系统包):
    pkg upgrade -r FreeBSD-base
    shutdown -r +10min "Rebooting for a security update"
    
  • 使用 freebsd-update(8) (适用于 RELEASE 版本,包括 amd64、arm64 和 FreeBSD 13 上的 i386 平台):
    freebsd-update fetch
    freebsd-update install
    shutdown -r +10min "Rebooting for a security update"
    
  • 应用补丁 (源码方式):
    1. 下载并验证补丁的 PGP 签名。
    2. 将补丁应用到 /usr/src 目录。
    3. 重新编译内核。

修复提交信息:

  • stable/15: c3e943e78e06 (stable/15-n283376)
  • releng/15.0: 934b48683c4f (releng/15.0-n281028)
  • stable/14: ae00a52921ca (stable/14-n274075)
  • releng/14.4: 943aa64ba91a (releng/14.4-n273690)
  • releng/14.3: f04c40607b8f (releng/14.3-n271491)
  • stable/13: d619e3a3c0ec (stable/13-n259858)
  • releng/13.5: 7c5c37ac8f8f (releng/13.5-n259214)

参考链接:

重要提示: 建议尽快升级系统以修复此安全漏洞。