Переход с VMS на Unix
Однажды команда парней села и написала приложение на C, работающее на VMS на VAX. Это было довольно важное мероприятие, и оно выполняло довольно важную внутреннюю операцию в LargeCo. Весь этот шебанг работает так хорошо, что двадцать пять лет спустя он все еще пыхтит и делает свое дело.
Проходит время, и люди уходят на пенсию, и так получается, что "Последний стоящий человек" передал ключи новому поколению, которое - как мы можем себе представить - менее чем взволновано, обнаружив себя хранителем системы, достаточно старой, чтобы быть их младшим братом. Тем не менее, несмотря на то, что они не в восторге от идеи иметь дело с Ultra Legacy Systems, они не могут оправдать стоимость замены почтенного приложения.
LMS обнаружил, что я хабла unix и задал мне этот вопрос. И так как я хабла юникс, но не говорю, C I обобщит и передаст это вам. Короче:
LMS хочет портировать LegacyApp, написанный на C. из VMS в unix. Ресурсы? Какие книги он может читать? Люди, с которыми он может поговорить?
12 ответов
Первый вопрос, который мне нужно задать, это почему, и я буду вести разговор в направлении "Вам действительно нужно перенести его из 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, все от текущих пользователей.
ОК - вы все еще хотите портировать VMS. Как ты делаешь это? Ну, это зависит от многих вещей.
-> Как уже говорили другие, насколько стандартный код? Скорее всего, не очень. Чем больше VMS-измов, тем сложнее работа. 'достаточно.
-> Что такое база данных? Если это Oracle, возможно, не слишком сложно перейти на Oracle на какой-либо другой платформе. Если это какая-то пользовательская БД, основанная на индексных файлах RMS, то вам нужно проделать дополнительную работу, вам нужно заново создать эту псевдо БД или понять ее достаточно, чтобы заменить ее какой-либо реляционной БД.
-> Помимо C, что еще используется для создания приложения? Что на переднем конце? DECforms? FMS? Есть ли механизм транзакций, например, ACMS? РТР? Эти вещи будут иметь огромное влияние на осуществимость и усилия, необходимые для переноса на UNIX.
-> Какие еще продукты участвуют? Используются ли сторонние библиотеки? Используются ли сторонние продукты, которые важны для приложения или функциональности?
-> Является ли эта система кластерной? Если так, то почему? Вам нужно будет достичь тех же целей с помощью UNIX.
-> Существуют компании, которые помогут вам сделать это, и утверждают, что у них есть инструменты, чтобы сделать это проще, но мой опыт показывает, что эти компании, как правило, продают вам больше услуг, чем продуктов (т.е. вам нужно нанять их, чтобы использовать инструменты. Это будет дорого).
Книга UNIX для пользователей OpenVMS окажет новичку в VMS некоторую помощь в понимании VMS, но, как следует из названия, книга действительно предназначена для противоположной цели.
Все, что написано на VMS, использует множество специфических для VMS вещей, это было так удобно.
Есть несколько компаний, которые продают совместимые библиотеки, чтобы облегчить порт - хотя они не будут дешевыми, VMS, как правило, используется там, где надежность важнее, чем стоимость.
Другой вариант - запустить openVMS на некотором современном оборудовании, возможно, на виртуальной машине.
Я уверен, что Брайан уже принял решение, но из-за моих грехов работы в течение многих лет в языковой поддержке DEC OpenVMS (да, некоторые люди имели эту сомнительную честь), реальный вопрос, который я бы задал клиенту, такому как Брайан, это: это приложение в реальном времени или нет? Если это первый, то он будет сильно зависеть от многих системных сервисов VMS, которые исключают "порт" и указывают на перезапись. Если бы это было последнее, то частота системных служб VMS должна (возможно) быть ограниченной и сделать порт жизнеспособным.
Для меня кислотным тестом будет поиск SEARCH *.c "SYS$", "LIB$", т. Е. Поиск во всех исходных файлах C тегов "SYS $" и "LIB $", которые ставят префикс системных служб VMS. Если их количество указано в 10 с, то, вероятно, вероятно, что порт, от 10 до 100, делает это вероятным, но более 100 делает успешный порт крайне маловероятным.
Надеюсь это поможет
Если вы хотите продолжать работать с VMS на виртуальной машине, вы можете обратиться к CHARON-VAX ( http://www.charon-vax.com/). Как упоминалось ранее, простота портирования действительно во многом зависит от того, сколько расширений VMS было использовано; поиск в исходном коде $ символов, встроенных в строки (обычно с 3-символьной ведущей подстрокой, такой как lib$gettime или dsc$descriptor или sys$foobar и т. д.), даст вам хотя бы базовое представление о том, как называются системные функции VMS и насколько вероятно, что они будут переносимы, если название достаточно очевидно.
У вас есть несколько вариантов.
Получите исходный код OpenVMS и продолжайте поддерживать Open VMS, как если бы это был дистрибутив Linux. Некоторые люди не против идти в ногу с дистрибутивами Linux и OpenVMS. Это может быть сделано.
Попробуйте перекомпилировать VMS C в Linux. Это может быть тривиально, если C использует только стандартные библиотеки. Это может быть очень и очень сложно, если C использует много библиотек VMS.
Когда у вас есть факты, вы можете пересмотреть этот порядок действий. Поскольку вы не перечислили кучу методов библиотеки VMS, которые использует эта программа, невозможно сказать, насколько она запуталась в ОС.
Это может быть тривиально или невозможно. Трудно сказать без анализа источника.
Написать мостовые библиотеки из VMS в Linux. Если ваша программа делает только несколько вещей VMS, это не очень сложно. Если ваша программа делает обширные вещи VMS, это безумие.
Мост - в конечном счете - ужасная идея. Менеджерам это нравится, однако.
Альтернатива - заменить вызовы библиотеки VMS правильными переносимыми вызовами Linux, а не записывать мосты. Это лучше в долгосрочной перспективе, потому что это исключает непереносимые функции программы.
Переписать его с нуля в Python. Это обычно проще, чем пытаться портировать код на Си. Это будет короче, чище, проще и портативнее.
Если это не сломано, не исправляйте это! Зачем переносить или переносить приложение, если не нужно? Почему бы не запустить его на текущей установке OpenVMS, работающей на сервере HP Itanium; это предполагает, что вы хотите обновить оборудование, что может даже не потребоваться, если ваше оборудование VAX все еще работает.
Брайан, я не уверен, что LMS указал / заботился о портировании C-кода или ВЕСЬ процесс. Как часто люди думают о языках вне системы.
Если был процесс, построенный на VMS, то, скорее всего, он использовал хотя бы средства планирования / пакетирования, которые часто пишутся в DCL (довольно простой и понятный язык, в отличие от сценариев оболочки или perl).
Таким образом, стоимость переноса всего процесса может быть выше, чем изначально воспринимается вашей LMS. Добавьте сюда аспект надежности, учитывая ваши трудности с C, что, конечно, не является чем-то невозможным, с энтузиазмом и решительностью.
Если вы хотите просто попробовать C-код, как было ранее опубликовано, найдите его по "$". Или просто cc со всеми присутствующими заголовками, основы команды compile-link должно быть достаточно.
С другой стороны, это похоже на вызов консультанта, так как на самом деле таких работ было много во время "исхода". Все говорят, что VMS остается довольно надежной платформой (24x7 - это норма!), Если только аппаратное обеспечение не умирает, тогда все еще остается масса "исходных" запчастей. УДАЧИ!
Примерно через полтора года, может быть, вы уже поняли, что делать. Моя организация недавно решила придерживаться OpenVMS вместо того, чтобы переходить на Linux, даже если старая гвардия недавно ушла. Мы просто не могли спорить с тем, что, по нашему мнению, было очень стабильной и надежной системой. В настоящее время мы переходим с серверов Alpha на серверы Integrity по причинам, связанным с окончанием срока службы. HP очень помогла с нашим переходом.
В этом отношении могут быть поставщики Linux, которые могут помочь с переходом. Спросите своего нового поставщика оборудования, есть ли у них какие-либо рекомендации.
Чтобы выучить C, вы также можете перетащить его изо рта лошади: "Язык программирования C" от его изобретателей, Кернигана и Ричи.
Я могу порекомендовать "Среду программирования UNIX" (снова) Брайана Кернигана; более авторитетный источник вы вряд ли найдете, и он научит вас и идиомам Unix/C и немного программированию на C одновременно.
Для большей глубины и подробностей о Си мне очень понравилась книга Питера ван дер Линдена "Экспертное программирование на Си - секреты глубоких Си".
Вы также захотите использовать LMS для документации библиотеки специфичных для VMS функций C, с особым акцентом на те, которые фактически используются в приложении. Вот где будут ваши усилия по переносу.
Работа может быть простой или сложной, в зависимости от того, сколько сделано машинного умения и бит-твидлинга, и сколько системных вызовов VMS используется. Было бы очень хорошо, если бы размер слова был равен (другими словами, если ваш ящик VMS имеет размер слова 32 бита, не запускайте код на 64-битной версии Unix!)
В зависимости от того, какие языки вы уже знаете, C не так сложно выучить. Я учил себя C в процессе изучения C++ после того, как, наконец, вырвался из Pascal. (VAX Pascal, плюс Rdb/VMS, плюс DCL сформировали комбинацию, которую было трудно победить.)
Если программное обеспечение типично C, вы потратите больше времени на изучение функций библиотеки, чем на изучение языка.
Это довольно легкий материал, но я просмотрел онлайн-руководства по C++, которые Microsoft делает доступными в сочетании с экспресс-выпуском Visual Studio для C++.
Вот учебник для начинающих:
Вероятно, стоит попытаться спросить, почему LMS хочет перенести приложение на Unix. Ответ может показаться очевидным, но правильное изучение причин имеет свои преимущества. Я бы предположил:
- OpenVMS - это "ультра унаследованная платформа", и по этой причине уже не стоит запускать приложения;
- Трудно найти кого-либо, кто хочет поддерживать приложение, работающее в OpenVMS в эти дни;
- Аппаратное обеспечение, на котором работает OpenVMS, грозит стать умирающим.
У нас похожая проблема, но в нашем случае рассматриваемое приложение не только работает на OpenVMS, но и написано на языке COBOL. Я бы сказал, что по сравнению с вами ваша ситуация выглядит радужно, поскольку ваше приложение написано на кроссплатформенном языке.
В любом случае, я думаю, что если вы собираетесь принять важное решение, например, перейти с OpenVMS на Unix, было бы разумно провести небольшую юридическую проверку. В вашем случае попытайтесь оценить, насколько переносимым является код - только тогда вы узнаете, каков масштаб усилий (наихудший случай вполне может быть кратным лучшему). В C переносимость кода в основном зависит от зависимостей - они "стандартные" или они специфичны для VMS?
Наши запросы показали, что HP будет поддерживать OpenVMS на Itanium, по крайней мере, до 2022 года. Не обязательно переходить на другую платформу - возможно, вы могли бы оставить вещи на OpenVMS, одновременно пытаясь подготовить приложение к переносу (сделать это меньше зависит от специфики OpenVMS).
В VMS есть удивительно здоровое сообщество, и если проблема заключается в нехватке Unix, то, возможно, GNV поможет преодолеть разрыв?
У тебя есть несколько вариантов. если этот код нужно перенести довольно быстро, я бы написал библиотеку мостов для эмуляции библиотек vms. когда вы снова включите его и запустите на *nix, затем выполните замену вызовов библиотеки vms на собственные / переносимые вызовы для *nix.
Также, если в коде много оптимизаций, то есть встроенная сборка и битовое перемешивание. тогда вам придется переписать этот код, который потребует понимания архитектуры VAX. также. не забудьте проверить различия в размерах слов и порядковые номера