Perché Linux sembra molto più veloce di Windows?

In un guscio di noce - filosofia operativa.

  • Windows e i programmi Windows sono closed source. Solo i proprietari e gli sviluppatori dei programmi hanno accesso al codice sorgente, quindi il pubblico della peer review è molto piccolo. I programmatori possono cavarsela con tecniche dubbie e kludges perché poche persone sapranno o discuteranno.

    I programmi Linux sono open source - chiunque può scaricare il codice sorgente del programma ed esaminarlo .... e molte persone molto intelligenti fanno proprio questo. Se gli sviluppatori dei programmi hanno preso scorciatoie dubbie o hanno falsificato qualcosa, qualcuno se ne accorgerà e lo correggerà e lo farà sapere agli sviluppatori o lo metterà a disposizione di qualcun altro con quella particolare competenza per esaminarlo.

  • Molti programmi Windows includono enormi librerie di run-time basate sulla filosofia che tutto ciò che è necessario per far funzionare il programma deve essere fornito con il pacchetto di installazione poiché Microsoft può (e lo fa) cambiare il codice di Windows senza preavviso e ciò può rompere i programmi che usano chiamate a quel codice. L'ottimizzazione del codice costa tempo (leggi soldi per i prodotti closed source) quindi se qualcosa sembra funzionare e la gente lo compra - lasciatelo stare.

    Le librerie run-time di Linux sono generalmente piccole ed efficienti e molto spesso le librerie di cui un programma ha bisogno sono già caricate in memoria da un altro programma. Inoltre, il codice del programma Linux tende ad essere significativamente più piccolo del codice del programma Windows - ancora una volta, filosofia di programmazione. Poiché i programmatori sanno che il loro codice ha un enorme pubblico di pari è una questione di orgoglio ottimizzare il loro codice - se non lo fanno qualcun altro lo farà con conseguente perdita di faccia e di credibilità.

  • Tutto ciò che gira in Windows ha bisogno di Windows. Avete il vostro codice kernel e un'infinità di librerie di sistema tutte interdipendenti che costituiscono la vostra interfaccia grafica. In Windows il tuo gestore di finestre è il tuo sistema operativo e ogni programma con un'interfaccia grafica ha bisogno di interagire con quel gestore di finestre.

    Linux offre una vasta varietà di gestori di finestre per la tua GUI (Gnome, KDE, XFCE ecc. ecc.) o puoi scegliere di operare dalla linea di comando e non caricare affatto un gestore di finestre. I programmi GUI di Linux possono usare molti modi diversi per mostrare la loro merce (XWindows diretto, gtkxx, QTxx ecc.) così i programmatori possono scegliere il più veloce per soddisfare il loro scopo. Linux ti permette anche di lanciare un programma GUI quando è in esecuzione in modalità testo senza l'overhead di un gestore di finestre completo.

  • Il file system. Windows FAT32 e NTFS sono molto inefficienti nel modo in cui memorizzano, catalogano e recuperano i file. A peggiorare le cose, Windows usa un grande file per lo swapping del codice fuori dalla memoria e la filosofia operativa di Windows tende a caricare in memoria tutto ciò che può o non può essere richiesto e poi scambiare bit fuori quando qualcos'altro è richiesto. Molto lento ...
    I moderni file system Linux (ext4, ext3, reiser ecc.) sono molto efficienti con un accesso veloce ai file. Linux usa una partizione separata come spazio di swap indipendente da qualsiasi file system si scelga di usare. Linux carica solo i processi che sono necessari per qualsiasi cosa sia in esecuzione ora. Ad esempio ora ho una VM di Linux (Xubuntu 16.04) e una VM di Windows 7 in esecuzione su questo portatile (che esegue Xubuntu 15.10 come sistema operativo principale) entrambe con 4 GB di memoria allocata. La VM di Windows ha solo Windows in esecuzione e riporta 6Mb liberi - tutta l'altra memoria è usata o nella cache. La VM di Linux ha un browser Chrome e Firefox in esecuzione più diverse finestre di terminale, un programma legacy di Windows (SQLyog in esecuzione in Wine), due istanze dell'editor di programmazione Sublime Text e diverse connessioni sshfs in esecuzione e riporta 2399 Mb di memoria libera con niente scambiato fuori.

Così, ecco qua - filosofia operativa e codice base. Windows e i suoi programmi non sono conosciuti come 'bloatware' per niente. Tutto ciò che viene caricato richiede tempo per essere caricato e risorse da gestire. Se carichi un mucchio di roba, necessaria o meno, e il tuo sistema di gestione delle risorse è una merda, le tue prestazioni sono una merda. Sì, è vero - Windows funziona meglio con la maggior parte dei giochi in cui un enorme sforzo è stato fatto per tirare fuori il meglio dall'hardware della scheda grafica, nonostante tutti gli ostacoli che il sistema operativo presenta, ma questa è solo una piccola area speciale. In realtà fare qualcosa di produttivo su Windows (non giocare:) è un compito ingrato. Nel corso del tempo, i programmi per Windows sono diventati enormi perché la filosofia è quella di metterci dentro tutto, compreso il lavandino della cucina, non preoccuparsi di eliminare il vecchio codice e continuare ad aggiungere altro. Ci sono stati alcuni casi di questo in Linux (ad esempio Cinnamon wm) ma qualsiasi cosa del genere non dura a lungo e si ha sempre la scelta di usare qualcos'altro. Sfortunatamente la filosofia di Windows impone che tutta la memoria debba essere riempita a prescindere e come la memoria media del sistema aumenta, la dimensione del programma aumenta per riempirla.
Ai tempi dello Z80, ho scritto alcuni programmi piuttosto sofisticati con solo 16 kbyte di memoria totale disponibile. Ok, i programmi erano scritti in codice assembly e ogni registro e posizione di memoria doveva essere considerata, ma era possibile fare grandi cose con molto poco. Linux tende a seguire questa vecchia filosofia.