Sospecho que la situación de virus / malware en Linux es prácticamente lo que sería "normal", y que la situación de virus / malware en Windows es un fenómeno estadístico, más un "Rey Dragón" que un Cisne Negro.
Windows tiene un conjunto inusualmente barroco de API, Win32, API nativa de NT, una y otra vez, y ha habido algunos problemas entre ellos, como que Win32 es básicamente una interfaz ASCII mientras que NT nativo es Unicode. Esto ha facilitado al menos el malware. Como ejemplo de un detalle rococó, piense en los nombres de archivos del dispositivo mágico, AUX, CON, LP que funcionan en cualquier directorio.
La API nativa de Windows nunca se ha documentado realmente, y esta falta de documentación fluye a otras cosas, como por ejemplo: ¿qué conjunto de extensiones de nombre de archivo es para archivos ejecutables? ¿Por qué el nombre del archivo determina si un archivo es ejecutable o no? ¿No se propagó el gusano NIMDA a través de algún problema con los archivos ".eml", como ejemplo? Nadie sabía que los archivos .eml eran ejecutables en ese momento.
Windows no tiene una tradición de separación de privilegios, de hecho, tiene una tradición de usuario único, root. Muchas aplicaciones todavía asumen esto. Windows no tiene tradición de separación de datos de ejecutables. Le proporciono macros de Word incrustadas en el archivo .doc como ejemplo de datos no separados e instrucciones que históricamente han causado problemas de virus.
Linux tiene al menos tradiciones opuestas a todos los puntos anteriores: controles de acceso discrecional levemente efectivos, lo suficientemente simples para ser aplicados diariamente, pero lo suficientemente completos para mantener a raya los virus de tipo de archivo tradicionales. La interfaz de llamadas al sistema es solo moderadamente complicada, y dado que el código fuente está disponible gratuitamente, existen múltiples fuentes de documentación. Los ejecutables suelen vivir en directorios "bin", y los datos viven en otro. Cada ejecutable tiene su propio archivo de configuración, en lugar de compartir el gran registro. Los archivos de datos viven en directorios por usuario, y casi nunca contienen el tipo de macros todopoderosas que contienen los archivos de datos de Word, etc.,
Además, "linux" no existe realmente como lo hace "Windows". Existen cientos de distribuciones, cada una de las cuales personaliza casi todos los aspectos de los detalles de bajo nivel. Diferentes versiones de compilador, diferentes núcleos de Linux, algunos totalmente modulares, algunos sin módulos. Esto se aplica a prácticamente todos los aspectos de software de un sistema, desde el núcleo hasta los clientes de correo electrónico. Donde los usuarios de "Windows" utilizan en general los clientes de correo electrónico de Outlook, los usuarios de Linux usan una variedad de cientos de clientes diferentes, cada uno en decenas de versiones. No hay una base de usuarios para ninguna versión dada de ningún software dado: la base de usuarios no solo está fracturada, sino que también está destrozada. Esto hace que sea mucho más difícil encontrar una vulnerabilidad en un número adecuado de hosts, o escribir un exploit que funcione en un número suficientemente grande de instancias de software.