frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Study confirms experience beats youthful enthusiasm

https://www.theregister.com/2026/02/07/boomers_vs_zoomers_workplace/
1•Willingham•4m ago•0 comments

The Big Hunger by Walter J Miller, Jr. (1952)

https://lauriepenny.substack.com/p/the-big-hunger
1•shervinafshar•5m ago•0 comments

The Genus Amanita

https://www.mushroomexpert.com/amanita.html
1•rolph•10m ago•0 comments

We have broken SHA-1 in practice

https://shattered.io/
1•mooreds•11m ago•1 comments

Ask HN: Was my first management job bad, or is this what management is like?

1•Buttons840•12m ago•0 comments

Ask HN: How to Reduce Time Spent Crimping?

1•pinkmuffinere•13m ago•0 comments

KV Cache Transform Coding for Compact Storage in LLM Inference

https://arxiv.org/abs/2511.01815
1•walterbell•18m ago•0 comments

A quantitative, multimodal wearable bioelectronic device for stress assessment

https://www.nature.com/articles/s41467-025-67747-9
1•PaulHoule•20m ago•0 comments

Why Big Tech Is Throwing Cash into India in Quest for AI Supremacy

https://www.wsj.com/world/india/why-big-tech-is-throwing-cash-into-india-in-quest-for-ai-supremac...
1•saikatsg•20m ago•0 comments

How to shoot yourself in the foot – 2026 edition

https://github.com/aweussom/HowToShootYourselfInTheFoot
1•aweussom•20m ago•0 comments

Eight More Months of Agents

https://crawshaw.io/blog/eight-more-months-of-agents
3•archb•22m ago•0 comments

From Human Thought to Machine Coordination

https://www.psychologytoday.com/us/blog/the-digital-self/202602/from-human-thought-to-machine-coo...
1•walterbell•23m ago•0 comments

The new X API pricing must be a joke

https://developer.x.com/
1•danver0•24m ago•0 comments

Show HN: RMA Dashboard fast SAST results for monorepos (SARIF and triage)

https://rma-dashboard.bukhari-kibuka7.workers.dev/
1•bumahkib7•24m ago•0 comments

Show HN: Source code graphRAG for Java/Kotlin development based on jQAssistant

https://github.com/2015xli/jqassistant-graph-rag
1•artigent•29m ago•0 comments

Python Only Has One Real Competitor

https://mccue.dev/pages/2-6-26-python-competitor
3•dragandj•30m ago•0 comments

Tmux to Zellij (and Back)

https://www.mauriciopoppe.com/notes/tmux-to-zellij/
1•maurizzzio•31m ago•1 comments

Ask HN: How are you using specialized agents to accelerate your work?

1•otterley•33m ago•0 comments

Passing user_id through 6 services? OTel Baggage fixes this

https://signoz.io/blog/otel-baggage/
1•pranay01•33m ago•0 comments

DavMail Pop/IMAP/SMTP/Caldav/Carddav/LDAP Exchange Gateway

https://davmail.sourceforge.net/
1•todsacerdoti•34m ago•0 comments

Visual data modelling in the browser (open source)

https://github.com/sqlmodel/sqlmodel
1•Sean766•36m ago•0 comments

Show HN: Tharos – CLI to find and autofix security bugs using local LLMs

https://github.com/chinonsochikelue/tharos
1•fluantix•36m ago•0 comments

Oddly Simple GUI Programs

https://simonsafar.com/2024/win32_lights/
1•MaximilianEmel•37m ago•0 comments

The New Playbook for Leaders [pdf]

https://www.ibli.com/IBLI%20OnePagers%20The%20Plays%20Summarized.pdf
1•mooreds•37m ago•1 comments

Interactive Unboxing of J Dilla's Donuts

https://donuts20.vercel.app
1•sngahane•39m ago•0 comments

OneCourt helps blind and low-vision fans to track Super Bowl live

https://www.dezeen.com/2026/02/06/onecourt-tactile-device-super-bowl-blind-low-vision-fans/
1•gaws•40m ago•0 comments

Rudolf Vrba

https://en.wikipedia.org/wiki/Rudolf_Vrba
1•mooreds•41m ago•0 comments

Autism Incidence in Girls and Boys May Be Nearly Equal, Study Suggests

https://www.medpagetoday.com/neurology/autism/119747
1•paulpauper•42m ago•0 comments

Wellness Hotels Discovery Application

https://aurio.place/
1•cherrylinedev•43m ago•1 comments

NASA delays moon rocket launch by a month after fuel leaks during test

