A module pool is a program that is started by a transaction code and displays screen based data. This differs from a standard report program which normally starts with a selection screen.
The distinctions are somewhat blurred because you can write report output from a module pool, and you can have screens in standard report programs. In addition, selection screens can be used anywhere.
When coding a module pool program the basic control of the program is contained within the screen logic PBO, PAI . etc.