Quali sono le differenze tra la filosofia Unix e Windows?

Dipende davvero da come si definisce "sistema operativo". Per me, questo è ciò che risalta.

Per gli utenti finali che eseguono un'applicazione come un browser web, che potrebbero definire un sistema operativo come un'interfaccia utente, una connessione di rete e un file system, probabilmente non c'è molta differenza. Per esempio, lanciare, interagire e uscire da Google Chrome su sistemi Unix è molto simile a fare lo stesso con Google Chrome su Windows.

Per uno sviluppatore, in particolare quelli che programmano in C, c'è una bella differenza:

  • La nozione di processi, come vengono creati, la comunicazione tra processi e come un processo vede e interagisce con il file system sono tutti dissimili.
  • "Tutto è un file" in Unix, mentre si potrebbe dire che "tutto è una risorsa" in Windows.
  • Le API del sistema Unix sono POSIX, mentre sono proprietarie (Win32) in Windows.
  • Le applicazioni Windows sono dominate nel grande da una struttura che pone l'interfaccia utente in primo piano, con la maggior parte dell'azione che avviene in un ciclo di eventi guidato dall'interazione dell'utente e dai messaggi del livello dell'interfaccia utente, mentre le classiche applicazioni Unix sono dominate dal concetto di lettura di flussi di byte tramite stdin, scrittura di flussi di byte su stdout, e utilizzo di pipe per collegare l'output di un'applicazione all'input di un'altra. Questa è una visione semplificata, naturalmente, e ci sono molte applicazioni UI di Unix che probabilmente hanno una struttura simile a quella delle applicazioni di Windows (anche se usano API e modelli di eventi diversi), ma se si guardano le manifestazioni classiche di Unix e Windows, si vedrà questa distinzione tra le applicazioni che si concentrano sui flussi IO a caratteri in Unix e una struttura di app basata su UI ed eventi in Windows.
  • I driver dei dispositivi e lo sviluppo del kernel sono anche abbastanza diversi. Su Unix, non c'è davvero un'API standard del kernel come c'è con POSIX in userland, anche se c'è una struttura di base imposta da POSIX in cui i driver dei dispositivi sono interfacciati dalla terra dell'utente usando chiamate open(), read(), write(), ioctl() e close() (quindi i punti di ingresso almeno sono simili e in qualche modo prevedibili). Lo sviluppo del kernel in Windows è completamente diverso. Eppure, se si prende una visione a 30.000 piedi, sia Windows che Unix sono almeno in teoria simili in termini di responsabilità (gestire le risorse di sistema, e fornire processi e modi per gestire la loro durata ed esecuzione).
  • Nota che uno sviluppatore di script (python, ruby, perl, ecc.) in gran parte vede questi sistemi come uguali, perché questi linguaggi e le loro librerie/moduli in gran parte astrattizzano le differenze di piattaforma.