https://www.theguardian.com/science/2026/feb/03/nasa-delays-moon-rocket-launch-month-fuel-leaks-a...
2•mooreds•43m ago•0 comments
Open in hackernews

Fernflower Java Decompiler

https://github.com/JetBrains/fernflower
136•bartekpacia•4mo ago

Comments

krackers•4mo ago
Is there a standalone gui version similar to jd-gui?
0x1ceb00da•4mo ago
Intellij
enoent•4mo ago
https://bytecodeviewer.com/
fioan89•4mo ago
I find https://github.com/nbauma109/jd-gui-duo better than bytecodeviewer. At least on macOS it is much more stable, the UI is actually usable.
Igor_Wiwi•4mo ago
There is a web application which allows to navigate and edit jar files - https://jar.tools/ (I am the creator)
userbinator•4mo ago
The correct name is Fernflower, not FernFlower.

I found this amusing, from a Java perspective. The 3-character command-line options are also very "not Java-ish". However, since this one is also written in Java, a good test is if it can decompile itself perfectly and the result recompiled to a matching binary; much like how bootstrapping a compiler involves compiling itself and checking for the existence of the fixed-point.

mudkipdev•4mo ago
https://github.com/Vineflower/vineflower
yardstick•4mo ago
Why would one choose this over the original?
h4ch1•4mo ago
After a little research it seems like it's main focus in on decompiled code readability.

https://old.reddit.com/r/java/comments/ue8u59/new_open_sourc...

A little more info in this thread as well:

https://old.reddit.com/r/java/comments/ue8u59/new_open_sourc...

