Представьте, что расчёт вашей пенсии или миллионы банковских транзакций обрабатываются кодом, написанным до полёта человека в космос. COBOL живёт в мэйнфреймах банков, страховых и госслужб, и отказаться от него рискованно: один баг — и вся финансовая система может остановиться. 

Как старейший «серверный» язык справляется с XXI веком, где безопасность и гибкость важнее вечной стабильности?

Почему COBOL так живуч

Уже более 60 лет помогает бухгалтерии и финансам. Настроен на надёжность, читаемость и лёгкость (по меркам того времени), это и позволило стать стандартом в отрасли. Речь об одном из давних ЯП, которым пользуются по сей день.

COBOL по-прежнему играет ключевую роль в банковской и государственной сферах, и этому есть несколько объективных объяснений.

Во-первых, объём «живого» COBOL-кода впечатляет: только в банковском секторе в 2024 году задействовано свыше 200 млрд строк, а через эти системы ежедневно прокатываются транзакции на сумму до $3 трлн. Фактически, около 70% всех мировых бизнес-операций осуществляется с помощью COBOL-программ, от расчёта процентов по депозитам до массовых выплат заработных плат и социальных пособий.

Во-вторых, COBOL-модули глубоко вплетены в инфраструктуру мэйнфреймов и специализированных платформ — CICS для транзакционной обработки, DB2 для хранения данных, MQ для обмена сообщениями. За десятилетия каждая строка кода отточена под жёсткие регуляторные требования и содержит уникальную бизнес-логику. Переписывать это «с нуля» означает рисковать остановкой критичных сервисов, миллиардами штрафов и коллапсом доверия клиентов. Опыт европейских банков показывает: даже сокращение объёма COBOL-программ с 57 000 до 27 000 штук заняло несколько лет, и полностью отказаться от языка так и не удалось.

Пример базовой COBOL-программы
Пример базовой COBOL-программы

И, наконец, кадровый дефицит. Сегодня больше двух третей инженеров, которые поддерживают эти системы, находятся на пороге выхода на пенсию. А значит, институциональная память утекает с каждым годом, а учебные программы по COBOL давно сокращены до минимума. Поэтому большинство организаций выбирает не революцию, а эволюцию: автоматизируют рутинные задачи, оборачивают старые транзакции в современные API, интегрируют фрагменты мэйнфрейма с облачными сервисами и прибегают к ИИ-решениям для анализа и рефакторинга существующего кода. 

Источник.

Архитектура в действии: мэйнфрейм как сердце транзакций

В современной архитектуре банковских и государственных ИТ-систем мэйнфрейм с COBOL-приложениями выступает не просто вычислительным бэкендом, а сердцем всей транзакционной инфраструктуры. Рассмотрим четыре ключевых компонента, без которых невозможна ни одна серьёзная финансовая операция:

CICS (Customer Information Control System)

Это «транзакционный контролёр» мэйнфрейма. CICS гарантирует атомарность операций: либо весь набор действий выполняется целиком, либо при сбое система откатывает всё к исходному состоянию. Благодаря этому даже миллионы параллельных платежей и переводов обрабатываются без ошибок, потери данных или «двойных списаний».

Компоненты CICS и их взаимосвязь. Источник.
Компоненты CICS и их взаимосвязь. Источник.

DB2

Промышленная СУБД IBM, на которой лежат все главные фонды данных: банковские счета, история транзакций, профили клиентов и нормативные реестры. DB2 умеет масштабироваться на десятки узлов в кластере, обеспечивать онлайн-обработку гига- и терабайт данных с минимальными задержками (OLTP) и мгновенно восстанавливаться после любых «откатов».

Классическая архитектура доступа к IBM DB2. Источник.
Классическая архитектура доступа к IBM DB2. Источник.

IBM MQ (Message Queue)

Надёжный мост между «наследственными» COBOL-сервисами и современными микросервисами, мобильными и веб-приложениями. MQ обеспечивает гарантированную, асинхронную доставку сообщений, сохраняя порядок и целостность данных даже при пиковых нагрузках.

Архитектура сервера IBM MQ. Источник.
Архитектура сервера IBM MQ. Источник.

WebSphere / Liberty / API Gateway

На стыке мэйнфрейма и облака часто располагаются легковесные Java- или Node.js-слои (CSR, API-шлюзы), которые «обёртывают» старый функционал в современные REST- и gRPC-интерфейсы. Так фронтенд или внешние партнёрские системы получают доступ к транзакциям мэйнфрейма через знакомые JSON/XML-схемы, а COBOL остаётся неподвластным изменениям.

