﻿# Запуск PVS\-Studio на Linux возможен?

Возможность запуска PVS\-Studio на Linux время от времени интересует наших пользователей\. Сегодня мы готовы рассказать о своих исследованиях в этом направлении\.


> Хорошие новости, друзья\\\! Запуск PVS\\\-Studio на Linux возможен с октября 2016 года\\\! Использовать анализатор можно в Ubuntu, Debian, OpenSUSE, CentOS, Fedora, Gentoo и многих других дистрибутивах, основанных на ядре Linux\\\. Установить анализатор можно с помощью пакета или распаковать из архива\\\. Ознакомиться с новостью о выходе PVS\\\-Studio для Linux вы можете по \[ссылке\]\(https://pvs\-studio\.ru/ru/blog/posts/0441/\)\\\. Статья о разработке анализатора под эту платформу доступна \[здесь\]\(https://pvs\-studio\.ru/ru/blog/posts/cpp/0451/\)\\\.

## Введение, или краткая анатомия PVS\-Studio

Итак, анализатор кода PVS\-Studio состоит из следующих частей: 

* ядро анализатора в виде исполняемого файла PVS\-Studio\.exe;
* кучка плагинов для Visual Studio в виде набора dll для VS 2012, 2010, 2008 и 2005;
* внешний препроцессор cl\.exe \(из Visual C\+\+\), clang\.exe \(из Clang\) или какой\-нибудь еще вроде gcc\.exe \(из MinGW\)\.

Препроцессор нужен для того, чтобы разобрать все \#define и \#include\. Результат работы препроцессора поступает в ядро анализатора \(консольное приложение\)\. Анализатор строит дерево кода, продвигаясь по которому выявляет известные ему паттерны ошибок\. Результат работы анализатора в виде набора сообщений об ошибках уже попадает плагину для Visual Studio\. И уже плагин проводит дополнительную фильтрацию сообщений, позволяет обеспечивать легкую и удобную навигацию и еще много чего другого\.

Для того чтобы запуститься на другой системе \(читай на Linux\) нужно иметь там как минимум препроцессор и ядро анализатора \(файл PVS\-Studio\.exe\)\.  Как же поступили мы?

## Вперед на Linux?

Вообще\-то пока у нас нет планов делать родную Linux\-версию PVS\-Studio прежде всего по коммерческим соображениям\. Мало кому удается построить бизнес на продаже инструментов для разработчиков под Linux, и мы явно не те, кто кинется в этот омут с головой\. Однако иногда пользователи спрашивают об этом, и мы решили все\-таки исследовать данный вопрос\.

Так вот в качестве препроцессора мы, конечно же, стали использовать родной для Linux gcc\. Благо опыт запуска под MinGW позволил нам это сделать практически без модификаций\. В итоге довольно быстро мы научились получать препроцессированные файлы\.

Затем надо было "скормить" препроцессированные файлы в PVS\-Studio\.exe\. Сделать это на Windows\-машине оказалось довольно легко\. Конечно же был ряд вопросов с путями файлов и еще некоторые нюансы, но в целом это получилось\. Затем оказалось интересно запустить PVS\-Studio именно в Linux\-окружении для того, чтобы можно было легко интегрироваться в Makefile\. 

Переносить код PVS\-Studio на Linux очень не хотелось, так как это большая и неблагодарная задача\. Поэтому мы взяли Wine\. С его помощью оказалось довольно легко запустить анализатор, пройти ряд внутренних тестов\. После чего мы сразу начали встраивать вызов PVS\-Studio в Makefile одного из open source проектов\.

Должен обратить внимание, что мы это делали со специальной версией PVS\-Studio\.exe, в которой кое\-что было отключено, а что\-то переделано\. То есть взять PVS\-Studio\.exe из [дистрибутива](https://pvs-studio.ru/ru/pvs-studio/download/) у вас, скорее всего не получится\. Хотя возможно в будущем в дистрибутиве будет идти версия, которая может работать сразу же под Wine из коробки\.

Так вот, выполнив ряд модификаций в коде PVS\-Studio и сделав несколько костылей и обвязок мы все\-таки запустились с помощью Wine в родном Linux\-окружении\. Причем мы, как и хотели, интегрировались в Makefile реального проекта\! Подробнее о том, как интегрировать PVS\-Studio в произвольный Makefile и сборочную систему, можно почитать в [документации](https://pvs-studio.ru/ru/docs/manual/0006/)\.

После такого запуска у нас появился текстовый лог\-файл, который можно открыть в Visual Studio с помощью PVS\-Studio и получить обработанный plog\-файл  с сообщениями, загруженными в PVS\-Studio Output Window\. Конечно, навигация на Windows\-системе не работает в этом случае, так как пути файлов записаны в Unix\-формате, но их можно вручную преобразовать в Windows\-формат\.

Однако важно другое\. Принципиальная возможность запуска PVS\-Studio на Linux в родном сборочном окружении есть\! Более того, в принципе, возможно реализовать \(уже как отдельная задача\) некий UI для работы с текстовым логом анализа на Linux\. То есть сделать аналог PVS\-Studio Output Window для Linux\.

## Обращение к пользователям

Если кто\-то из наших пользователей заинтересован в развитии PVS\-Studio в сторону Linux и публичном релизе этой функциональности, сообщите нам\. Правда не надо забывать, что это требует большой внутренней разработки от нас\. Ведь одно дело запустить PVS\-Studio\.exe и пройти пару проектов и совсем другое обеспечить полноценную работу такой версии вместе с тестированием на большом количестве проектов\.