En una cáscara de nuez - filosofía operativa.
- Windows y los programas de Windows son de código cerrado. Sólo los propietarios y desarrolladores de los programas tienen acceso al código fuente, por lo que la audiencia de revisión por pares es muy pequeña. Los programadores pueden salirse con la suya con técnicas dudosas y kludges porque poca gente lo sabrá o discutirá.
Los programas de Linux son de código abierto - cualquiera puede descargar el código fuente del programa y revisarlo .... y mucha gente muy inteligente lo hace. Si los desarrolladores de los programas tomaron atajos dudosos o falsificaron algo, alguien se dará cuenta y lo arreglará y se lo hará saber a los desarrolladores o lo pondrá a disposición de otra persona con esa experiencia particular para que lo revise.
- Muchos programas de Windows incluyen enormes bibliotecas de tiempo de ejecución basadas en la filosofía de que todo lo que se requiere para que el programa funcione debe ser enviado con el paquete de instalación, ya que Microsoft puede (y lo hace) cambiar el código de Windows sin previo aviso, lo que puede romper los programas que utilizan llamadas a ese código. La optimización del código cuesta tiempo (léase dinero para los productos de código cerrado), así que si algo parece funcionar y la gente lo compra, déjalo estar.
Las bibliotecas de ejecución de Linux son generalmente pequeñas y eficientes y, con bastante frecuencia, las bibliotecas que un programa necesita ya están cargadas en la memoria por otro programa. Además, el código de los programas de Linux tiende a ser significativamente más pequeño que el código de los programas de Windows - una vez más, filosofía de programación. Dado que los programadores saben que su código tiene una enorme audiencia de pares, es una cuestión de orgullo optimizar su código - si no lo hacen, alguien más lo hará, lo que resulta en una pérdida de prestigio y credibilidad.
- Todo lo que se ejecuta en Windows necesita Windows. Tienes el código del kernel y un sinfín de librerías del sistema, todas ellas interdependientes, que conforman tu interfaz gráfica de usuario. En Windows su gestor de ventanas es su sistema operativo y cada programa con una interfaz gráfica de usuario necesita interactuar con ese gestor de ventanas.
Linux ofrece una gran variedad de gestores de ventanas para su GUI (Gnome, KDE, XFCE etc. etc) o puede elegir operar desde la línea de comandos y no cargar un gestor de ventanas en absoluto. Los programas GUI de Linux pueden utilizar muchas formas diferentes para mostrar sus productos (XWindows, gtkxx, QTxx, etc.), por lo que los programadores pueden elegir la más rápida para adaptarse a su propósito. Linux incluso permite lanzar un programa GUI cuando se ejecuta en modo texto sin la sobrecarga de un gestor de ventanas completo.
- El sistema de archivos. Windows FAT32 y NTFS son muy ineficientes en la forma en que almacenan, catalogan y recuperan trozos de archivos. Para empeorar las cosas, Windows utiliza un gran archivo para el intercambio de código de la memoria y la filosofía de funcionamiento de Windows tiende a cargar cualquier cosa que puede o no puede ser necesario en la memoria y luego intercambiar bits cuando se requiere algo más. Muy lento ...
Los sistemas de archivos modernos de Linux (ext4, ext3, reiser, etc.) son muy eficientes con acceso rápido a los archivos. Linux utiliza una partición separada como espacio de intercambio, independientemente del sistema de archivos que elija utilizar. Linux sólo carga los procesos que son necesarios para lo que se está ejecutando ahora. Por ejemplo, ahora mismo tengo una máquina virtual de Linux (Xubuntu 16.04) y una máquina virtual de Windows 7 ejecutándose en este portátil (que ejecuta Xubuntu 15.10 como sistema operativo principal), ambas con 4 GB de memoria asignada. La máquina virtual de Windows sólo tiene Windows en ejecución y reporta 6Mb libres - todo el resto de la memoria se utiliza o se almacena en caché. La VM de Linux tiene un navegador Chrome y Firefox en ejecución, además de varias ventanas de terminal, un programa heredado de Windows (SQLyog que se ejecuta en Wine), dos instancias del editor de programación Sublime Text y varias conexiones sshfs en ejecución e informa de 2399 Mb de memoria libre sin nada intercambiado.
Así que, ahí lo tienes - filosofía operativa y base de código. Windows y sus programas no son conocidos como 'bloatware' por nada. Todo lo que se carga requiere tiempo para cargar y recursos para gestionar. Si cargas montones de cosas, necesarias o no, y tu sistema de gestión de recursos es una mierda, tu rendimiento es una mierda. Sí, es cierto que Windows rinde más con la mayoría de los juegos, en los que se ha hecho un enorme esfuerzo para sacar lo mejor del hardware de la tarjeta gráfica a pesar de todos los obstáculos que presenta el sistema operativo, pero eso es sólo un área muy pequeña y de propósito especial. En realidad, hacer algo productivo en Windows (no jugar a juegos 🙂 es una tarea ingrata. Con el tiempo, los programas de Windows se han hecho enormes porque la filosofía es poner todo, incluso el fregadero de la cocina, no molestarse en eliminar el código antiguo y seguir añadiendo. Ha habido casos de esto en Linux (por ejemplo, Cinnamon wm), pero nada de eso dura mucho y siempre tienes la opción de usar algo más. Desafortunadamente la filosofía de Windows dicta que toda la memoria debe ser llenada a pesar de todo y a medida que la memoria promedio del sistema aumenta, el tamaño del programa aumenta para llenarlo.
En los días del Z80, escribí algunos programas bastante sofisticados con sólo 16 kbytes de memoria total disponible. Vale, los programas estaban escritos en código ensamblador y había que tener en cuenta cada registro y ubicación de memoria, pero era posible hacer grandes cosas con muy poco. Linux tiende a seguir esta antigua filosofía.