This document discusses migrating applications to JDK 9. It covers major changes in JDK 9 including the new module system which modularizes core Java libraries. It provides guidance on dealing with encapsulated APIs and incompatible changes. Specific issues addressed include missing modules, deprecated APIs and methods, JVM logging changes, and removed JVM flags. A real world example demonstrates how to support encoding/decoding across multiple JDK versions in a backwards compatible way.