A program is similar to a Function Block with one implicit Function Block Instance. The differences between Programs and Function Blocks are:
Programs are only allowed on top of a POU invocation hierarchy (i.e. a program may not be invoked from another POU)
Directly represented variables can be used for defining a Program