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

Флибуста 

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. Публичной автономной версии не было, но Стайвер отправил ее в частном порядке нескольким бета-тестерам. После выпуска Стайвер внес многочисленные улучшения и исправил множество ошибок благодаря ранним последователям.

^ Pi i 11111 i 1 i ^ Pi iiiiii •JFAQ. ^JTontact Deutsch SjS English PVCCKIIH Fernflower is the world's first analytical decompiler for Java. I will give here a proper description, as soon as I have some spare time. For now just feel free to use it:) Some bugfixes, including but not limited

После 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. Номера строк в декомпилированном коде отличаются от номеров строк в исходном коде, и Стайвер помог обеспечить прозрачное сопоставление между ними, чтобы вы могли легко отлаживать декомпилированный код.

0 = I Q demo v Version c... v (ï5 Deco... v DO QQ : Q fo? - □ X □ guava- 33.3.1-jre.jar > com > google > common > collect > © ImmutableMap (c) ImmutableMap.class x O Decompiled .class file, bytecode version: 52.0 (Java 8) Download... Choose Sources... 83 return

Когда Fernflower стал открытым исходным кодом, многие другие инструменты в мире Java стали его использовать — вы можете найти несколько форков на GitHub. Команда Java в JetBrains постоянно совершенствует Fernflower, но в основном это все еще код Стайвера. Если бы Fernflower не существовал, нам, вероятно, пришлось бы вложить значительные ресурсы в разработку собственного декомпилятора. Это могло бы привести к тому, что у IntelliJ IDEA не было бы декомпилятора или был бы тот, который был бы значительно менее эффективен. Работа Стайвера стала настоящим переломным моментом для разработчиков Java за последние 10 лет. Поскольку не было лучшей альтернативы для декомпиляции байт-кода Java, его вклад сэкономил разработчикам бесчисленное количество часов при отладке кода Java без исходников. 

Спасибо, Стайвер! Мы глубоко опечалены потерей такого блестящего первопроходца, чья работа и преданность делу оказали столь долгосрочное и глубокое влияние. 


Подробнее
^ Pi i 11111 i 1 i ^ Pi iiiiii •JFAQ. ^JTontact Deutsch SjS English PVCCKIIH Fernflower is the world's first analytical decompiler for Java. I will give here a proper description, as soon as I have some spare time. For now just feel free to use it:) Some bugfixes, including but not limited to: • empty and obfuscated finally clause 27.05.2009 • classes with single-letter name • synthetic access methods Thanks to everyone who sent me bug reports. Keep it up! Accepted file types: *.class, *.jar, *.zip Choose File | No file chosen max. 7 files, 5 MB, 7 minutes D decompile inner classes □ D decompile enumerations □ □ decompile generic signatures □ D hide bridge methods □ □ hide synthetic methods □ D hide empty super invocation □ D hide empty default constructor collapse 1.4 class references assume return not throwing exceptions remove getClassQ invocation in a qualified new statement interpret int 1 as boolean true (compiler bug) allow for not set synthetic attribute (compiler bug) consider nameless types as Object (compiler bug) Decompile
0 = I Q demo v Version c... v (ï5 Deco... v DO QQ : Q fo? - □ X □ guava- 33.3.1-jre.jar > com > google > common > collect > © ImmutableMap (c) ImmutableMap.class x O Decompiled .class file, bytecode version: 52.0 (Java 8) Download... Choose Sources... 83 return RegularImmutableMap.frowEntries(new Map.Entry[]{entry0/(kl, vl), entrgü 84 } 85 @ public static <K, V> ImmutableMapcK, V> of(K kl, V vl, K k2, V v2, K k3, V v3) { n 7] return RegularlmmutableMap.fromEntriesinew Map.Entry[]{entry0/(kl, vl), entrgO 88 } 89 90 @ public static <K, V> ImmutableMapcK, V> of(K kl, V vl, K k2, V v2, K k3, V v3, K Debug EÎ DecompilerTest x : — (S □ DO D ùi à. O 0 : Threads & Variables 0Console (B s/ "main"@1 in group "main": RUNNING V v Evaluate expression (Ent.. 4- ^ OO i of:152, I mmutableMap (com.google.common.collect) > © static members of ImmutableMap main:5,1 jecompilerTest > ® k1 = "a" > ® v1 = {lnteger@1063} 1 > ® k2 = "b" > ® v2 = {lnteger@1065} 2 > ® k3 = "c" > ® v3 = {lnteger@1067} 3 Switch frames from anywhere in the IDE with Ctrl+Alt+Up and Ctrl+Alt+Down X L 87:1 O m CRLF UTF-8 4 spaces O 3446 of 8200M J
Флибуста
Развернуть
А можно фамилию героя статьи привести к единому виду?
Он намеренно публично не раскрывал свою личность. И насколько знаю это так и осталось загадкой. Крайне интересный был человек, жаль что пожил так недолго.
Он о том, что в переводе в одних случаях было Стайвер, а в других Стивер
А, дошло, хотя в статье вроде везде "Стайвер". Это может идти от произношения, в немецком и английском "i" читается по-разному, "и" и "ай", соответственно. Правда тогда в случае немецкого Stiver (так ведь?) вообще должно читаться как Штифер, но с именами всё сложно.
"хотя в статье вроде везде "Стайвер"
потому что оп молодец и поправил

За Флибусту охренительное спасибо!

Всё остальное :

Блин, я даже не знал что такой крутой чел был. Респект F!

Я конечно, понимаю, что бывают ситуации "мы проебали исходники и нам придется декомпилировать наш продукт чтобы не начинать с нуля". Но в остальных случаях это же вроде как "темная сторона"? Не?

Как и флибуста, не?

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

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

Кстати что и выяснилось на примере winamp когда открыли его исходник.
В Java декомпиляция часть повседневности. И чаще всего не является ничем тёмным. Просто ебать мозги с поиском и подключением исходников либ лень, а отлаживать в том числе и внутри либ приходится нередко.
Собственно, декомпилятор джавы настолько хорош, что даже если либа - это твой же проект в соседней папке, но ты не подключил его как сорс ибо впадлу, для отладки этого более чем достаточно.
Не знал что он ещё и Java-разработчик.
Земля пухом.

Ого, не знал что он автор fernflower'а.

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

Похожие посты
Книжное братство Главная » Блоги » admin's блог [Все] [А] [Б] [В] [Г] [Д] [Е] [Ж] [3] [И] [Й] [К] [Л] [М] [Н] [О] [П] [Р] [С] [Т] [У] [Ф] [X] [Ц] [Ч] [Ш] [Щ] [Э] [Ю] [Я] [Прочее] Конец [Рекомендации сообщества] [Книжный торрент] Posted 23 сентября 2024, в 16:12:27 by admin Это Stiver. Я в б
подробнее»

Флибуста все

Книжное братство Главная » Блоги » admin's блог [Все] [А] [Б] [В] [Г] [Д] [Е] [Ж] [3] [И] [Й] [К] [Л] [М] [Н] [О] [П] [Р] [С] [Т] [У] [Ф] [X] [Ц] [Ч] [Ш] [Щ] [Э] [Ю] [Я] [Прочее] Конец [Рекомендации сообщества] [Книжный торрент] Posted 23 сентября 2024, в 16:12:27 by admin Это Stiver. Я в б
V ЧИТАН ГОРОДw Памяти Капитана | Флибуста flibusta.site/node/684900 \/ Главная » Форумы » Сборная солянка [Все] [А] [Б] [В] [Г] [Д] [Е] [Ж] [3] [И] [Й] [К] [Л] [М] [Н] [О] [П] [Р] [С] [Т] [У] [Ф] [Рекомендации сообщества] [Книжный [X] [Ц] [Ч] [Ш] [Щ] [Э] [Ю] [Я] [Прочее] торрент] Памяти Капитана о 22.10.
подробнее»

Флибуста удалённое

w Памяти Капитана | Флибуста flibusta.site/node/684900 \/ Главная » Форумы » Сборная солянка [Все] [А] [Б] [В] [Г] [Д] [Е] [Ж] [3] [И] [Й] [К] [Л] [М] [Н] [О] [П] [Р] [С] [Т] [У] [Ф] [Рекомендации сообщества] [Книжный [X] [Ц] [Ч] [Ш] [Щ] [Э] [Ю] [Я] [Прочее] торрент] Памяти Капитана о 22.10.
Памяти Капитана 24 ответа [Последняя публикация] 22.10.2024, 20:41:19 admin2 Offline Stiver пишет: Зарегистрирован: 01/01/1970 Здравствуйте, вроде бы определилась дата моей смерти. Хочу использовать возможнось assisted suicide, который в Германии теперь разрешен. Если все пойдет по плану, т
подробнее»

ушла эпоха Флибуста удалённое

Памяти Капитана 24 ответа [Последняя публикация] 22.10.2024, 20:41:19 admin2 Offline Stiver пишет: Зарегистрирован: 01/01/1970 Здравствуйте, вроде бы определилась дата моей смерти. Хочу использовать возможнось assisted suicide, который в Германии теперь разрешен. Если все пойдет по плану, т