Эта связка незаметна для клиентов, но именно она обеспечивает безукоризненную работу всех массовых выплат, начислений и переводов. По данным BMC Mainframe Survey 2024, 42% финансовых организаций наращивают инвестиции в мэйнфреймы, а 46% прогнозируют рост нагрузки в следующем году — доказательство того, что такие «старички» по-прежнему незаменимы для критически важных сервисов.

Уязвимости унаследованного кода

Унаследованный COBOL-код, несмотря на свою репутацию «железобетонного» решения в вопросах транзакционной целостности, изначально не закладывал механизмы защиты от современных атак: в классических программах нет встроенной проверки границ буфера, фильтрации входных данных или жёсткой защиты динамического SQL и JCL‑скриптов. В результате даже банковские модули, написанные когда-то «один раз и навсегда», сегодня подвержены переполнению буфера, SQL‑инъекциям и другим давно известных векторов атаки, которые обманывают устаревшие проверки.

В 2023 году появились и свежие уязвимости: CVE‑2023‑4501 в составе Micro Focus Visual COBOL и Enterprise Server допускала обход аутентификации и давала злоумышленнику путь к критичным функциям. Банки и госструктуры вынуждены экстренно выпускать ночные патч‑релизы, чтобы не допустить простоев и утечек данных.

Дополнительный вызов создаёт то, что большая часть «боевого» COBOL‑кода была написана в эпоху до современных требований к безопасности, а документация к нему зачастую утеряна или устарела. Интеграция SAST/DAST‑сканеров и автоматизированных средств поиска уязвимостей необходима, но далеко не всегда возможна без серьёзной рефакторинг‑работы и перестройки инфраструктуры. Без регулярного аудита кода и внедрения внешних средств контроля такие системы рискуют превратиться из «железобетонных» в «да я тебе зуб даю».

Мягкая модернизация: стратегии без «большого взрыва»

Современная эволюция COBOL‑ландшафта идёт по пути точечного обновления вместо рискованного «взрыва». В основу лёг один трюк: все старые транзакции оборачиваются в лёгкие REST‑ или gRPC‑API. Теперь фронтенд и микросервисы общаются с мэйнфреймом по привычному HTTP, а не копаются в суровом COBOL‑монолите. Такой API-фасад не только упрощает интеграцию, но и сужает зону безопасности до понятных контрактов, а не до сотен тысяч строчек «наследного» кода.

Другой популярный путь — использование transpiler-решений, которые автоматически переводят критичные фрагменты COBOL-кода в современные языки, такие как Java или C#. После чего их поведение в тестах сравнивают с оригиналом, чтобы ничего не слетело. Так постепенно и безопасно «отодвигают» отдельные модули из мэйнфрейма, не потрясая весь фундамент.

Переход с COBOL на Java. Источник.
Переход с COBOL на Java. Источник.

Наконец, растущий тренд — гибридное размещение: «горячие» онлайн‑транзакции продолжают своё дело на доказанном z/OS, а тяжёлые batch‑задачи переселяются в облако. Баланс выдерживается легко: экономятся ресурсы мэйнфрейма, новые сервисы запускаются быстрее, а проверенная бизнес‑логика остаётся под надёжной защитой.

Кейс: страховая компания 

В качестве образцового примера «мягкой» модернизации COBOL‑систем стоит привести проект NN Group — одного из крупнейших европейских страховщиков. Вместе с Deloitte за 23 месяца они поэтапно перенесли свои ключевые страховые приложения с мэйнфрейма на современную Java‑платформу, не прерывая при этом работу сервисов. Сначала провели глубокий аудит существующего COBOL‑кода и составили карту зависимостей, затем автоматизировали рефакторинг и внедрили CI/CD‑конвейер для «плавающего» запуска новых модулей параллельно со старой системой.

Каждый перенесённый компонент проходил строгую многоуровневую валидацию: сравнивали результаты расчётов, прогоны регуляторных сценариев и нагрузочное тестирование. Благодаря этому удалось добиться 100% совпадения бизнес‑логики и одновременно исключить простой — новые и старые сервисы работали бок о бок до полной выкатки.

Офис NN Group. Источник.
Офис NN Group. Источник.

Финальный эффект превзошёл ожидания: затраты на ИТ‑инфраструктуру сократились на 80%, а зависимость от узкоспециализированных COBOL‑разработчиков оказалась полностью устранена. Перенос на Java дал NN Group свободу быстрого старта новых продуктов и интеграции с цифровыми каналами: то, что раньше занимало месяцы, теперь делается за несколько недель. Этот кейс по праву считают отраслевым эталоном прозрачной, безопасной и автоматизированной миграции критичных систем.

