Переход с VMS на Unix

Давным-давно команда ребят села и написала приложение на C, работающее на VMS на VAX. Это было довольно важное мероприятие, и оно обеспечивает довольно важную внутреннюю операцию в LargeCo. Вся эта шумиха работает настолько хорошо, что двадцать пять лет спустя она все еще работает и делает свое дело.

Проходит время, и люди уходят на пенсию, и случилось так, что Последний выживший передал ключи новому поколению, которое, как мы можем себе представить, менее чем в восторге от того, что окажется смотрителем системы, достаточно старой, чтобы быть их младшим братом. Тем не менее, несмотря на то, что они не в восторге от идеи иметь дело с ультраустаревшими системами, они не могут оправдать затраты на замену почтенного приложения.

LMS обнаружил, что я хабла unix и задал мне этот вопрос. А так как я хаблю unix, но не говорю на Си, то подытожу и изложу вам. Короче говоря:

LMS хочет портировать LegacyApp, написанный на C. с VMS на unix. Ресурсы? Какие книги он может читать? Люди, с которыми он может поговорить?


person Brian Dunbar    schedule 26.11.2009    source источник
comment
Что такое ВМС? Я никогда не слышал об этом.   -  person Nathan Campos    schedule 26.11.2009
comment
Мне знакомо это чувство, когда я несу исключительную ответственность за оборудование середины 1980-х годов. Я привык к тому, что потенциальные операторы говорят, что они родились после даты установки оборудования.   -  person pavium    schedule 26.11.2009
comment
@nathan: проверьте en.wikipedia.org/wiki/OpenVMS   -  person KB22    schedule 26.11.2009
comment
Вам, вероятно, следует включить какое-то представление о том, какая часть кода специфична для VMS. Не то чтобы я разбирался в VMS, но программа может состоять из шести миллионов строк кода, использующих, например, только стандартные библиотечные вызовы и плоские текстовые файлы, или это может быть 50 000 строк очень специфичных для VMS вещей. Имеет значение.   -  person unwind    schedule 26.11.2009
comment
@ Натан, «Система виртуальной памяти», если я правильно помню, работает на компьютере VAX Digital Equipment Corporation. В наши дни «VAX» скорее относится к пылесосу, а я работал в сфере интеллектуальной собственности 15 лет назад, когда компания по производству пылесосов попыталась зарегистрировать торговую марку «VAX» и обнаружила, что она уже зарегистрирована.   -  person pavium    schedule 26.11.2009
comment
@pavium, VMS была перенесена на Alpha, а затем на Itanium.   -  person AProgrammer    schedule 26.11.2009
comment
Знаете UNIX, но не знаете C? Куда катится мир... ;) (ТИЦ!)   -  person caf    schedule 27.11.2009
comment
‹i›Знаете UNIX, но не знаете C? Куда катится мир... ;) ‹/i› Я дошел до Unix трудным путем: от Banyan до NetWare и Windows.. а потом надоело платить за обновление сертификатов MSCE каждые полгода. Это недостаток в моем наборе навыков. Но есть так много, много вещей, чтобы учиться и только так много часов в неделю.   -  person Brian Dunbar    schedule 29.11.2009
comment
Почему на простой порт на Itanium действует скидка? Какие специфичные для VMS библиотеки времени выполнения используются? Какой тип использования RMS существует? Индексированные файлы? или используется stdio.h type io? Используются ли глобальные разделы? TCP/IP? В вашей формулировке проблемы действительно недостаточно информации, чтобы дать точный ответ.   -  person EvilTeach    schedule 29.11.2009
comment
В конце 1980-х и 1990-х годах я сделал немало портов приложений с VMS на Unix (в основном SunOS, но добавил пару хостов UNICOS и Irix). Как уже говорили другие, если код придерживается языковых стандартов, он будет очень простым; если он полон специфики VMS, это будет сложно. Вам необходимо оценить усилия по переносу на Unix, а не поддержку дополнительного хоста для продолжения VMS. Специфика вашей ситуации (код плюс среда) повлияет на ваш выбор.   -  person mpez0    schedule 08.01.2010
comment
Код VAX/C имеет системные и библиотечные вызовы, такие как CREMBX и LIB$, которые специфичны для VMS, поэтому их необходимо модифицировать. У вас также есть методы межпроцессного взаимодействия, такие как почтовые ящики и глобальные разделы, которые отличаются от разделяемой памяти, семафоров и т. д. в UNIX, поэтому я предлагаю вам просмотреть каждую строку кода в ваших программах на C и решить, следует ли вам переписать всю программу, а не пытаться преобразовать код.   -  person Frank R.    schedule 13.11.2010
comment
Чтобы получить ответ на этот вопрос, вам нужно объяснить природу того, как код взаимодействует с операционной системой. Unix очень примитивен по сравнению с VMS, и все делается по-другому. Такие вещи, как QIO и RMS, не имеют реального эквивалента Unix.   -  person user3344003    schedule 20.03.2016
comment
Я понимаю, что это старая тема, но не думали ли вы просто перейти на новое оборудование? OpenVMS по-прежнему полностью поддерживается.   -  person David Hoelzer    schedule 28.04.2016


