Odin 项目是什么?它有什么用途?
Odin 是 netlabs.org 上的一个项目,目标是让 Windows 95 和 Windows NT 的 Win32 应用程序在 OS/2 Warp 操作系统上原生运行,运行效果几乎和原生 OS/2 应用一样。它同时提供 Win32 API 在 OS/2 上的实现(称为 Odin32 API),因此也方便把 Win32 程序移植到 OS/2。
Odin 解决的核心问题
OS/2 本身无法直接运行 Windows 程序。IBM 当年提供的 Win-OS/2 方案依赖模拟层、Windows“会话”或虚拟机来跑 Windows 3.1 应用。Odin 走的是另一条路:
- 没有模拟层,也没有 Windows 会话或虚拟机。
- 代码由 CPU 直接执行,拥有普通 32 位 OS/2 程序的全部权限和限制。
- 转换后的程序在外观和行为上与其他 OS/2 应用无异。
换句话说,Odin 不是“在 OS/2 里开一个 Windows”,而是把 Windows 程序改造成 OS/2 能直接执行的形态。
它是怎么做到的
Odin 通过二进制兼容实现这一目标,即把 Windows 的 EXE 和 DLL 文件转换成 OS/2 使用的格式。转换和加载过程大致包括:
- 把 PE(Portable Executable,Win32 二进制格式)对象转换为 OS/2 的 LX(Linear eXecutable)格式。
- 按 OS/2 应用应有的方式在内存中重新组装。
程序要能运行,还必须能调用与 Windows 中相同的 API 函数,也就是 Win32 API。Odin 提供这些函数的运行时库实现,这是项目的第二部分工作。
两种转换方式
| 方式 | 工具/机制 | 特点 |
|---|---|---|
| 永久转换 | PE2LX.EXE | 直接把 EXE 和 DLL 文件转换成 OS/2 格式,磁盘上的文件被改变 |
| 动态转换 | PE.EXE 加载器 | 启动应用时即时转换,磁盘上的可执行模块不变,同一份文件可同时在 Windows 95/98/NT 和 OS/2 上使用 |
两种方式都可以借助 WIN32K.SYS 驱动实现自动化,并对用户完全透明:OS/2 进程(WPS、命令提示符等)可以像启动普通 OS/2 应用一样启动 Win32 二进制程序,转换和加载在启动时自动完成。
适用场景与限制
- 适合:需要在 OS/2 Warp 上运行 Win32 程序,或希望把 Win32 程序移植到 OS/2 的开发者。
- 需要注意:Odin 面向的是 Windows 95 和 Windows NT 时代的 Win32 应用,并非现代 Windows 程序。
- 由于是原生执行而非模拟,程序的运行受限于普通 32 位 OS/2 程序的权限与限制。
参与和获取帮助
netlabs.org 的 Wiki 上有 Odin 页面,可以参与贡献。项目还设有邮件列表 [email protected],可通过 gmane.org 阅读或直接订阅。