从VMS迁移到Unix

时间:2009-11-26 16:06:27

标签: c unix vms vax

曾几何时,一队人坐下来用C编写了一个应用程序,在VAX上运行VMS。这是一项相当重要的工作,并在LargeCo开展了一项相当重要的后端业务。这整个shebang如此很好二十五年之后,它仍在继续并且正在做这件事。

时间过去了,人们退休了,最后一个人站在将钥匙转交给新一代人 - 我们可能会想到 - 并不是激动来找到自己的系统管理员年龄足以成为他们的弟弟。然而,由于处理Ultra Legacy Systems的想法并不令人满意,他们无法证明更换古老应用程序的成本是合理的。

LMS发现我habla unix并将这个问题提交给我。因为我habla unix但不说C,我将总结并把它交给你。长话短说:

LMS希望将用CMS编写的LegacyApp移植到vix到unix。资源?他能看的任何书吗?他可以和人交谈吗?

12 个答案:

答案 0 :(得分:12)

  1. 我需要问的第一个问题是,为什么,我会在“你真的需要将它移出VMS”的方向上引导对话。关于VMS还有许多值得一提的事情:

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

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

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

    - >通常的估计是,目前仍有大约300,000个VMS系统在使用。 LMS可能是LargeCo的最后一名男子,但他远远不是世界上最后一名男子。

    - >有大量信息,例如openvms.org,可以看到有关VMS的大量当前信息,所有信息都来自当前用户。

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

    - >正如其他人所说,代码的标准是什么?机会是,不是很好。 VMS主义越多,工作就越困难。 '努夫说。

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

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

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

    - >这个系统是集群的吗?如果是这样的话?你需要在UNIX框中实现这些目标。

    - >有些公司会帮助你做到这一点,并声称有工具使其更容易,但我的经验是,这些公司倾向于向你出售比服务更多的服务(即你需要雇用他们来使用这些工具。这将是昂贵的。)

  3. “OpenVMS用户UNIX”一书将为VMS新手提供一些帮助,帮助他们理解VMS,但正如标题所说,这本书的目的是为了相反的目的。

答案 1 :(得分:6)

在VMS上编写的所有东西都使用了大量特定于VMS的东西,这非常方便。

有一些公司出售兼容性库以使端口更容易 - 但它们不便宜,但VMS倾向于在可靠性比成本更重要的地方使用。

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

答案 2 :(得分:4)

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

对我来说,酸测试将是SEARCH * .c" SYS $"," LIB $"即搜索所有C源文件" SYS $"和" LIB $"标记为VMS系统服务的前缀。如果它们的计数在10s内则可能是一个端口,可能在10到100之间,但是超过100使得端口成功的可能性很小。

希望这有帮助

答案 3 :(得分: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代码更简单。它将更短,更清洁,更简单,更便携。

答案 4 :(得分:3)

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

答案 5 :(得分:2)

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

答案 6 :(得分:1)

要学习C,你不妨把它从马的嘴里拖出来:它的发明者,Kernighan和Ritchie的“C编程语言”。

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

关于C的更多深度和细节,我衷心喜欢Peter van der Linden的一本书:“专家C编程 - 深C秘密”。

您还需要针对VMS特定C函数的库文档进行LMS争夺(当然)特别强调应用程序中实际使用的那些。这就是你移植工作的地方。

这项工作可能很容易或很困难,具体取决于机器特定的聪明程度和位数,以及使用了多少个特定于VMS的系统调用。如果字大小相等(换句话说,如果你的VMS盒的字大小为32位,那么就不要在64位版本的Unix上运行代码!)

答案 7 :(得分:1)

Brian,我不确定LMS是否指定/关心移植C代码或整个过程。人们经常会想到超出系统范围的语言。

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

因此,移植整个过程的成本可能高于LMS最初认为的成本。在这里添加可靠性方面,给出你的C紧缩,这当然是热情和决心,这是不可能的。

如果您想简单地尝试使用C代码,如前所述,请搜索“$”匹配。或者只是在存在所有标题的情况下使用它,编译链接命令的基础应该足够了。

或者,这看起来像顾问的号召,因为在“出走”时间这些工作确实很多。所有人说VMS仍然是一个非常强大的平台(24x7是常态!),除非硬件死亡,然后仍然有大量的“外流”备件。祝你好运!

答案 8 :(得分:1)

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

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

答案 9 :(得分:0)

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

如果软件是典型的C,那么学习图书馆功能所花的时间比学习语言要多。

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

这是初学者的教程:

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

答案 10 :(得分:0)

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

  1. OpenVMS是一个“超级遗留平台”,因此仅此一点不值得运行应用程序;
  2. 现在很难找到愿意维护在OpenVMS上运行的应用程序的任何人;
  3. 运行OpenVMS的硬件为threatening to become moribund
  4. 我们遇到了类似的挑战,但在我们的案例中,相关应用程序不仅在OpenVMS上运行,而且还在COBOL中编写。我不得不说,鉴于你的应用程序是用跨平台语言编写的,你的情况比较乐观。

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

    我们的调查显示惠普将至少在2022年之前支持Itanium上的OpenVMS。没有必要急于进入另一个平台 - 也许您可以在OpenVMS上保留一些东西,同时着手准备申请移植(使其更少依赖于OpenVMS细节)。

    VMS有一个令人惊讶的健康社区,如果缺少Unix就是问题,那么GNV可能有助于缩小差距吗?

答案 11 :(得分:-1)

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

此外,如果代码中有很多优化,即内联汇编和位错。那么你将不得不重写代码,这将需要了解VAX arch。也。一定要检查字大小差异和字节序差异