JetBrains о создателе Флибусты

20 октября после продолжительной борьбы с глиобластомой скончался первоначальный автор декомпилятора Java Fernflower Стайвер .
Стайвер был немецким программистом русского происхождения, в основном разрабатывавшим программное обеспечение для медицинского оборудования. Двадцать лет назад у него появился глубокий профессиональный интерес к внутренним устройствам виртуальной машины Java. Вы можете помнить его исследовательские записи в блоге, например, эту (на русском) от 2006 года о том, как настроить иерархию классов Java с помощью Unsafe, когда Java 1.5 только вышла. Примерно в 2008 году Стайвер увлекся декомпиляцией Java.
В то время ландшафт декомпиляции Java был очень беден. Первое поколение декомпиляторов, таких как JAD или JODE, подошло к концу. В то время как Java как язык развивался, существующие декомпиляторы в основном не поддерживались, что ограничивало их полезность. Новые языковые конструкции, такие как операторы утверждений, аннотации и универсальные типы, не поддерживались. Более того, прекращение поддержки инструкций JSR/RET в байт-коде Java привело к существенной разнице в том, как компилируются блоки try-finally. Декомпиляторы не смогли обработать новый байт-код.
Еще одной большой проблемой существующих декомпиляторов был их подход к декомпиляции. Они просто искали определенные шаблоны байт-кода и переводили их в соответствующие операторы и выражения Java. Несмотря на простоту, этот подход является хрупким — любое незначительное семантически эквивалентное изменение в сгенерированном байт-коде делало надлежащую декомпиляцию невозможной. Это серьезно ограничивало применение декомпилятора.
Стайвер решил написать свой собственный декомпилятор в качестве побочного проекта. Чтобы преодолеть недостатки существующих альтернатив, он применил другой подход. После прочтения байт-кода он построил граф потока управления в статической форме с одним присваиванием , которая намного лучше выражает семантику программы, абстрагируясь от конкретной формы байт-кода. В начале этого проекта Стайвер мало что знал о статическом анализе и проектировании компиляторов и должен был многому научиться, но усилия того стоили. Полученный декомпилятор давал гораздо лучшие результаты, чем все, что было доступно в то время. Он даже мог декомпилировать байт-код, созданный некоторыми обфускаторами без какой-либо явной поддержки.
Стайвер сам занимался основной разработкой в ​​период с 2008 по 2010 год. Первая публичная версия стала доступна в мае 2009 года в качестве веб-сервиса. Пользователь мог загрузить отдельный файл CLASS или целый файл JAR и получить декомпилированный результат. Декомпилятор быстро набрал популярность — в течение первых четырех месяцев пользователи декомпилировали более полумиллиона классов Java. Публичной автономной версии не было, но Стайвер отправил ее в частном порядке нескольким бета-тестерам. После выпуска Стайвер внес многочисленные улучшения и исправил множество ошибок благодаря ранним последователям.
После 2010 года активная разработка декомпилятора прекратилась, так как Стайвер стал больше занят своей основной работой. Несколько сторонних поставщиков программного обеспечения попросили Стайвера предоставить декомпилятор для своих проектов. В частности, он был использован с разрешения в Mod Coder Pack, который представляет собой набор инструментов для создания модов для игры Minecraft. Тем не менее, обычному пользователю Java стало сложно найти рабочую версию Fernflower.
В 2013 году JetBrains обратилась к Стайверу с предложением включить Fernflower в IntelliJ IDEA. Частью сделки было сделать Fernflower открытым исходным кодом. Все прошло хорошо, и контракт был подписан. 11 июля 2014 года была выпущена ранняя версия IntelliJ IDEA 14 , впервые включающая декомпилятор. Вы все еще можете увидеть первоначальный импорт исходного кода Fernflower в истории IntelliJ IDEA Git 4 марта 2014 года.
Хотя Стайвер никогда не был сотрудником JetBrains, он помогал улучшать декомпилятор в течение почти года после первоначального импорта. Поскольку Java 8 только что вышла, необходимо было поддерживать новые языковые конструкции, такие как лямбды. Еще одной большой проблемой была интеграция декомпилятора с отладчиком IntelliJ IDEA. Номера строк в декомпилированном коде отличаются от номеров строк в исходном коде, и Стайвер помог обеспечить прозрачное сопоставление между ними, чтобы вы могли легко отлаживать декомпилированный код.
Когда Fernflower стал открытым исходным кодом, многие другие инструменты в мире Java стали его использовать — вы можете найти несколько форков на GitHub. Команда Java в JetBrains постоянно совершенствует Fernflower, но в основном это все еще код Стайвера. Если бы Fernflower не существовал, нам, вероятно, пришлось бы вложить значительные ресурсы в разработку собственного декомпилятора. Это могло бы привести к тому, что у IntelliJ IDEA не было бы декомпилятора или был бы тот, который был бы значительно менее эффективен. Работа Стайвера стала настоящим переломным моментом для разработчиков Java за последние 10 лет. Поскольку не было лучшей альтернативы для декомпиляции байт-кода Java, его вклад сэкономил разработчикам бесчисленное количество часов при отладке кода Java без исходников. 
Спасибо, Стайвер! Мы глубоко опечалены потерей такого блестящего первопроходца, чья работа и преданность делу оказали столь долгосрочное и глубокое влияние.