Ответы (12)


  1. Первый вопрос, который мне нужно задать, это почему, и я бы вел разговор в направлении «Вам действительно нужно перенести это с VMS». Есть ряд вещей, которые стоит упомянуть о VMS:

    -> VMS по-прежнему активно разрабатывается и поддерживается HP. На прошлой неделе они выпустили V8.4 для полевых испытаний (см. http://h71000.www7.hp.com/openvmsft/).

    -> VMS доступна на новом оборудовании; в частности, серверы HP Integrity на базе процессора Itanium.

    -> VMS также доступна на виртуальных платформах через продукты Charon Emulation.

    -> По общепринятым оценкам, сегодня активно используется около 300 000 систем VMS. LMS может быть последним человеком в LargeCo, но он далеко не последний человек в мире.

    -> Много информации, см., например, openvms.org, чтобы увидеть много текущей информации о VMS, все от текущих пользователей.

  2. ОК, вы все еще хотите перенести VMS. Как ты делаешь это? Ну, это зависит от многих вещей.

    -> Как уже говорили другие, насколько стандартен код? Скорее всего, не очень. Чем больше VMS-измов, тем сложнее работа. 'достаточно.

    -> Что такое база данных? Если это Oracle, вероятно, не так уж сложно перейти на Oracle на какой-либо другой платформе. Если это какая-то пользовательская БД, основанная на индексных файлах RMS, то вам нужно проделать больше работы, вам нужно будет воссоздать эту псевдо БД или достаточно понять ее, чтобы заменить ее какой-либо реляционной БД.

    -> Кроме C, что еще используется для создания приложения? Что на передке? DECforms? ФМС? Есть ли механизм транзакций, например. ACMS? РТР? Эти вещи окажут огромное влияние на осуществимость и усилия, необходимые для переноса на UNIX.

    -> Какие другие продукты участвуют? Используются ли сторонние библиотеки? Используются ли сторонние продукты, критически важные для приложения или функциональности?

    -> Является ли эта система кластерной? Если да, то почему? Вы должны будете достигнуть тех же самых целей с коробкой UNIX.

    -> Есть компании, которые помогут вам это сделать, и утверждают, что у них есть инструменты, облегчающие эту задачу, но мой опыт показывает, что эти компании, как правило, продают вам больше услуг, чем товаров (т. е. вам нужно нанять их, чтобы использовать инструменты. Это будет дорого).

  3. Книга UNIX для пользователей OpenVMS поможет начинающим пользователям VMS в понимании VMS, но, как следует из названия, книга на самом деле предназначена для противоположной цели.

person Brad McCusker    schedule 30.11.2009
comment
Приятно слышать от инженера VMS (бывшего?). Я работал в команде ASV/CIFS в Индии (в основном портирование Samba). Если ваши эксплуатационные расходы на VMS не слишком высоки по сравнению с переносом на Unix, оставьте все как есть... - person hackworks; 01.12.2009

Все, что написано на VMS, использует множество специфичных для VMS вещей, это было так удобно.

Есть несколько компаний, которые продают библиотеки совместимости, чтобы упростить перенос - они не будут дешевыми, хотя VMS, как правило, используется там, где надежность важнее стоимости.

Другой вариант — запустить openVMS на каком-нибудь современном оборудовании, возможно, на виртуальной машине.

person Martin Beckett    schedule 26.11.2009
comment
Спасибо за упоминание виртуальной машины: LMS подумала, что это может быть самый простой вариант, если не самый интересный. - person Brian Dunbar; 29.11.2009

Я уверен, что Брайан уже принял решение, но из-за моих грехов многолетней работы в языковой поддержке DEC OpenVMS (да, некоторые люди имели эту сомнительную честь) настоящий вопрос, который я бы задал такому клиенту, как Брайан, таков: это приложение реального времени или нет? Если это первое, то оно будет сильно зависеть от многих системных служб VMS, которые исключат «порт» и укажут на перезапись. Если бы это было последнее, то частота системных служб VMS должна (возможно) быть ограничена и сделать порт жизнеспособным.

Серьезным испытанием для меня будет поиск *.c "SYS$", "LIB$", т.е. поиск во всех исходных файлах C тегов "SYS$" и "LIB$", которые предшествуют системным службам VMS. Если их количество составляет 10, то порт, вероятно, вероятен, от 10 до 100 делает его вполне вероятным, но более 100 делает успешный порт маловероятным.

Надеюсь это поможет

person Richard Hammond    schedule 16.06.2013

У вас есть несколько вариантов.

  1. Получите исходный код OpenVMS и продолжайте поддерживать Open VMS, как если бы это был дистрибутив Linux. Некоторые люди не против идти в ногу с дистрибутивами Linux и дистрибутивами OpenVMS. Это может быть сделано.

  2. Попробуйте перекомпилировать VMS C в Linux. Это может быть тривиально, если C использует только стандартные библиотеки. Это может быть очень и очень сложно, если C использует много библиотек VMS.

    Когда у вас под рукой будут факты, вы сможете пересмотреть свой образ действий. Поскольку вы не перечислили кучу методов библиотеки VMS, которые использует эта программа, невозможно сказать, насколько она запутана с ОС.

    Это может быть тривиально или невозможно. Трудно сказать без анализа источника.

  3. Напишите промежуточные библиотеки из VMS в Linux. Если ваша программа выполняет только несколько функций VMS, это не очень сложно. Если ваша программа выполняет обширные функции VMS, это сумасшествие.

    Мост — в конце концов — ужасная идея. Однако менеджерам это нравится.

    Альтернативой является замена вызовов библиотеки VMS надлежащими переносимыми вызовами Linux, а не мостами записи. Это лучше в долгосрочной перспективе, потому что исключает непереносимые функции программы.

  4. Перепишите его с нуля на Python. Обычно это проще, чем пытаться портировать код C. Он будет короче, чище, проще и портативнее.

person S.Lott    schedule 26.11.2009
comment
В основном хороший совет, но я не согласен с (4). Переписывание на Python потребует от вас пересмотреть каждую строчку кода, понять и перевести логику и не ошибиться в процессе. По крайней мере, с точки зрения первоначальных усилий это, вероятно, будет НАМНОГО дороже, чем просто миграция конкретной части старого кода VMS. - person Carl Smotricz; 26.11.2009
comment
Зависит от того, что делал старый код. Если бы он просто вводил данные, немного пересчитывал и генерировал отчет, это могло бы быть 50kloc C на VMS, но вы могли бы переписать его, используя несколько языковых модулей высокого уровня на одном экране. Тот факт, что исходное приложение было на C, не означает, что это лучший выбор на сегодняшний день. - person Martin Beckett; 26.11.2009
comment
@Carl Smotricz: Это именно то, чего следует избегать. Не транслитерируйте C в Python. Выбросьте C. Начните с первых принципов и напишите правильную программу, используя новую технологию, делая это правильно. - person S.Lott; 26.11.2009
comment
Если вы считаете, что помимо исходного кода C существует еще какая-то спецификация, то вы менее циничный человек, чем я. - person caf; 27.11.2009
comment
Преимущество спецификации, написанной на C, в том, что, по крайней мере, вы знаете, что она верна, или, по крайней мере, вы понимаете, что написано в спецификации!!! - person Martin Beckett; 27.11.2009
comment
Любая спецификация устаревшего кода неполна и неверна. Документацию никто не ведет. Период. Вы должны рассуждать о том, что делает программа, исходя из текущих вариантов использования. - person S.Lott; 27.11.2009
comment
@S.Lott: Несмотря на название, OpenVMS не имеет открытого исходного кода. Вы можете купить списки источников, но я не думаю, что вы сможете использовать их для обслуживания системы. - person Keith Thompson; 07.08.2011

Если вы хотите продолжать использовать VMS на виртуальной машине, вы можете заглянуть в CHARON-VAX ( http://www.charon-vax.com/). Как упоминалось ранее, простота переноса действительно во многом зависит от того, сколько расширений VMS было использовано; поиск в исходном коде символов $, встроенных в строки (обычно с 3-символьной начальной подстрокой, такой как lib$gettime или dsc$descriptor или sys$foobar и т. д.), даст вам хотя бы базовое представление о том, как называются системные функции VMS. и насколько вероятно, что они будут переносимыми, если имя достаточно очевидно.

person Hellion    schedule 29.11.2009

Если не сломалось, не чини! Зачем портировать или переносить приложение, если в этом нет необходимости? Почему бы не запустить его на текущей установке OpenVMS, работающей на сервере HP Itanium; это предполагает, что вы хотите обновить оборудование, что может даже не понадобиться, если ваше оборудование VAX все еще работает.

person haziz    schedule 05.02.2013

Чтобы выучить C, вы могли бы просто перетащить его изо рта: «Язык программирования C» его изобретателей, Кернигана и Ритчи.

Я могу порекомендовать «Среду программирования UNIX» (снова) Брайана Кернигана; более авторитетного источника вы вряд ли найдете, и он одновременно учит вас идиомам Unix/C и немного программированию на C.

Для более глубокого и подробного ознакомления с C мне очень понравилась книга Питера ван дер Линдена: "Экспертное программирование на C - секреты глубокого C".

Вы также захотите бороться с LMS за библиотечную документацию функций C, специфичных для VMS, с (конечно) особым акцентом на те, которые фактически используются в приложении. Вот где будут ваши усилия по портированию.

Работа может быть легкой или сложной, в зависимости от того, насколько специфичны для конкретной машины хитрости и манипуляции с битами, а также от того, сколько системных вызовов, специфичных для VMS, используется. Было бы очень хорошо, если бы размер слова был одинаковым (другими словами, если ваш VMS имеет размер слова 32 бита, не запускайте код на 64-битной версии Unix!)

person Carl Smotricz    schedule 26.11.2009
comment
Я бы также порекомендовал копию C in a Nutshell от O'Reilly в качестве хорошего настольного справочника. - person Joe Internet; 26.11.2009

Брайан, я не уверен, что LMS указал/позаботился о переносе C-кода или ВСЕХ процессах. Как слишком часто люди думают о языках вне системы.

Если был процесс, построенный на VMS, скорее всего, он использовал, по крайней мере, средства планирования/пакетной обработки, которые часто написаны на DCL (довольно простой и понятный язык, в отличие от сценариев оболочки или perl).

Таким образом, стоимость переноса всего процесса может быть выше, чем первоначально воспринималась вашей LMS. Добавьте сюда аспект надежности, учитывая ваши хрусты с C, в чем нет ничего невозможного, конечно, с энтузиазмом и решимостью.

Если вы хотите просто попробовать C-код, как было опубликовано ранее, найдите в нем совпадения "$". Или просто скопируйте его со всеми присутствующими заголовками, основ команды compile-link должно быть достаточно.

С другой стороны, это выглядит как призыв консультанта, поскольку действительно таких рабочих мест во время «исхода» было предостаточно. Все сказанное VMS остается довольно надежной платформой (24x7 - это норма!), Если только аппаратное обеспечение не умрет, тогда еще есть тонны "исходных" запасных частей. УДАЧИ!

person vmsnomad    schedule 05.02.2010

Примерно через полтора года, возможно, вы уже поняли, что делать. Моя организация недавно решила придерживаться OpenVMS вместо перехода на Linux, несмотря на то, что старая гвардия недавно ушла. Мы просто не могли спорить с тем, что мы считали очень стабильной и надежной системой. В настоящее время мы переходим с серверов Alpha на серверы Integrity по причинам окончания срока службы. HP очень помогла нам с переходом.

Если на то пошло, могут быть поставщики Linux, которые могут помочь с переходом. Спросите у вашего нового поставщика оборудования, есть ли у него какие-либо рекомендации.

person Jeffery Williams    schedule 16.06.2011

В зависимости от того, какие языки вы уже знаете, C не так уж сложно выучить. Я сам выучил C в ходе изучения C++ после того, как окончательно оторвался от Pascal. (VAX Pascal, плюс Rdb/VMS, плюс DCL образовали комбинацию, которую было трудно превзойти.)

Если программа написана на типичном C, вы потратите больше времени на изучение библиотечных функций, чем на изучение языка.

Это довольно легкий материал, но я просмотрел онлайн-учебники по C++, которые Microsoft предоставляет вместе с экспресс-выпуском Visual Studio для C++.

Вот учебник для начинающих:

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

person Walter Mitty    schedule 23.01.2010

Вероятно, стоит приложить усилия, чтобы спросить, почему LMS хочет перенести приложение на Unix. Ответ может показаться очевидным, но правильное изучение причин имеет свои преимущества. Я бы предположил:

  1. OpenVMS является «ультра устаревшей платформой», и только по этой причине больше не стоит запускать приложение;
  2. В наши дни трудно найти любого, кто готов поддерживать приложение, работающее на OpenVMS;
  3. Аппаратное обеспечение, на котором работает OpenVMS, угрожает стать умирающий.

У нас похожая проблема, но в нашем случае рассматриваемое приложение не только работает на OpenVMS, но и написано на COBOL. Я должен сказать, что ваша ситуация радужна по сравнению с тем, что ваше приложение написано на кросс-платформенном языке.

В любом случае, я думаю, что если вы собираетесь принять важное решение, такое как переход с OpenVMS на Unix, было бы благоразумно проявить некоторую должную осмотрительность. В вашем случае попытайтесь оценить, насколько переносим код — только тогда вы узнаете, каков масштаб усилий (в худшем случае вполне может быть кратно лучшему). В C переносимость кода в основном зависит от зависимостей — являются ли они «стандартными» или специфичными для VMS?

Наши запросы показали, что HP будет поддерживать OpenVMS на Itanium по крайней мере до 2022 года. Нет необходимости торопиться с переходом на другую платформу — возможно, вы могли бы оставить все на OpenVMS, пока приступите к подготовке приложения к переносу (сделайте это меньше зависит от специфики OpenVMS).

У VMS удивительно здоровое сообщество, и если проблема заключается в отсутствии Unix, то, возможно, GNV поможет преодолеть зазор?

person Eric Smith    schedule 12.12.2012

Ну у вас есть несколько вариантов. если этот код нужно портировать довольно быстро, я бы написал библиотеку моста для эмуляции библиотек vms. когда вы вернете его и запустите на * nix, замените вызовы библиотеки vms собственными/переносимыми вызовами для * nix.

Кроме того, если в коде много оптимизаций, т.е. встроенная сборка и битовая перестановка. тогда вам придется переписать этот код, что потребует понимания арки VAX. также. обязательно проверьте разницу в размере слов и различия в порядке следования байтов

person Community    schedule 26.11.2009