Портирование ПО под Astra Linux и РЕД ОС: адаптация программы под доверенные ОС

Доводим ваш продукт до состояния, в котором он собирается, ставится и работает на Astra Linux и РЕД ОС: разбираем зависимости, переписываем то, что привязано к Windows, собираем пакеты deb и rpm, настраиваем автотесты и сборку на целевой ОС. Работаем на ваших стендах и в вашем репозитории, сборочный конвейер остаётся у вас: следующую версию ваша команда собирает без нас. Сертификацию и подачу в реестр ведёт правообладатель, то есть вы: мы готовим продукт к ней.

Обследование продукта — 200 000 ₽, 2–3 неделиИсходники и сборочный конвейер остаются у васПодачу в реестр ведёте вы

Зачем это нужно

С чем приходят разработчики

Заказчик требует отечественную ОС

В документации закупки появилась строка про Astra Linux или РЕД ОС, а продукт много лет жил на Windows.

Собирается только на одной машине

Сборка держится на окружении конкретного разработчика. Портировать нечего, пока непонятно, как продукт вообще собирается.

Не стартует на защищённой редакции

На обычной сборке работает, на защищённой при включённых механизмах ОС молча не запускается. Условия проверяем по документации вашей редакции.

Падает на правах и метках

Приложение не может прочитать или записать то, на что рассчитывало, и в журнале это не похоже на проблему прав.

Зависимостей нет в репозитории

Библиотека, которая на Windows ставилась одной командой, в репозитории целевой ОС отсутствует или лежит в другой версии.

Интерфейс написан под Windows

WinForms, WPF и Win32 на Linux не запускаются. Это самая недооценённая часть работы, и её видно только после разбора.

Что ломается

Что ломается при переносе приложения на Linux

Типовые места, где продукт ведёт себя иначе. Что именно затронет ваш, видно после обследования. Построчный список проверок — в чек-листе для разработчика.

Что ломается
Как проявляется
Как проверяем
Что делаем
Что ломаетсяЗависимости и версии библиотекнативные и управляемые
Как проявляетсяБиблиотека не найдена или отличается по версии; бинарник, собранный на новой ОС, не стартует на старой
Как проверяемСписок зависимостей инструментами, сборка и запуск на чистой машине целевой ОС
Что делаемФиксируем версии, берём пакеты из репозитория ОС; чего нет — собираем сами или заменяем. Собираем на самой старой целевой версии
Что ломаетсяПути, права, регистр имёнфайловая система
Как проявляетсяФайл не найден из-за регистра, запись в каталог установки запрещена, скрипты с переводами строк Windows не запускаются
Как проверяемЗапуск от непривилегированного пользователя, прогон на Linux-файловой системе
Что делаемКаталоги по соглашению ОС (/opt, /etc, /var/lib, /var/log), права файлов в пакете, окончания строк в скриптах
Что ломаетсяСлужбы и автозапусквместо служб Windows
Как проявляетсяНет управляемого запуска, остановки и перезапуска после сбоя
Как проверяемЗапуск, остановка, перезагрузка машины и падение процесса под systemd
Что делаемЮнит systemd, отдельный пользователь, каталоги состояния и журнала
Что ломаетсяГрафика и шрифтыинтерфейс и отчёты
Как проявляетсяОкна и отчёты выглядят иначе, нет привычных шрифтов, перенос строк в печатных формах другой
Как проверяемСнимки экрана на целевых ОС, проверка подстановки шрифтов
Что делаемПодбираем метрически совместимые шрифты, проверяем их лицензии, фиксируем вывод отчётов
Что ломаетсяКодировки, локаль, времятексты и даты
Как проявляетсяНечитаемые символы, другой порядок сортировки, время в неожиданном поясе
Как проверяемПрогон на локали ru_RU.UTF-8 и на пустой локали службы, тесты на часовые пояса
Что делаемUTF-8 везде, локаль задана в юните, время хранится в UTC
Что ломаетсяСеть и портыдоступность
Как проявляетсяПорты ниже 1024 недоступны без привилегий, соединение режет межсетевой экран, прокси не учтены
Как проверяемСписок прослушиваемых портов, правила экрана, выход на внешние адреса
Что делаемПорты без привилегий или явное разрешение, таблица портов в документации
Что ломаетсяЗащитные механизмы ОСмандатный доступ, замкнутая среда
Как проявляетсяОтказы в доступе без понятной причины, неподписанные программы и модули не запускаются
Как проверяемПрогон на стенде вашей редакции с включёнными механизмами; сверяем с документацией редакции
Что делаемПодпись собственных сборок и описание того, что продукт читает, пишет и запускает; процедуру подписи согласуем с владельцем контура
Что ломаетсяУстановка и обновлениевместо MSI
Как проявляетсяУстановщик Windows не работает, обновление теряет настройки, удаление оставляет файлы
Как проверяемУстановка, обновление, откат и удаление на чистой машине
Что делаемПакеты .deb и .rpm, файлы настроек вне перезаписи, скрипты установки
Что ломаетсяWindows-специфичный кодреестр, COM, службы, Win32
Как проявляетсяОбращения к функциям, которых на Linux нет
Как проверяемПоиск обращений к Windows API в исходниках
Что делаемЗаменяем средствами ОС или переписываем по частям. Запуск через слой совместимости портированием не считаем
Что ломаетсяКриптография и СКЗИподпись, шифрование, TLS
Как проявляетсяПродукт использует криптопровайдер Windows
Как проверяемКакие алгоритмы и средства требует ваш контур
Что делаемБерём средства ОС и сертифицированные СКЗИ, требования зависят от контура; свою криптографию не пишем
Стек

