This document discusses Java 9 modules and modularity. It begins by defining what a module is - a deployable, manageable, reusable unit of software with a concise interface. Modules must adhere to strong encapsulation, well-defined interfaces, and explicit dependencies. It then compares modules to microservices, noting advantages and disadvantages of each approach. The document outlines problems with monolithic Java applications and how modules address issues like classpath hell, version conflicts, and security. It provides examples of module systems like OSGi and Java 9's Project Jigsaw. Finally, it explains the new modular structure of the JDK/JRE in Java 9 and key aspects of module definition like requires, exports, and provides.