Modern software trends brought modularity into practise and consequently made compatibility verification more important than before. It is challenging in Java, where compatibility impacts of an API change is not obvious. In particular, Java widely differs in source and binary compatibility, which is a fact a lot of developers are not aware of. The question is if the problem is wide and what we can do to prevent it. We will show a few examples and let the audience guess what is and what is not compatible. We will also present how other developers cope and what tooling can help prevent the problem. After that we will demonstrate what modern Java versions provide to avoid the problem. Namely, we will touch a research topic, where invokedynamic is used to fill the gap between binary and source compatibility.