Что с вашим стеком: что едет почти как есть, а что переписывается

Оценки качественные: объём работы называем только после разбора вашего кода.

Стек продукта
Что обычно происходит
Что проверяем
Что делаем
Стек продукта.NET FrameworkWinForms, WPF
Что обычно происходитНе переносится: интерфейс переписывают, а не адаптируют
Что проверяемЧисло окон, зависимость от Windows API
Что делаемОтделяем логику от интерфейса, логику переносим, интерфейс переписываем
Стек продукта.NET 6 и новееслужбы, консоль, веб
Что обычно происходитКод чаще переносится, переделываются пути, служба и упаковка
Что проверяемНативные библиотеки, обращения к Windows
Что делаемСборка под Linux, юнит systemd, пакет
Стек продуктаJavaOpenJDK
Что обычно происходитОбычно запускается с небольшими правками
Что проверяемВерсия JDK в репозитории ОС, шрифты, хранилище сертификатов
Что делаемФиксируем версию, проверяем графику и сертификаты
Стек продуктаPython, Node.jsскрипты и сервисы
Что обычно происходитЧистый код едет, сложности — в нативных модулях и версиях интерпретатора
Что проверяемВерсии интерпретатора, сборка нативных расширений
Что делаемФиксируем версии, зависимости упаковываем или берём из внутреннего репозитория
Стек продуктаC, C++, Qtнативные приложения
Что обычно происходитПересборка под набор инструментов ОС, различия в версиях библиотек
Что проверяемВерсии компилятора и Qt, предупреждения сборки
Что делаемПереводим сборку на CMake или аналог, фиксируем версии
Стек продуктаGo, Rustстатические сборки
Что обычно происходитСтатическая сборка упрощает, но нативные вызовы остаются
Что проверяемИспользование C-библиотек, версии системных библиотек
Что делаемКросс-сборка и запуск на целевой ОС
Упаковка

Как выглядит сборка пакетов под обе ОС

Один исходный код, один сборочный конвейер, два формата пакета. Описание сборки живёт в вашем репозитории.

