Переход от VMS к Unix

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

Время проходит, и люди уходят в отставку, и так получилось, что Last Man Standing перевернул ключи к новому поколению, которые, как мы можем себе представить, меньше, чем взволнованы, чтобы найти себе воспитателей системы, достаточно старой, чтобы быть их младшим братом, Тем не менее, поскольку они недовольны идеей работы с Ultra Legacy Systems, они не могут оправдать затраты на замену почтенного приложения.

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

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

Ответ 1

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

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

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

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

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

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

  • OK - вы все еще хотите отключить VMS. Как ты делаешь это? Ну, это зависит от множества вещей.

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

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

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

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

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

  • Пишите библиотеки мостов из VMS в Linux. Если ваша программа делает только несколько вещей VMS, это не очень сложно. Если ваша программа делает обширные вещи VMS, это сумасшествие.

    Мост - в конечном счете - ужасная идея. Менеджеры любят это, однако.

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

Для большей глубины и детализации на C я искренне наслаждался книгой Питера ван дер Линдена: "Программирование экспертов C - Deep C Secrets".

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

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

Ответ 8

Брайан, я не уверен, что LMS указывает/заботится о C-коде порта или процессе WHOLE. Поскольку слишком часто люди думают о языках из объема систем.

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

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

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

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

Ответ 9

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

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

Ответ 10

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

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

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

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

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

Ответ 11

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

  • OpenVMS - это "ультранаучная платформа", и по этой причине сама по себе это то, что больше не стоит запускать приложение;
  • Трудно найти любого, кто хочет поддерживать приложение, которое работает в OpenVMS в эти дни;
  • Аппаратное обеспечение, на котором работает OpenVMS, угрожает стать негодным.

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

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

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

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

Ответ 12

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

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