这个仓库允许在现代系统(如Linux、FreeBSD和macOS)上运行历史UNIX版本(v1、v5、v7、2.11BSD和x86平台的v7)。它利用PDP-11模拟器(SIMH)和QEMU,以及Python、Git和Bash等工具。
该软件以各种开源许可证发布——主要为Caldera和BSD,具体条款在包含的文档中概述。镜像来自w11项目,脚本修改自他们的仓库(基于GLPv3)。Robert Nordier的x86移植使用简化的BSD许可证。
要开始使用,请安装所需的工具(SIMH、QEMU、Python、Git等——提供Debian/Ubuntu、Fedora、FreeBSD、NetBSD和OpenBSD的说明),克隆仓库,并使用提供的`run.sh`脚本或Python前端(兼容GNOME)下载UNIX系统镜像。
每个UNIX版本都有独特的启动过程,详细信息在仓库内。用户随后可以与历史系统交互,并使用脚本或手动清理模拟器创建的临时文件。
## 使用自定义错误简化 Axum 中的错误处理
本文详细介绍了一种简化使用 Rust 构建的 Axum Web 应用程序中错误处理的方法。解决的核心问题是匹配 `Result` 类型并返回适当 HTTP 状态码时,经常需要冗长的样板代码。
解决方案是创建一个新的类型 `AppError`,它包装 `anyhow::Error` 并实现 `IntoResponse` 和 `From<E>` 特性。这允许开发者利用 `?` 运算符进行简洁的错误传播。无需冗长的 `match` 语句,错误会自动转换为正确的 HTTP 响应。
具体来说,`IntoResponse` 处理将 `AppError` 转换为 Axum `Response`,通常返回一个 500 内部服务器错误,并带有错误消息或渲染后的模板。`From<E>` 实现能够自动将各种错误类型(如 `sqlx::Error`、`serde_json::Error`)转换为 `AppError`,前提是它们可以转换为 `anyhow::Error`。
这种方法显著减少了代码混乱,提高了可读性和可维护性。作者提供了一个 GitHub 仓库([原文链接]),展示了在 HATEOAS 项目中使用 htmx 的实际实现。