Non è possibile determinare se Linux è più sicuro di Windows o viceversa. La completezza di Turing non è una metrica di sicurezza che può essere utilizzata per confrontare oggettivamente il grado di sicurezza di due sistemi.
Viste le differenze architetturali tra loro, Linux e Windows sono incommensurable costrutti astratti nel contesto della sicurezza. Cioè, date le loro considerevoli differenze, in assenza di uno standard o una rubrica oggettivi che possono essere utilizzati per valutare quanto sia misurabilmente sicuro un sistema, questi due sistemi non possono essere confrontati direttamente in termini di sicurezza / insicurezza.
- Il termine "Linux" si riferisce in realtà al kernel di Linux.
L'architettura del kernel Linux è monolitico , il che significa che il kernel implementa tutte le funzionalità che ci si aspetta da un sistema operativo. Questo non è il caso del sistema operativo Windows, la cui architettura è basata su kernel ibrido , piuttosto che basata su kernel monolitico.
NT-based Windows is classified as a hybrid kernel (or a macrokernel) rather than a monolithic kernel because the emulation subsystems run in user-mode server processes, rather than in kernel mode as on a monolithic kernel, and further because of the large number of design goals which resemble design goals of Mach (in particular the separation of OS personalities from a general kernel design). Conversely, the reason NT is not a microkernel system is because most of the system components run in the same address space as the kernel, as would be the case with a monolithic design (in a traditional monolithic design, there would not be a microkernel per se, but the kernel would implement broadly similar functionality to NT's microkernel and kernel-mode subsystems).1
- Anche se il kernel di Windows NT e il kernel Linux erano entrambi considerati monolitici nella progettazione, ci sono ancora differenze significative nell'implementazione e, per estensione, nella funzionalità. Un netto esempio di ciò sono le differenze nelle interfacce del kernel (system call APIs): mentre il numero di chiamate di sistema Linux è approssimativamente 340, ci sono molte altre chiamate di sistema Windows (da ~ 700 a oltre 1000 (ipotizzato), a seconda del kernel). In aggiunta a ciò, il modo in cui vengono chiamate syscalls differisce anche tra i sistemi.
- Viste le differenze nella progettazione e nell'implementazione dei kernel di Windows e Linux, non dovrebbe sorprendere il fatto che il formato di un binario debba essere caricato per essere caricato in memoria ed eseguito diversamente tra i due sistemi - entrambi i kernel applicano diverse interfacce binarie di applicazioni (ABI) che descrivono come un processo deve essere creato nella memoria virtuale in base ai vari segmenti di un binario eseguibile. Affinché il programma di caricamento di Windows possa mappare in memoria ed eseguire un binario, il file binario deve essere conforme a Portable Executable (PE) formato, mentre i binari di Linux devono essere conformi al formato eseguibile e collegabile (ELF).
Perché questo è rilevante? A causa delle suddette differenze e molti altri ancora tra i kernel Windows e Linux, i processi Windows e Linux sono creati da binari formattati e progettati in modo diverso, mappati e caricati nella memoria virtuale da diversi kernel che impongono diversi ABI, hanno diversi ambienti di runtime, hanno differenti meccanismi di invocazione del kernel, hanno diverse concezioni di collegamento dinamico, ecc. Queste differenze impediscono confronti diretti tra i sistemi operativi che vengono fatti quando si tratta di sicurezza, poiché generalmente non condividono le stesse debolezze. Questo è ovviato quando si tenta di confrontare la shell di Windows con la shell Linux - anche il termine "shell" non ha un significato comune tra i due sistemi. Linux non ha un registro, COM, WMI, ASP.NET e così via. Un esempio concreto di questo è il tentativo di confrontare bash con PowerShell per determinare quale è "migliore" - non può essere fatto.
1. Utente in modalità kernel di MS Windows NT e Libro bianco GDI