Cela dépend vraiment de la façon dont vous définissez le "système d'exploitation". Pour moi, c'est ce qui ressort.
Pour les utilisateurs finaux qui exécutent une application comme un navigateur web, qui pourraient définir un système d'exploitation comme une interface utilisateur, une connexion réseau et un système de fichiers, il't sans doute pas beaucoup de différence. Par exemple, lancer, interagir avec et quitter Google Chrome sur les systèmes Unix ressemble beaucoup à faire la même chose dans Google Chrome sous Windows.
Pour un développeur, notamment ceux qui programment en C, il y a pas mal de différence :
- La notion de processus, la façon dont ils sont créés, la communication interprocessus et la façon dont un processus voit et interagit avec le système de fichiers sont toutes dissemblables.
- "Tout est un fichier" dans Unix, alors qu'on pourrait dire que "tout est une ressource" dans Windows.
- Les API du système Unix's sont POSIX, alors qu'elles sont propriétaires (Win32) dans Windows.
- Les applications Windows sont dominées dans les grandes lignes par une structure qui place l'interface utilisateur au premier plan, la plupart des actions se déroulant dans une boucle d'événements pilotée par l'interaction de l'utilisateur et les messages de la couche d'interface utilisateur, alors que les applications Unix classiques sont dominées par le concept de lecture de flux d'octets via stdin, d'écriture de flux d'octets vers stdout, et d'utilisation de pipes pour connecter la sortie d'une application à l'entrée d'une autre. Il s'agit d'une vue simplifiée, bien sûr, et il y a un grand nombre d'applications d'interface utilisateur Unix qui sont sans doute similaires dans leur structure aux applications Windows (bien qu'utilisant des API et des modèles d'événements différents), mais si vous regardez les manifestations classiques d'Unix et de Windows, vous verrez cette distinction entre les applications ayant un accent sur les flux d'E/S de caractères dans Unix et une structure d'application basée sur l'interface utilisateur et pilotée par les événements dans Windows.
- Les pilotes de périphériques et le développement du noyau sont également assez différents. Sur Unix, il n'y a pas vraiment d'API de noyau standard comme c'est le cas avec POSIX dans le userland, bien qu'il y ait une structure de base imposée par POSIX en ce que les pilotes de périphériques sont interfacés depuis le userland en utilisant des appels open(), read(), write(), ioctl() et close() (ainsi, les points d'entrée au moins sont similaires et quelque peu prévisibles). Le développement du noyau dans Windows est tout à fait différent. Pourtant, si vous prenez une vue à 30 000 pieds, Windows et Unix sont au moins en théorie similaires en termes de responsabilités (gérer les ressources du système, et fournir des processus et des moyens de gérer leur durée de vie et leur exécution).
- Notez qu'un développeur de scripts (python, ruby, perl, etc...) voit largement ces systèmes comme étant les mêmes, parce que ces langages et leurs bibliothèques/modules font surtout abstraction des différences de plate-forme.