Middleware is infrastructure that supports distributed component-based application development by enabling component communication and hiding distribution details. It provides mechanisms for network communication, coordination, reliability, scalability, and heterogeneity. Middleware categories include transactional, message-oriented, procedural, object-based, and component-based systems. Middleware elements are software components, containers, metadata, and integrated development environments. Distribution is hidden from application programmers via services for remote communication, directory services, security, transactions, and system management.