11

曾几何时,一群人坐下来用 C 语言编写了一个应用程序,在VAX 上的VMS上运行。这是一项相当重要的工作,并且在 LargeCo 运行着相当重要的后端业务。这整个 shebang 运作得如此之,以至于 25 年后它仍然在努力工作并做这件事。

时间流逝,人们退休,碰巧最后的人已经将钥匙交给了新一代——我们可以想象——他们并不高兴地发现自己是一个足够老的系统的看守者,可以成为他们的弟弟。然而,尽管他们对处理 Ultra Legacy Systems 的想法感到不知所措,但他们无法证明更换古老应用程序的成本是合理的。

LMS 发现我 habla unix 并把这个问题提给我。而且由于我habla unix,但不会说CI,因此将对其进行总结并提供给您。长话短说:

LMS 想要将用 C 编写的 LegacyApp 从 VMS 移植到 unix。资源?有什么他能看的书?可以和他交谈的人?

4

12 回答 12

12
  1. 我需要问的第一个问题是为什么,我将引导对话朝着“你真的需要将它从 VMS 移植出去”的方向进行。关于 VMS 有很多值得一提的地方:

    -> VMS 仍然由 HP 积极开发和维护。他们上周刚刚发布了用于现场测试的 V8.4(参见http://h71000.www7.hp.com/openvmsft/)。

    -> VMS 在新硬件上可用;特别是基于 Itanium 处理器的 HP Integrity 服务器。

    -> VMS 也可通过 Charon Emulation 产品在虚拟平台上使用。

    -> 普遍的估计是,今天仍有大约 300,000 个 VMS 系统仍在使用中。LMS 可能是 LargeCo 的最后一个人,但他远非全球最后一个人。

    -> 那里有很多信息,例如,请参阅 openvms.org,查看有关 VMS 的大量当前信息,全部来自当前用户。

  2. 好的 - 你仍然想移植 VMS。你怎么做呢?嗯,这取决于很多东西。

    -> 正如其他人所说,代码有多标准?机会是,不是很多。VMS-isms 越多,工作就越困难。'纳夫说。

    -> 什么是数据库?如果是 Oracle,在其他平台上迁移到 Oracle 可能不会太难。如果它是某种基于 RMS 索引文件的自定义数据库,那么您还有更多工作要做,您需要重新创建该伪数据库,或者,充分了解它以用一些关系数据库替换它。

    -> 除了 C,还有什么用于创建应用程序?前端是什么?DEC表格?FMS?是否有交易引擎,例如 ACMS?RTR?这些事情将对移植到 UNIX 所需的可行性和工作量产生巨大影响。

    -> 还涉及哪些其他产品?是否使用了任何第三方库?是否存在对应用程序或功能至关重要的第三方产品?

    -> 这个系统是集群的吗?如果是,为什么?您需要使用 UNIX 机器来实现这些相同的目标。

    -> 有一些公司可以帮助你做到这一点,并声称有工具可以让你更轻松,但我的经验是,这些公司往往向你出售的服务多于产品(即你需要雇用他们来使用工具。会很贵)。

  3. 这本书 UNIX for OpenVMS Users 将为 VMS 新手在理解 VMS 方面提供一些帮助,但是,正如标题所说,这本书的真正目的是相反的。

于 2009-11-30T21:13:38.320 回答
6

在 VMS 上编写的所有内容都使用了许多 VMS 特定的东西,这非常方便。

有几家公司出售兼容性库以使移植更容易 - 虽然它们不会便宜,但 VMS 往往用于可靠性比成本更重要的地方。

另一种选择是在一些现代硬件上运行 openVMS,可能在 VM 中。

于 2009-11-26T16:26:05.467 回答
4

我相信 Brian 现在已经做出了决定,但是对于我在 DEC OpenVMS 语言支持部门工作多年的罪过(是的,有些人有这个可疑的荣誉),我会问像 Brian 这样的客户的真正问题是:它是不是实时应用程序?如果是前者,那么它将严重依赖于许多 VMS 系统服务,这些服务将排除“端口”并指示重写。如果是后者,那么应该(可能)限制 VMS 系统服务的频率并使端口可行。

对我来说,最严峻的考验是 SEARCH *.c "SYS$", "LIB$",即在所有 C 源文件中搜索以 VMS 系统服务为前缀的 "SYS$" 和 "LIB$" 标记。如果这些计数在 10 秒内,则可能是端口,在 10 到 100 之间可能会,但超过 100 则不太可能成功端口。

希望这可以帮助

于 2013-06-16T19:13:51.123 回答
3

如果您愿意继续在 VM 中运行 VMS,可以查看 CHARON-VAX ( http://www.charon-vax.com/ )。如前所述,移植的难易程度很大程度上取决于使用了多少 VMS 扩展。在源代码中搜索嵌入在字符串中的 $ 字符(通常带有 3 个字符的前导子字符串,例如 lib$gettime 或 dsc$descriptor 或 sys$foobar 等),您至少可以基本了解 VMS 系统函数的名称。如果名称相当明显,那么它们的可移植性有多大。

于 2009-11-29T03:48:25.790 回答
3

你有几个选择。

  1. 获取 OpenVMS 源代码,并继续维护 Open VMS,就好像它是一个 Linux 发行版一样。有些人不介意跟上 Linux 发行版和 OpenVMS 发行版的步伐。可以办到。

  2. 尝试将 VMS C 重新编译到 Linux 中。如果 C 只使用标准库,这可能是微不足道的。如果 C 语言使用了很多 VMS 库,这可能会非常非常困难。

    一旦掌握了事实,您就可以重新评估这一行动方案。由于您没有列出该程序使用的一堆 VMS 库方法,因此无法判断它与操作系统的纠缠程度。

    这可能是微不足道的或不可能的。不分析来源很难说。

  3. 编写从 VMS 到 Linux 的桥接库。如果你的程序只做一些 VMS 的事情,这不是很困难。如果你的程序做了大量的 VMS 事情,那就太疯狂了。

    从长远来看,这座桥是一个糟糕的主意。然而,经理们喜欢它。

    另一种方法是用适当的、可移植的 Linux 调用代替 VMS 库调用,而不是编写桥接器。从长远来看,这会更好,因为它消除了程序的不可移植特性。

  4. 用 Python 从头开始​​重写它。这通常比尝试移植 C 代码更简单。它将更短、更干净、更简单、更便携。

于 2009-11-26T16:22:53.650 回答
2

如果它没有坏,不要修理它!如果不需要,为什么要移植或迁移应用程序?为什么不在 HP Itanium 服务器上运行的当前安装的 OpenVMS 上运行它?那是假设您希望升级硬件,如果您的 VAX 硬件仍然运行强劲,这甚至可能没有必要。

于 2013-02-05T02:14:49.500 回答
1

大约一年半后,也许你已经想好要做什么了。我的组织最近决定坚持使用 OpenVMS,而不是切换到 Linux,即使老卫士最近离开了。我们无法反驳我们认为是一个非常稳定和可靠的系统。出于生命周期结束的原因,我们目前正在从 Alpha 服务器切换到 Integrity 服务器。惠普对我们的过渡非常有帮助。

就此而言,可能有 Linux 供应商可以帮助过渡。询问您的新硬件供应商是否有任何建议。

于 2011-06-16T18:58:13.457 回答
1

布赖恩,我不确定 LMS 是否指定/关心移植 C 代码或整个过程。人们常常认为语言超出了系统的范围。

如果有一个基于 VMS 的进程,很可能它至少使用了调度/批处理工具,这些工具通常在 DCL 中编写脚本(相当简单明了的语言,不像 shell 或 perl 脚本)。

所以移植整个流程的成本可能比你的 LMS 最初感知的要高。在这里加上可靠性方面,考虑到你对 C 的训练,当然,带着热情和决心,这不是不可能的。

如果您想简单地尝试一下 C 代码,如前所述,请在其中搜索“$”命中。或者只是 cc 它存在所有标题,compile-link 命令的基础知识就足够了。

或者,这看起来像是一个顾问的电话,因为在“外流”时期,这样的工作确实很丰富。所有人都说 VMS 仍然是一个相当强大的平台(24x7 是一种常态!),除非硬件死掉,否则仍然有大量的“外流”备件。祝你好运!

于 2010-02-05T22:52:56.140 回答
1

想学C,还不如从马嘴里扯出来:它的发明者Kernighan和Ritchie的《The C Programming Language》。

我可以推荐(再次)Brian Kernighan 的《UNIX 编程环境》;一个你很难找到的更权威的来源,它同时教你 Unix/C 习语和一点 C 编程。

有关 C 的更多深度和细节,我非常喜欢 Peter van der Linden 的一本书:“Expert C Programming - Deep C Secrets”。

您还需要与 LMS 争夺特定于 VMS 的 C 函数的库文档,(当然)特别强调那些在应用程序中实际使用的函数。这就是您的移植工作所在。

这项工作可能容易或困难,取决于完成了多少特定于机器的聪明才智和位操作,以及使用了多少特定于 VMS 的系统调用。如果字长相等,那就太好了(换句话说,如果您的 VMS 机器的字长为 32 位,请不要在 64 位版本的 Unix 上运行代码!)

于 2009-11-26T16:18:33.223 回答
0

根据您已经知道的语言,C 并不难学。在最终从 Pascal 中解脱出来之后,我在学习 C++ 的过程中自学了 C。(VAX Pascal,加上 Rdb/VMS,加上 DCL 形成了一个难以击败的组合。)

如果该软件是典型的 C 语言,那么您将花费更多时间学习库函数而不是学习语言。

这是非常轻量级的东西,但我浏览了 Microsoft 与 Visual Studio for C++ 的速成版一起提供的 C++ 在线教程。

这是初学者的教程:

http://msdn.microsoft.com/en-us/beginner/cc305129.aspx

于 2010-01-23T22:33:22.420 回答
0

可能值得努力询问为什么LMS 要将应用程序移植到 Unix。答案似乎很明显,但正确探索原因有其好处。我会假设:

  1. OpenVMS 是一个“超旧平台”,仅凭这个原因就不再值得在其上运行应用程序了;
  2. 现在很难找到愿意维护在 OpenVMS 上运行的应用程序的人。
  3. 运行 OpenVMS 的硬件正面临濒临死亡的威胁。

我们也有类似的挑战,但在我们的案例中,有问题的应用程序不仅在 OpenVMS 上运行,而且也是用 COBOL 编写的。鉴于您的应用程序是用跨平台语言编写的,我不得不说您的情况比较乐观。

无论如何,我认为如果你要做出一个重大决定,比如从 OpenVMS 迁移到 Unix,那么做一些尽职调查是明智的。在您的情况下,尝试评估代码的可移植性 - 只有这样您才会知道工作的规模(最坏的情况很容易成为最佳情况的倍数)。在 C 中,代码可移植性主要是依赖项的函数——它们是“标准的”还是特定于 VMS 的?

我们的调查显示,惠普将至少在 2022 年之前在 Itanium 上支持 OpenVMS。不一定需要急于转向另一个平台——也许您可以在着手准备移植应用程序的同时将其保留在 OpenVMS 上(使它较少依赖于 OpenVMS 的细节)。

VMS 有一个非常健康的社区,如果问题在于缺少 Unix,那么也许GNV可以帮助弥合差距?

于 2012-12-12T06:03:37.817 回答
-1

那么你有几个选择。如果需要快速移植此代码,我会编写一个桥接库来模拟 vms 库。当您在 *nix 上恢复并运行它时,然后将 vms 库调用替换为 *nix 的本机/便携式调用。

此外,如果代码中有很多优化,即内联汇编和位旋转。那么你将不得不重写这个代码,这将需要对 VAX 拱门的理解。还。一定要检查字长差异和字节序差异

于 2009-11-26T16:43:29.020 回答