Что
Astra Linux
РЕД ОС
Что остаётся у вас
ЧтоФормат пакета
Astra Linux.deb, менеджер apt и dpkg
РЕД ОС.rpm, менеджер dnf (yum) и rpm
Что остаётся у васОба пакета собираются из одного дерева исходников
ЧтоОписание сборки
Astra LinuxКаталог debian: control, rules, скрипты установки
РЕД ОСФайл .spec
Что остаётся у васФайлы сборки в вашем репозитории
ЧтоСлужба
Astra LinuxЮнит systemd, включается при установке
РЕД ОСЮнит systemd
Что остаётся у васОдин и тот же юнит с поправками под ОС
ЧтоФайлы настроек
Astra LinuxПомечаются как настройки, не перезаписываются при обновлении
РЕД ОСТо же через атрибут config(noreplace)
Что остаётся у васАвтотест на сохранение настроек при обновлении
ЧтоПроверка пакета
Astra Linuxlintian и установка на чистую машину
РЕД ОСrpmlint и установка на чистую машину
Что остаётся у васПроверки запускаются в вашем конвейере
ЧтоПодпись
Astra LinuxПодпись пакетов и, для защищённой редакции, исполняемых файлов по правилам редакции
РЕД ОСПодпись пакетов по правилам вашего репозитория
Что остаётся у васКлючи и процедура подписи — у вас
ЧтоРепозиторий пакетов
Astra LinuxРепозиторий deb в вашем контуре
РЕД ОСРепозиторий rpm в вашем контуре
Что остаётся у васУстановка с нуля из вашего репозитория
Что делаем

Из чего состоит работа и сколько стоит

Цены — по тарифам. Обследование вычитается из следующего этапа. Остановиться можно после любой ступени, всё сделанное остаётся у вас по акту.

Обследование: один продукт

Инвентаризация языков, зависимостей и сборки, поиск обращений к Windows API, пробная сборка на целевой ОС. На выходе: что переносится сразу, что придётся переписывать, вилка бюджета. 2–3 недели.

200 000 ₽

Пилот лёгкий

Сборка, пакет и запуск ключевого сценария на одной ОС, автотест установки и запуска. Для продуктов на переносимом стеке. 2–8 недель.

150 000–400 000 ₽

Пилот тяжёлый

Сложные продукты: переписывание частей, привязанных к Windows, обе ОС, стенд защищённой редакции, интеграция в ваш конвейер. 2–3 месяца.

400 000–1 200 000 ₽

Вывод в продуктив

Портирование продукта целиком по этапам со своей приёмкой: конвейер сборки и тестов на целевых ОС, документация, передача команде. От 3 месяцев.

от 1 500 000 ₽ этапами по 300 000–700 000 ₽

Сопровождение

Поддержка новых версий целевых ОС и новых выпусков вашего продукта: пересборка, проверка, правки. Три пакета по часам.

20 000 / 60 000 / 120 000 ₽ в месяц
Процесс

Как идёт работа

Недели 1–3 — Обследование

Разбираем состав продукта и сборку, пробуем собрать на целевой ОС, находим обращения к Windows. Согласуем целевые ОС и редакции: портирование под одну и под три ОС отличается по объёму.

Пилот — один сценарий на одной ОС

Собираем пакет, ставим на чистую машину, запускаем от непривилегированного пользователя и проверяем ключевой сценарий. Фиксируем автотест установки и запуска.

Этап — сборочный конвейер

Сборка и тесты на целевых ОС в вашем конвейере, пакеты deb и rpm, внутренний репозиторий, подпись. Описание сборки лежит в вашем репозитории.

Этап — Windows-специфичный код

Замена обращений к реестру, службам, COM и Win32 средствами ОС или переписывание частей. Интерфейс на WinForms и WPF переписывается отдельным этапом.

Этап — защитные механизмы и вторая ОС

Стенд защищённой редакции с включёнными механизмами, подпись собственных сборок, РЕД ОС и дополнительные версии. Сценарии проходят на каждой заявленной ОС.

Передача — документация и конвейер

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

Приёмка

Что считаем готовым

Готовность проверяется предметами, а не заявлением. Для каждой целевой ОС и редакции проверяется следующее:

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

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

Контроль

Что остаётся у вас и чего мы не делаем

Остаётся у вас

  • Исходники и сборочный конвейер в вашем репозитории.
  • Рецепты пакетов, скрипты, описание окружения и стенды.
  • Ключи и процедура подписи сборок.
  • Документация и право остановиться после любой ступени.

