Quanto è complicato il codice di Microsoft Windows?
Dipende davvero da come si definisce la complessità. Ci sono molte metriche diverse usate e combinate per misurare la complessità del software.
Posso dirvi che ho avuto accesso al codice sorgente mentre ero nel team di Windows NT (NT è la base per tutte le versioni desktop di Windows da XP in poi), durante i progetti di sviluppo NT 3.1 e NT 3.5, e il codice seguiva uno standard di codifica che era parte del NT Workbook, la "bibbia" del team per il progetto. Anche se non ho letto ogni riga di codice, quello che ho letto era molto chiaro, modulare, stratificato e mantenibile.
Naturalmente, per leggere e capire il codice, bisognava avere una certa conoscenza dell'architettura generale di Windows NT. Probabilmente la migliore fonte di informazioni oggi sugli interni di Windows sono i libri Windows Internals 6th Edition (due volumi).
Alcuni equiparano semplicemente la complessità del codice alla dimensione, spesso misurata in linee di codice (LOC). Il modo in cui le LOC sono effettivamente misurate dipende dagli strumenti usati e dai criteri scelti per definire esattamente cosa sia una linea di codice in ogni linguaggio di programmazione. C'è molto dibattito sui metodi usati per contare le linee di codice, ma se si usano esattamente gli stessi criteri da una release all'altra, si può vedere il cambiamento relativo nella dimensione del codice base. Confrontare questi numeri con quelli di un altro sistema operativo che ha usato un metodo diverso per contare le linee di codice è come confrontare mele con arance.
Detto questo, ecco alcune informazioni sulla dimensione del codice base di Windows moderno. Le linee di codice qui sono approssimative e non ufficiali, ma sono basate su fonti ragionevolmente credibili. Illustra come il codice base di Windows NT si sia evoluto dal 1993:
- Windows NT 3.1 (1993) - 5,6 milioni di linee di codice sorgente (MLOCs)
- Windows NT 3.5 (1994) - 8,4 MLOCs
- Windows NT 3.51 (1995) - 10,2 MLOCs
- Windows NT 4..0 (1996) - 16 MLOCs
- Windows 2000 (2000) - 29 MLOCs
- Windows XP (2001) - 35 MLOCs
- Windows Vista (2007) - 45 MLOCs
- Windows 7 (2009) - 42 MLOCs
- Windows 8 (2012) - 50 MLOCs
- Windows 10 (2015) - 55 MLOCs
Il codice sorgente Windows consiste principalmente di C, C++ e una piccola quantità di codice in linguaggio assembly. Alcune delle utility in modalità utente, ecc. sono in C#, ma questa è una percentuale relativamente piccola del codice base complessivo.
Non ho incluso le versioni a 16 bit, rilasciate dal 1985 al 2000. Windows NT era la base per tutte le moderne versioni di Windows a 32 e 64 bit. Il numero di linee di codice nelle versioni server era lo stesso delle versioni non server rilasciate nello stesso anno (cioè, avevano la stessa base di codice sorgente).
Il lavoro sul kernel NT iniziò nel 1988, scritto da zero come un sistema operativo multitasking preemptive a 32 bit. Il kernel NT si avviò per la prima volta nel luglio 1989 su un processore RISC Intel i860. Ci fu una forte spinta fin dall'inizio per assicurare che il nuovo sistema operativo fosse portabile su una varietà di architetture di CPU, e non sarebbe stato bloccato solo nell'architettura Intel x86 (IA-32). NT alla fine girava su MIPS, DEC Alpha, PowerPC, Itanium, e naturalmente Intel x86 e x64.
Alcune complessità furono aggiunte al codice base, principalmente nel livello di astrazione dell'hardware (HAL), per supportare le architetture non Intel.
Articoli simili
- Quali sono le differenze tra codice macchina, codice byte, codice oggetto e codice sorgente?
- Cosa è più complicato matematicamente. OpenGL o OpenAL?
- Qual è la differenza tra bytecode, codice nativo, codice macchina e codice assembly?
- Il mio Samsung Galaxy S4 ha un codice paese XSB. Posso aggiornare manualmente il sistema operativo con un diverso codice paese, codice prodotto e CSC?