"Malware" es un término general para todas las categorías de software dañino, incluido el software que no trata de propagarse, sino que solo hace cosas que el usuario preferiría que no.
Un "gusano" es un programa de auto propagación que puede propagarse sin ayuda externa. Un ejemplo sería un programa que busca un servidor SSH no seguro, se carga solo y luego se ejecuta en el sistema recién infectado.
Un "virus" no se propaga por sí mismo. En su lugar, concuerda con otro programa, solo se ejecuta cuando se ejecuta el programa infectado. Un ejemplo sería un programa que se ejecuta en una computadora, buscando unidades de memoria USB; cuando encuentra uno, modifica cada programa en esa unidad para que contenga una copia de sí mismo.
El correo electrónico, Internet y el diseño de sistemas operativos modernos hacen que el límite entre "gusano" y "virus" sea un poco borroso. ¿Un programa que depende de un error para agregar su código a un programa que ya se está ejecutando para la infección inicial, pero luego se ejecuta solo, es un gusano o un virus?