Мы этого не делаем

  • Не проводим сертификацию и не подаём заявку в реестр: готовим продукт, подаёт и проходит её правообладатель.
  • Не выдаём заключение о совместимости: его выдаёт производитель ОС.
  • Не проводим аттестацию и не выполняем лицензируемые работы по защите информации: лицензии ФСТЭК у нас нет.
  • Не называем срок до разбора зависимостей и не считаем портированием запуск через слой совместимости.
  • Не берём работы дешевле 150 000 ₽.
Инструменты

На чём собираем и проверяем

Целевые системы и упаковка
  • Astra Linux: Common Edition и Special Edition по задаче
  • РЕД ОС, по договорённости ALT
  • dpkg и debhelper для .deb, rpmbuild для .rpm
  • systemd для служб
Сборка и проверка
  • Сборка по стеку: dotnet, Maven или Gradle, CMake
  • Виртуальные машины с целевой ОС
  • Автотесты установки, запуска и обновления
  • lintian, rpmlint, systemd-analyze verify
Честно

Где такие проекты ломаются

Тестировали на обычной сборке

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

Собрали на новой ОС

Бинарник, собранный на новой версии системных библиотек, не запустится на старой. Сборку нужно вести на самой старой из целевых версий.

Установщик оставили на потом

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

Материалы

Что почитать по теме

Чек-лист

Портирование под Astra Linux: чек-лист для разработчика

Стадии работы: от инвентаризации до тестов в конвейере, с признаком готовности для каждой.

  • сборка и пакеты
  • права и защитные механизмы
  • тесты на целевой ОС
Читать →
Статья

Переход на Astra Linux: что ломается

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

  • защищённая редакция
  • что с оборудованием
Читать →
Статья

Реестр отечественного ПО: что требуется от продукта

Какую часть требований закрывает портирование, а какую решает правообладатель.

  • техника и не только
  • сроки заключений
Читать →
Заявка

Разберём ваш продукт

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

Спасибо, заявка отправлена. Ответим в течение рабочего дня.

Не удалось отправить. Напишите в телеграм или позвоните.

Вопросы

Частые вопросы: портирование по под astra linux и ред ос

Сколько стоит портирование ПО под Astra Linux?

Точная цена называется за обследование одного продукта: 200 000 ₽. Дальше вилка: лёгкий пилот 150 000–400 000 ₽, тяжёлый 400 000–1 200 000 ₽, вывод в продуктив от 1 500 000 ₽ этапами по 300 000–700 000 ₽. Обследование вычитается из следующего этапа.

Сколько времени занимает портирование?

Срок называем после разбора зависимостей: пока не видно, на чём написан продукт и от чего он зависит, любой срок будет взят с потолка. Для ориентира по тарифам: лёгкий пилот занимает 2–8 недель, тяжёлый 2–3 месяца, вывод в продуктив от трёх месяцев.

Вы подаёте заявку в реестр и проводите сертификацию?

Нет. Мы готовим продукт: сборка, пакеты, совместимость, документация и материалы для заключения. Заявку подаёт и процедуру проходит правообладатель, заключение о совместимости выдаёт производитель ОС по своей программе.

Можно ли запустить Windows-программу через слой совместимости?

Это не портирование: продукт остаётся Windows-программой со своими ограничениями по поддержке и безопасности. Допустим ли такой вариант у вас, зависит от требований заказчика и производителя ОС. Мы такой путь не строим, мы делаем нативную сборку.

Нужны ли исходники продукта?

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

Что с WinForms и WPF?

Они не переносятся на Linux. Интерфейс переписывается, а логику, как правило, удаётся сохранить. Объём работы называем после обследования: он зависит от числа окон и от того, насколько логика отделена от интерфейса.

Как вы работаете с защищённой редакцией Astra Linux?

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

Можно ли делать Astra Linux и РЕД ОС одновременно?

Да, и так обычно дешевле. Один исходный код и один конвейер дают два пакета: .deb для Astra Linux и .rpm для РЕД ОС. Список целевых ОС и редакций согласуем на обследовании.

Что останется у нас после работ?

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

Вы работаете только в Ростове-на-Дону?

Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.