Итоги

Источник.

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

Он остаётся незаменимым каркасом для критичных бизнес‑систем, по‑прежнему обрабатывает триллионы транзакций и расчёты социальных выплат. 

Современные компании выбирают не полный переписок, а «мягкую» эволюцию: оборачивают старые процедуры в REST‑ или gRPC‑API, выносят пакетные задачи в облачные функции, а живой COBOL‑код постепенно рефакторят с помощью автоматизированных инструментов. 

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

Слышали что-то про COBOL‑код в последнее время? Делитесь мнением в комментариях!

© 2025 ООО «МТ ФИНАНС»

Комментарии (28)


  1. A1WEB
    09.07.2025 09:44

    11 лет проработал с банковской сфере со страшным легаси. Cobol встречал только в статьях по истории языков программирования...


    1. dv0ich
      09.07.2025 09:44

      Это про западные банки, которые начали компьютеризироваться в 50-60-х годах.


    1. Vytian
      09.07.2025 09:44

      Страшное легаси -- это ПП/БЭСМ. А не эти ваши новомодные фортраны и паскали.


      1. PerroSalchicha
        09.07.2025 09:44

        Паскаль - современник БЭСМ-6, а Фортран постарше на десятилетие будет :)


  1. Octagon77
    09.07.2025 09:44

    Я правильно понимаю, что это задача для ИИ которую он пока не тянет?


    1. needsomedata
      09.07.2025 09:44

      Потянет еще как, переезд на новый язык с сохранением логики это хорошее применение llm


      1. Newbilius
        09.07.2025 09:44

        Видел трансляторы из одного языка в другой без всяких LLM, по итогам работы которых код может был некрасивый, но надёжно рабочий. С LLM будет наоборот скорее всего, красивей, но менее предсказуемо.


      1. SpiderEkb
        09.07.2025 09:44

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

        Мне было интересно посмотреть как оно справится с ситуацией, когда один и тот же модуль в рамках одного задания вызывается (из другого модуля) несколько раз. И для экономии времени с прошлого вызова кешируются какие-то данные. Да-да-да. На AS/400 есть понятие "группы активации" как подмножества задания и все статические и глобальные данные сохраняются пока жива группа активации (пока живет задание или пока ГА принудительно не закрыли).

        Тут с переходом на "современные языки" на другой платформе можно немало веселья отхватить пока придумаешь как все это обойти.

        Ну или работа со специфическими системными объектами типа USER SPACE/USER QUEUE/USER INDEX...

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


  1. SpiderEkb
    09.07.2025 09:44

    в классических программах нет встроенной проверки границ буфера

    Потому что они есть на уровне самой ОС. А еще там есть проверка на переполнение. Из соседней ветки

    Так и случилось в один прекрасный момент несколько лет назад, когда путешествия на Бали (смотри курс индонезийской рупии IDR) стали внезапно стоить сущие центы из-за переполнения. Распродажу Лавочку прикрыли только к утру, когда заметили невероятную популярность клиента Agoda и отелей на Бали, и до исправления просто прекратили (на полгода) принимать платежи в валюте IDR. Убытки, как водится, просто списали, никого не наказали.

    Тогда как в нормальной системе в такой ситуации переполнение вызывает системное исключение "Receiver value too small to hold result"

    Теперь фронтенд и микросервисы общаются с мэйнфреймом по привычному HTTP, а не копаются в суровом COBOL‑монолите. 

    Вообще-то центральный сервер в банке изолирован от внешнего мира достаточно серьезно. Получить какие-то данные от него можно лишь оправив запрос через MQ или вызвав вебсервис на ESB шине. Причем, сам вебсервис тоже внутрь не полезет - он вызовет связанный с ним сервис-модуль, передав ему набор параметров. А потом получит ответ (например, в виде resultset'а). Через MQ примерно также - послылается сообщение с определенным типом и набором данных. Это сообщение будет подхвачено на сервере, далее вызван соответствующий этому типу сообщений обработчик, который выполнит нужные действия и при необходимости отправит в MQ ответное сообщение.

    Никакого http там и близко не лежало. И слабо себе представляю как можно реализовать SQL инъекцию в таком раскладе (SQL там может вообще не быть - есть и другие способы работы с БД, в т.ч. и в COBOL). Да и голый SQL там не используется. Он весь спрятан внутри COBOL кода.

    А если говорить о защите, то та же IBM i (AS/400) имеет несколько уровней защиты самой системы. В том числе и "50" уровень, сертифицированный в США для государственных и военных организаций. И даже на более низком, "40"-м уровне, уже достаточно много ограничений для разработчика (например, запрет низкоуровневой работы через MI инструкции c объектами в домене *SYSTEM - даже если получишь системный указатель на объект, что-то сделать с ним уже не сможешь - только через системные API и никак иначе).

    использование transpiler-решений, которые автоматически переводят критичные фрагменты COBOL-кода в современные языки, такие как Java или C#

    А что там с поддержкой в "современных языках" типов данных, которые лежат в БД? Те же форматы с фиксированной точкой? Читаем запись, потом создаем из ее полей нужные объекты с которыми можно работать? Но, извините, это лишнее время и лишние ресурсы процессора...

    А что там с работой с БД? Только SQL, причем только динамический? Без возможности подготовки запроса на этапе компиляции? И даже по одной таблице по индексированным полям доступ к БД все равно только скулем? Задач, где нужно из одной таблицы прочитать десяток записей по известному значению ключа в реальной жизни достаточно много. И гонять ради этого динамический скуль очень расточительно.

    COBOL (или тот же RPG) создавались специально для максимально эффективного решения конкретного класса задач. И имеют для этого все встроенные средства, являясь по сути специализированными языками.


    1. Kuklachev
      09.07.2025 09:44

      Безопасность лежит не только в области самой системы. Можно иметь сколько угодно безопасную систему, а потом поставить пароль для qsecofr - qwerty, и толку от этой безопасности? Или все через mq, но только никто не подумал, что надо проверять источники сообщений. И все, кто угодно могут отправлять в это mq любые пакеты


      1. SpiderEkb
        09.07.2025 09:44

        А вы уверены, что "любой" пакет будет обработан? :-)

        Вот пример реального сообщения

        // Формат сообщения для HMQ-обработчика
        dcl-ds t_HMQFINNRSP template qualified;
            messageType       char(10);
            requestUID        char(32);
            INN               char(12);
        end-ds;

        messageType - тип сообщения. Он должен быть прописан в таблице настроек движка, который эти сообщения читает из очереди, находит в таблице обработчик и вызывает его, передавая ему сообщение для обработки

        requestUID - это ID запроса в ответ на который получено это сообщение (из внешней системы). На этот ID должна быть запись в таблице отправленных запросов. Если ее нет - сразу на выход.

        Ну и дальше данные.

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

        Просунуть туда что-то левое крайне сложно, если вообще возможно.

        С вебсервисами примерно аналогичная история. Т.е. там нет RPC. Каждый вебсервис (связанный с ним сервис-модуль) или обработчик сообщения выполняет строго определенную функцию и ничего более. И им передаются только параметры. Которые валидируются.

        Физический доступ к серверу - только из внутреннего контура (даже к тестовому) и для очень ограниченного круга лиц. Пароль - не менее 12-ти символов, "3 группы из 4-х", смена не реже чем раз в три месяца.


        1. Kuklachev
          09.07.2025 09:44

          Знание requestid - защита такая себе. Вряд ли это что-то секретное. Ну смысл моей мысли в том, что защита определяется самым слабым компонентом системы. Нет атак на операционку iseries- не значит, что система в целом безопасна


    1. DarthVictor
      09.07.2025 09:44

      Без возможности подготовки запроса на этапе компиляции?

      Компиляции на каком из стендов? То есть я скомпилировал продакшен версию сборки, она с каким из стендов должна компилироваться?

      Только SQL, причем только динамический?

      Есть Prepared Statement есть Stored Functions.

      COBOL (или тот же RPG) создавались специально для максимально эффективного решения конкретного класса задач.

      Эффективного для кого? А то вариант с использованием нормального серверного железа общего назначения видится мне сильно эффективнее. И пофиг что оно будет вдвое менее эффективны из-за необходимости нескольких конвертаций. Зато процессоры будут вдесятеро быстрее из-за больших масштабов производства, а за одно колличество ОЗУ, IOPS-ы на системах хранения данных. И горизонтальное масштабирование проще. И виртуализация при разработке. И поиск разработчиков.


  1. checkpoint
    09.07.2025 09:44

    Помоему это такой способ конкурентной борьбы. IBM вырастила себе поляну и сама её топчет. Как только они переведут свои сервисы на что-то более человечное (Java, Scala) и стандартное x86 железо, их тут же потеснят с этого сочного рынка. Все эти IBM i/z и прочие однобуквенные платформы - типичный пример дичайшего переусложнения. Есть мнение, что эти машины тратят более половины своих вычислительных ресурсов только на организацию многоуровневой виртуализации, трансляцию форматов данных и протоколов между ними.


    1. salnicoff
      09.07.2025 09:44

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

      Это плата за безопасность. Как только все переедет на x86 железо, следом переедет «многоуровневая виртуализация», «трансляция форматов данных и протоколов между ними». Или появятся новые варианты оных. Это как с клавиатурой в банкомате — вроде 12 кнопок, должна стоить копейки, но нет — внутри криптопроцессоры, батарейки для хранения ключей и все залито эпоксидкой с проводками.


      1. checkpoint
        09.07.2025 09:44

        Это не безопасность, это "security through obscurity".


        1. salnicoff
          09.07.2025 09:44

          Никаких «obscurity». Все задокументировано и объяснено, почему именно так сделано.


          1. checkpoint
            09.07.2025 09:44

            Там количество документации умопомрачительное. Прочитать и проанализировать её не сможет ни одна нейросеть в мире. Это ли не "obscurity" ?

            В 90-х года мне доводилось администрировать цифровые телефонны станции Nortel Meridian-1, чем-то они похожи на IBM-овских динозавров. Так вот, документации к Meridian-1 было около 80-ти жирных томов. Что либо найти в них можно было если только ты абсолютно точно уверен в каком именно томе искать. При этом нужно быть хорошо знакомым с используемой терминологией, а она там очень специфическая. IBM это вообще отдельный мир.


      1. PerroSalchicha
        09.07.2025 09:44

        Это как с клавиатурой в банкомате — вроде 12 кнопок, должна стоить копейки, но нет — внутри криптопроцессоры, батарейки для хранения ключей и все залито эпоксидкой с проводками.

        ...при этом в недрах мейфрейма лежит плоский файлик с зарегистрированными в системе PAN (собственно, карточки), а в нём есть поле PIN offset, это произвольное значение, которое перед валидацией прибавляется к сгенерированному по криптографическому алгоритму PINу, и которое позволяет изменить его на любое другое значение. И это обычное числовое поле, открытое и доступное любому, кхм, кобол-программисту с соответствующими правами.


    1. Kuklachev
      09.07.2025 09:44

      Вот именно. Просто исторически на i и z делали много бизнес-приложений. И приходится тянуть это легаси до бесконечности. Я с трудом себе представляю, чтобы сейчас кто-то в здравом уме решил новое приложение с нуля писать именно для IBM


      1. checkpoint
        09.07.2025 09:44

        А их никто и не пишет для IBM кроме самой IBM.


  1. DarthVictor
    09.07.2025 09:44

    В качестве образцового примера «мягкой» модернизации COBOL‑систем стоит привести проект NN Group — одного из крупнейших европейских страховщиков. Вместе с Deloitte за 23 месяца они поэтапно перенесли свои ключевые страховые приложения с мэйнфрейма на современную Java‑платформу, не прерывая при этом работу сервисов. Сначала провели глубокий аудит существующего COBOL‑кода и составили карту зависимостей, затем автоматизировали рефакторинг и внедрили CI/CD‑конвейер для «плавающего» запуска новых модулей параллельно со старой системой.

    История даёт хороший ответ, почему старые продукты живут десятилетиями, а современные по сто раз переписывают. Потому что МОГУТ. Во-первых, на новые ещё не потеряна вся документация, во-вторых, они изначально писались так, что в них проще вносить изменения.


  1. YuriPanchul
    09.07.2025 09:44

    Пост писался с помощью чатгопоты


  1. Fangaro
    09.07.2025 09:44

    Звучит как "кобол знаешь - работу имеешь".


    1. General_Failure
      09.07.2025 09:44

      Ждём новые курсы "войтивайти"?


  1. alekseypro
    09.07.2025 09:44

    Вот что значит "заCOBOLились" :)


  1. olku
    09.07.2025 09:44

    Про COBOL ходит много легенд. Не смотря на то что в статье чувствуется GPT, она их хотя бы не повторяет. Со стека съехали давно кто мог, ничего в COBOL такого уникального нет кроме вендор лока. Это примитивный ЯП, все фишки в библиотеках, которые совсем не опенсорс, и завязаны на конкретный компилятор конкретной ОС.


    1. Kahelman
      09.07.2025 09:44

      Что-то у вас не едет я. Если COBOL это примитивный язык программирования , который был популярен в60-70 годы, то на нем активно писали от силы 20 лет. О его Смерти говорят уже дано, однако за прошедшие 40 лет, избавиться от него не смогли. Похоже это ЯП сделанный как надо для своего класса задач.
      И вопрос на каком языке вы бы переписывали код в 90-х из тех что поддерживаются сейчас?

      По поводу gRPC - сколько лет технологии как с неё мигрировать через 30 лет?

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