(It was earlier named Quiltflower and is actually a combination of multiple Fernflower forks from its' gh README)

Would ideally expect the project site/github to list out how's the fork different though.

brap•4mo ago
I know you probably don’t want an LLM in your decompiler, but assigning meaningful names could be a good task for an LLM.
p0w3n3d•4mo ago
One day I was using ghidra to decompile something to find out how it works, and the LLM helped a lot. It was a game changer in refactoring of the decompiled assembly-that-looked-like-c language.
Hackbraten•4mo ago
There’s some prior art on this [0] [1], and it’s worked decently well for me on obfuscated JS.

[0]: https://thejunkland.com/blog/using-llms-to-reverse-javascrip...

[1]: https://github.com/jehna/humanify/blob/main/README.md#exampl...

viraptor•4mo ago
It's also good as picking up patterns which are common enough, but may not be known to everyone. For example I couldn't tell that some function was doing CRC via a lookup table - but Claude knew.
BobbyTables2•4mo ago
Often googling the first few entries of such tables will show CRC implementations. Same for SHA hash constants…
viraptor•4mo ago
The tables depend on the CRC parameters and in my case there would be no Google hits - a unique setup was used.
cogman10•4mo ago
That'd make sense if the jar is obfuscated. Java preserves method and class names by default.
stevoski•4mo ago
The story behind the Fernflower Java decompiler is here: https://blog.jetbrains.com/idea/2024/11/in-memory-of-stiver/
vbezhenar•4mo ago
Stiver also created Flibusta - absolutely huge online library of (mostly pirated) Russian books.
asplake•4mo ago
> Fernflower is the first actually working analytical decompiler for Java and probably for a high-level programming language in general.

That really deserves a link. What is an “analytical” decompiler?

jakewins•4mo ago
Someone apparently had the exact same question in 2020: https://stackoverflow.com/questions/62298929/what-is-an-anal...

Answer is pretty vague though, but sounds like it’s about not trying to “reverse” what the compiler did, but rather try and “analytically” work put what source code would likely have yielded the byte code it’s looking at?

rhdunn•4mo ago
Yes, that's what it is doing.

If you have a block of code a compiler will compile a language expression or statement into a particular set of assembly/bytecode instructions. For example converting `a + b` to `ADD a b`.

A reversing decompiler will look at the `ADD a b` and produce `a + b` as the output. This is the simplest approach as it is effectively just a collection of these types of mapping. While this works, it can be harder to read and noisier than the actual code. This is because:

1. it does not handle annotations like @NotNull correctly -- these are shown as `if (arg == null) throw ...` instead of the annotation because the if/throw is what the compiler generated for that annotation;

2. it doesn't make complex expressions readable;

3. it doesn't detect optimizations like unrolling loops, reordering expressions, etc.

For (1) an analytical decompiler can recognize the `if (arg == null) throw` expression at the start of the function and map that to a @NotNull annotation.

Likewise, it could detect other optimizations like loop unrolling and produce better code for that.

vbezhenar•4mo ago
I'm not sure that @NotNull example is appropriate. Java compiler does not add any checks for @NotNull annotations. Those annotations exist for IDE and linting tools, compiler doesn't care. May be there are Java-like languages like Lombok or non-standard compilers which do add those checks, but I think that Java decompiler shouldn't do assumptions of these additional tools.
rhdunn•4mo ago
https://www.jetbrains.com/help/idea/annotating-source-code.h...

> When you compile your project with IntelliJ IDEA build tool, the IDE adds assertions to all code elements annotated with @NotNull. These assertions will throw an error if the elements happen to be null at runtime.

vbezhenar•4mo ago
That's not java compiler. That's intellij compiler. I'd say that's very weird anti-feature, because your build in IDE and maven will work differently.
wokkel•4mo ago
When using Lombok it will use a compiler plugin for this so maven builds have @nonnull generated as if-statements. I dont know if intellij uses their own plugin but they do support Lombok in maven projects, so maybe thats where this is coming from. Afaik intellij has no built in compiler but relies on java .
Bjartr•4mo ago
Lombok hijacks the compiler to do it's own thing, and violates the contract Java compiler plugins are supposed to follow.

See this comment by an OpenJDK tech lead: https://news.ycombinator.com/item?id=37666793

lisbbb•4mo ago
I was initially impressed with Lombok and then ran into all the downsides of it and it was institutionally abandoned at one particular firm I was with (100s of devs).
rhdunn•4mo ago
I was trying to think of examples.

A better example for Java would be something like lambda expressions on functional interfaces. There, the compiler is creating an anonymous object that implements the interface. A reversable decompiler will just see the anonymous class instance whereas an analytical decompiler can detect that it is likely a lambda expression due to it being an anonymous class object implementing a single method interface and is being passed to a function argument that takes that interface as a parameter.

In C# yield is implemented as a state machine, so an analytical decompiler could recognise that construct.

And yes, for JVM decompilers it could have language heuristics to detect (or be specifically for) Lombok, Scala, Groovy, Kotlin, etc.

[1] https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaex...

lbalazscs•4mo ago
The link about Stiver has some details:

> 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.

https://blog.jetbrains.com/idea/2024/11/in-memory-of-stiver/

krackers•4mo ago
As far as I can tell (although I"m a novice at RE), in the native world all non-trivial decompilers are "analytical", doing things like control-flow recovery and such. I guess the only reason why the first java decompiler was "non-analytical" is that the bytecode (at least in early days) was simple enough that you could basically pattern-match it back to instructions.

So if I'd have to give a definition I pulled out of my ass:

* non-analytical compiler: "local", works only at the instruction or basic-block level, probably done by just pattern matching templates

* analytical: anything that does non-local transformations, working across basic-blocks to recover logic and control flow

p0w3n3d•4mo ago
Is it only me or fernflower does not put the code in the correct lines, and the debugging fails to navigate over the code in the IntelliJ IDEA?
bartekpacia•4mo ago
This sounds like a bug – I'd appreciate it if you could share an example of such behavior.

[I work at JetBrains]

gf000•4mo ago
I mean, in the general case is it not impossible to "put the code in the correct lines"?

Maybe I'm just misunderstanding you, but even if the bytecode sequence is reconstructed as the original code that produced it, stuff like whitespace and comments are simply lost with no ways to recover.

(Also, local variable names, certain annotations depending on their retention level, etc)

nunobrito•4mo ago
Can the decompiled result be compiled again?
jeroenhd•4mo ago
It's not a perfect decompiler, some obfuscated code gets decompiled into commented-out bytecode.

However, most of the time it'll output perfectly valid Java code that'll compile if you just create the necessary maven/ant/gradle build configuration to get all of the sources loaded correctly.

dunham•4mo ago
I've actually had this fix a bug before. An O(n^2) issue adding a character at time to a string inside a loop.

I had decompiled the class, fixed the issue, checked in the original decompiled source and then the change. Then a coworker pointed out that the original decompiled source also fixed the issue.

After a bit of digging, I learned that hotspot compiler had code to detect and fix the issue, but it was looking for the pattern generated by a modern compiler, and the library was compiled with an older compiler.

(It's been a while, but I think it was the JAI library, and the issue was triggered by long comments in a PNG.)

nneonneo•4mo ago
jadx (https://github.com/skylot/jadx) is similar, but for Android Java (Dalvik bytecode). I use it extensively and it works very well.

Over in .NET land, dnSpy (https://github.com/dnSpyEx/dnSpy) works very well, even on many obfuscated binaries.

hunterpayne•4mo ago
I'm using this decompiler in my project right now. Its the best of the bunch and Jetbrains actively maintains it with good support.
BinaryIgor•4mo ago
...written in Java! Recursion going strong :)