https://blog.jetbrains.com/idea/2024/11/in-memory-of-stiver/ [JETBRAINS-] Skip to content * Topics * Search Burger menu icon * IDEs + CLion + DataGrip + DataSpell + Fleet + GoLand + IntelliJ IDEA + PhpStorm + PyCharm + RustRover + Rider + RubyMine + WebStorm * Plugins & Services + Big Data Tools + Code With Me + Quality Assurance + JetBrains Platform + Scala + Toolbox App + Writerside + JetBrains AI + Grazie * Team Tools + Datalore + Space + TeamCity + Upsource + YouTrack + Hub + Qodana + CodeCanvas * .NET & Visual Studio + .NET Tools + ReSharper C++ * Languages & Frameworks + Kotlin + Ktor + MPS + Amper * Education & Research + JetBrains Academy + Research * Company + Company Blog + Security Idea logo IntelliJ IDEA IntelliJ IDEA - the Leading Java and Kotlin IDE, by JetBrains Follow * Follow: * Twitter Twitter * Facebook Facebook * Youtube Youtube * RSS RSS Download * All * News * Releases * Livestreams * Tips & Tricks * Early Access Program * Plugins In Memory of Stiver Tagir Valeev Tagir Valeev On October 20, the original author of the Fernflower Java decompiler, Stiver, passed away after a long fight against glioblastoma. Stiver was a German programmer of Russian origin, primarily developing software for medical equipment. Twenty years ago, he developed a deep professional interest in Java virtual machine internals. You may remember his research blog posts, like this one (in Russian) from 2006 about how to tweak the Java class hierarchy using Unsafe when Java 1.5 was just released. Around 2008, Stiver became fascinated by Java decompilation. The Java decompilation landscape was very poor at that time. The first generation of decompilers like JAD or JODE came to an end. While Java as a language evolved, the existing decompilers were mainly unmaintained, which limited their usefulness. New language constructs like assertion statements, annotations, and generic types were not supported. Moreover, the deprecation of JSR/RET instructions in Java bytecode caused a significant difference in how try-finally blocks are compiled. The decompilers failed to handle the new bytecode. Another big problem with existing decompilers was their approach to decompilation. They simply looked for specific bytecode patterns and translated them to the corresponding Java statements and expressions. While simple, this approach is fragile - any minor semantically equivalent change in generated bytecode made proper decompilation impossible. This severely limited the decompiler application. Stiver decided to write his own decompiler as a side project. To overcome the weaknesses of existing alternatives, he took a different approach. After reading the bytecode, he constructed a control-flow graph in static single-assignment form, which is much better to express the program semantics abstracting the particular shape of bytecode. At the beginning of this project, Stiver knew little about static analysis and compiler design and had to learn a lot, but the effort was worth it. The resulting decompiler produced much better results than anything available at that time. It could even decompile the bytecode produced by some obfuscators without any explicit support. Stiver did the main development himself between 2008 and 2010. The first public version became available in May 2009 as a web service. A user could upload an individual CLASS file or a whole JAR file and get the decompiled result. The decompiler quickly gained popularity - during the first four months, users decompiled more than half a million Java classes. There was no public standalone version, but Stiver sent it privately to a few Beta testers. After the release, Stiver made numerous improvements and fixed many bugs thanks to early adopters. [AD_4nXfTOJ] After 2010, the active development of the decompiler stopped, as Stiver became busier with his primary job. A few third-party software vendors asked Stiver to provide the decompiler for their projects. Notably, it was used with permission in Mod Coder Pack, which is a toolkit for creating mods for the game Minecraft. Still, it became difficult for a regular Java user to find a working version of Fernflower. In 2013, JetBrains approached Stiver with a suggestion to include Fernflower in IntelliJ IDEA. Part of the deal was making Fernflower open source. Everything went well, and the contract was signed. On July 11, 2014, the early access version of IntelliJ IDEA 14 was released, including the decompiler for the first time. You can still see the initial import of the Fernflower source code in the IntelliJ IDEA Git history, on March 4, 2014. While Stiver was never a JetBrains employee, he helped improve the decompiler for almost a year after the initial import. As Java 8 had just been released, it was necessary to support new language constructs like lambdas. Another big challenge was integrating the decompiler with the IntelliJ IDEA debugger. Line numbers in decompiled code differ from line numbers in the original source, and Stiver helped provide a transparent mapping between them so you can seamlessly debug decompiled code. [AD_4nXe9yx] As Fernflower became open source, many other tools in the Java world used it - you can find a number of forks on GitHub. The Java team at JetBrains is constantly improving Fernflower, but it's still mainly Stiver's code. If Fernflower hadn't existed, we likely would have had to invest substantial resources into developing our own decompiler. This could have resulted in IntelliJ IDEA lacking a decompiler or having one that was significantly less effective. Stiver's work was a real game-changer for Java developers over the past 10 years. With no better alternative to decompile Java bytecode, his contributions have saved developers countless hours while debugging Java code without sources. Thank you, Stiver! We are deeply saddened by the loss of such a brilliant pioneer whose work and dedication had such a lasting and profound impact. Compiler Fernflower Stiver * Share * Facebook * Twitter * Linkedin Prev post Top Java Blogs for Experienced Programmers New Livestream: Build GraphQL Services With Spring Boot Like Netflix Next post [Intellij-i] Subscribe to IntelliJ IDEA Blog updates Subscribe form [ ] By submitting this form, I agree to the JetBrains Privacy Policy Notification icon By submitting this form, I agree that JetBrains s.r.o. ("JetBrains") may use my name, email address, and location data to send me newsletters, including commercial communications, and to process my personal data for this purpose. I agree that JetBrains may process said data using third-party services for this purpose in accordance with the JetBrains Privacy Policy. I understand that I can revoke this consent at any time in my profile. In addition, an unsubscribe link is included in each email. Submit Thanks, we've got you! image description Discover more [image-3] IntelliJ IDEA 2024.3 Release Candidate Is Out! The IntelliJ IDEA 2024.3 Release Candidate is here! You can download the latest build from our website, from the free Toolbox App, or by using snaps for Ubuntu. To use this build, you need to have an active IntelliJ IDEA Ultimate subscription. With the big release day approaching ... Maria Kosukhina Maria Kosukhina [ij-featured_blog_1280x720_en-4] Java Annotated Monthly - November 2024 Java Annotated Monthly is here! Check out the latest news across Java, Spring, AI, and emerging technologies. We offer practical tutorials to enhance your skills, a curated list of November's top tech events, both online and offline, and an exclusive feature by industry expert Mala Gupta. Stay in... Irina Mariasova Irina Mariasova [ij-featured_blog_1280x720_en-3] Nov 14 2024 New Livestream: Build GraphQL Services With Spring Boot Like Netflix Join us for a new IntelliJ IDEA livestream with Netflix Staff Engineer, Paul Bakker, to discover how Netflix implements GraphQL services with Spring Boot and the DGS framework. Anna Rovinskaia Anna Rovinskaia [ij-featured_blog_1280x720_en-1] Top Java Blogs for Experienced Programmers Following up on our previous article in which we shared some great multi-author blogs to follow, today we have a curated selection of personal blogs from top Java experts. These experts aren't just the best at what they do - they're also great at sharing their knowledge in ways that are easy to u... Irina Mariasova Irina Mariasova * Privacy & Security * Terms of Use * Legal * Genuine tools * Twitter * Facebook * Linkedin * Instagram * Youtube * RSS * Tiktok Merchandise store iconMerchandise store Copyright (c) 2000 JetBrains s.r.o.