Компания "Лаборатория Касперского"
О проекте
KasperskyOS – защищенная микроядерная операционная система. Это не очередной дистрибутив Linux, а собственная разработка, успешно конкурирующая на международных рынках. Заложенный в KasperskyOS принцип кибериммунности позволяет разрабатывать безопасные решения из потенциально небезопасных компонентов.
Об отделе
Разработкой KasperskyOS занимается отдел Secure Platform Development (SPD), состоящий из нескольких групп, которые отвечают за микроядро ОС, драйверы, системные компоненты, подсистему безопасности, средства виртуализации, а также обеспечивают непрерывный контроль качества разработки.
О команде
Команда KSS занимается разработкой средств анализа и трансформации кода: развитием языков (набор dsl) описания политик безопасности, компилятора и языкового сервера для них.
О технологическом стеке команды
Большой проект на Haskell с вкраплениями C объемом около ~140 тыс. строк кода. ghc 9.4, система сборки bazel + in-house, fourmolu, hlint, git, gerrit, jenkins.
Характерные технологии/паттерны: mtl-style, алгебраические эффекты, parsec- и bnf-style парсеры, recursion-schemes и немного trees that grow, query-based compilers.
Задачи
- Разработка подсистемы безопасности (Haskell, немного C);
- Разработка языков описания систем и инструментариев для них (анализаторы, компиляторы, language server);
- Исследование применимости, прототипирование, имплементация моделей безопасности.
Характерные рабочие обязанности
- Писать код, покрывать тестами, писать документацию (markdown, confluence)
- Оценка времени исполнения задач; формулировка мотиваций и Definition of Done; разбиение задач до размера 4–16ч; взаимодействие с team foundation server
- Чтение чужого кода и адаптация legacy к новым требованиям
- Code review (git, gerrit): принятие или контраргументация критики коллег в свой код, вникание и конструктивные предложения в чужой код
- Прочая работа в команде: обсуждения, выяснения, компромиссы, способность прийти к взаимопониманию
Что требуется от кандидата
- Уверенное знание языка Haskell (достаточно: GADTs, TypeFamilies, DataKinds, понимания, когда их не использовать);
- Знание языка программирования C (базовые конструкции, указатели, понятие макроса, понятие о UB);
- Представление о функциональных алгоритмах и структурах данных;
- Знание классических алгоритмов и структур данных (конкретно time complexity операций);
- Понятие о тестировании написанного кода;
- Умение работать в команде (см. рабочие обязанности);
- Навыки работы с системами контроля версий, управления задачами, code review;
- Знание английского языка на уровне чтения технической документации.
Желательно
- Умение писать надёжный и безопасный correct by construction код;
- Знание подходов к тестированию написанного кода и опыт их практического применения (property-тесты, fuzzing-тесты, integrity/end-to-end);
- Представление о парсерах и структуре/принципах работы компиляторов и интерпретаторов;
- Знакомство с теоретическими основами информационной безопасности;
- Представление о структуре и работе операционных систем.