Dans quelles langues Windows, Mac OS X et Linux sont-ils écrits?


273

Je me demandais simplement qui sait de quels langages de programmation Windows, Mac OS X et Linux sont constitués et quels langages sont utilisés pour chaque partie du système d'exploitation (par exemple: noyau, architecture de plug-in, composants GUI, etc.).

Je suppose qu'il y a plusieurs langues pour chacune et, évidemment, je sais que le noyau Linux est écrit en C.

Je suppose que Mac OS X contient beaucoup de code Objective-C car c'est le langage d'Apple dérivé de NeXT.

J'ai entendu dire que Windows contient C, C ++ et Intel Assembly. Linux ou Mac OS contiennent-ils du code d'assemblage?

Existe-t-il également des langages de script tels que Ruby, Python, etc. Quelles parties du système d'exploitation seraient écrites dans chaque langue?



Cet échange SO peut aider à répondre à la toute dernière partie de votre question.
Bikramjeet Singh

Réponses:


269
  • Windows: C ++, le noyau est en C
  • Mac: objectif C, le noyau est en C (le sous-système IO PnP est Embedded C ++)
  • Linux: la plupart des choses sont en C, de nombreuses applications utilisateur sont en Python, KDE est tout C ++

Tous les noyaux utiliseront également du code d'assembly.


13
Je dois ajouter que Gnome est à peu près C également.
Nathan Osman

17
Gnome a également flirté avec C # (Mono).
Hristo Iliev

6
Le noyau Linux a aussi l'assembleur je crois.
GL2014

9
Certes, chaque noyau aura au moins un assembleur
Ana Betts

4
Pour que les choses soient claires, le sous-système IOKit du noyau Apple (pour les pilotes) utilise (un sous-ensemble restreint de) C ++. Et sur les 3, c'est-à-dire Windows, Mac et Linux, la plupart des applications les plus importantes de l'espace utilisateur sont écrites en C ou C ++. Par exemple, MS aurait tenté de refaire Office dans .NET mais est retourné en C ++. Et le noyau Linux utilise de nombreux idiomes similaires à C ++ mais cuits à la main ensemble en C, par exemple l'héritage dans le code du pilote.
Erik Alapää

94

Linux: C. Quelques pièces en assemblage.

[...] C'est surtout en C, mais la plupart des gens n'appelleraient pas ce que j'écris C. Il utilise toutes les fonctionnalités imaginables du 386 que j'ai pu trouver, car c'était aussi un projet pour me renseigner sur le 386. Comme déjà mentionné , il utilise une MMU, pour la pagination (pas encore sur le disque) et la segmentation. C'est la segmentation qui la rend VRAIMENT dépendante de 386 (chaque tâche a un segment de 64 Mo pour le code et les données - max 64 tâches en 4 Go. Quiconque a besoin de plus de 64 Mo / tâche - cookies difficiles). [...] Certains de mes fichiers "C" (spécifiquement mm.c) sont presque autant assembleurs que C. [...] Contrairement à minix, il m'arrive aussi d'aimer les interruptions, donc les interruptions sont gérées sans essayer de se cacher la raison derrière eux. (La source)

Mac OS X: cacao principalement en Objective-C. Noyau écrit en C, quelques pièces en assemblage.

Mac OS X, au niveau du noyau, est principalement un ancien système d'exploitation gratuit appelé BSD (en particulier, c'est Darwin, une sorte d'hybride de BSD, Mach et quelques autres choses) ... presque entièrement en C, avec un peu d'assembleur jeté. (Source)

Une grande partie de Cocoa est implémentée dans Objective-C, un langage orienté objet qui est compilé pour fonctionner à une vitesse incroyable, tout en utilisant un runtime vraiment dynamique qui le rend particulièrement flexible. Parce que Objective-C est un surensemble de C, il est facile de mélanger C et même C ++ dans vos applications Cocoa. (La source)

Windows: C, C ++, C #. Quelques pièces en assembleur.

Nous utilisons presque entièrement C, C ++ et C # pour Windows. Certains domaines du code sont assemblés à la main / écrits à la main. (La source)

Unix: C. Certaines pièces en assemblage. (La source)


3
Le sous-système de pilote de Darwin (IOKit) s'appuie fortement sur un modèle d'objet de type COM écrit dans un sous-ensemble de C ++.
Hristo Iliev

@Tahlor oui. Comment pouvez-vous écrire une chose de bas niveau comme un noyau dans VB alors qu'il n'a même pas d'opérateur pour le décalage de bits? C'est ce que Raymond Chen a dit . Les applications Windows sont différentes
phuclv

15

Mac OS X utilise de grandes quantités de C ++ dans certaines bibliothèques, mais il n'est pas exposé car ils ont peur de la rupture d'ABI.


13
Quoi? La moitié des programmes cessent de toute façon de fonctionner sur chaque nouvelle version.
kinokijuf

7
Pourriez-vous s'il vous plaît fournir une sorte de citation pour l' instruction "Mac OS X utilise de grandes quantités de C ++ dans certaines bibliothèques" ? J'ai juste du mal à vous croire sur parole! Je suis désolé d'être sceptique.
Anish Ramaswamy

5
@AnishRamaswamy Regardez IOKit, WebKitet GLKit. Jetez également un œil à dyld. Ceux-ci sont très lourds en C ++.
Maxthon Chan

1
Je suis sûr que l'OSX Kernal est C et non C ++, en fait, tous les systèmes d'exploitation que j'ai rencontrés ont un C
kernal

10

Je comprends qu'il s'agit d'un ancien article, mais Windows n'est certainement pas écrit en C ++. Il y a beaucoup de C ++ mais ce que nous définissons techniquement comme un système d'exploitation n'est pas en C ++. L'API Windows, le noyau Windows (les deux sont essentiellement ce qu'est un système d'exploitation) sont écrits en C. Il y a des années, on m'a donné une fuite de code pour Windows 2000 et Windows XP. Le code n'était pas assez complet pour compiler le noyau ou l'API, mais nous avons pu compiler des programmes et des services individuels. Par exemple, nous avons réussi à compiler Notepad.exe, mspaint.exe et le service spoolsv.exe (spouleur d'impression). Tout est écrit en C. Je n'ai pas regardé à nouveau mais je suis sûr que le code divulgué survit toujours sous la forme de fichiers torrent qui peuvent toujours être disponibles.


9

Windows: principalement C et C ++, certains C #


1
.NET est fourni avec Windows. Beaucoup de .NET est en C #.
Jonathan Parker

Il y a des rumeurs selon lesquelles les futures versions (Windows 8 peut-être) de Windows auront du code C ++ remplacé par C # /. NET.
Jonathan Parker

Ils ont déjà géré un OS fonctionnant (presque) complètement en C #. C'est ce qu'on appelle la singularité. research.microsoft.com/en-us/projects/singularity
Randolpho

Luc M: Oui, il y a du code C # dans Windows. Fouillez et vous le trouverez. .Net est livré avec le système d'exploitation, mais cela ne signifie pas que le système d'exploitation est écrit à l'aide de .Net. Et Windows n'est pas la singularité. Il y a une énorme différence entre un prototype de recherche et un vrai système d'exploitation.
ReinstateMonica Larry Osterman,

2
@ 1800Information - C # compile en code machine à partir de là JIT compile en code machine lors de son exécution? Je pense que vous êtes confus. Il y a du bytecode et il y a une machine virtuelle: en.wikipedia.org/wiki/Common_Intermediate_Language
Brock Woolf

9
  • fenêtres: C ++
  • linux: C
  • mac: objectif C
  • android: JAVA, C, C ++
  • Solaris: C, C ++
  • iOS 7: Objective-C, Swift, C, C ++

Android est écrit en Java? Vraiment?
nirvanaswap


3
La discussion porte sur le système d'exploitation. Un système d'exploitation ne peut pas être construit sans un langage de programmation système. Il n'est pas possible de faire de la programmation système avec Java.
Jam Risser

Yah. Certaines parties d'un système peuvent être construites en Java et certains exemples sont déjà présents comme JavaOS, bien que cela n'ait pas réussi. Je ne dis pas que vous pouvez construire un OS avec 100% java.
Shukant Pal

2
@JamRisser Android utilise le noyau Linux, qui est en C. Le système, presque jusqu'aux couches les plus profondes, est écrit en Java. La machine virtuelle Dalvik, qui est une machine virtuelle java écrite par Google, est en C ou C ++.
peterh

7

Sensationnel!!! 9 ans de question, mais je viens de tomber sur une série d' articles internes sur l'historique de la ligne de commande Windows et je pense qu'une partie peut être du côté Windows pertinent de la question:

Pour ceux qui se soucient de telles choses: Beaucoup ont demandé si Windows est écrit en C ou C ++. La réponse est que, malgré la conception basée sur les objets de NT, comme la plupart des systèmes d'exploitation, Windows est presque entièrement écrit en «C». Pourquoi? C ++ introduit un coût en termes d'encombrement mémoire et de surcharge d'exécution de code. Même aujourd'hui, les coûts cachés du code écrit en C ++ peuvent être surprenants, mais à la fin des années 1990, lorsque la mémoire coûtait ~ 60 $ / Mo (oui… 60 $ par MEGABYTE!), le coût de mémoire caché des vtables, etc. était important. De plus, le coût de l'indirection d'appels par méthode virtuelle et du déréférencement d'objet pourrait entraîner des performances et des pénalités d'échelle très importantes pour le code C ++ à ce moment-là. Bien qu'il faille encore être prudent, la surcharge de performances du C ++ moderne sur les ordinateurs modernes est beaucoup moins préoccupante et constitue souvent un compromis acceptable compte tenu de ses avantages en termes de sécurité, de lisibilité et de maintenabilité ... c'est pourquoi nous sommes mise à niveau régulière du code de la console vers le C ++ moderne.


6

Vous avez raison MacOSX a Objective-C dans le noyau.

Windows C ++

Linux C

À propos des langages de script, non, ils sont à peu près de haut niveau.


7
Windows en C: noyau, pilotes, API. Seuls les applications système et les outils en C ++, je suppose. Il est donc plus clair de dire juste C
abatishchev

5

J'ai lu ou entendu que Mac OS X est écrit principalement en Objective-C avec certaines des parties de niveau inférieur, telles que le noyau et les pilotes de périphériques matériels écrits en C. Je crois qu'Apple "mange (nt) sa propre nourriture pour chien" ", ce qui signifie qu'ils écrivent Mac OS X à l'aide de leurs propres outils de développement Xcode . Le compilateur-éditeur de liens GCC (GNU Compiler Collection) est l'outil de ligne de commande Unix que xCode a utilisé pour la plupart de sa compilation et / ou de sa liaison d'exécutables. Parmi d'autres langages possibles, je sais que GCC compile le code source des langages C, Objective-C, C ++ et Objective-C ++.


4

Le noyau Linux est principalement écrit en C (et un peu de langage d'assemblage, j'imagine), mais certains des utilitaires (programmes) importants de l'espace utilisateur sont des scripts shell écrits dans le langage de script Bash. Au-delà de cela, il est difficile de définir "Linux" car vous construisez un système Linux en sélectionnant les morceaux que vous voulez et en les assemblant, et selon ce que veut un utilisateur Linux individuel, vous pouvez impliquer à peu près n'importe quel langage. (Comme Paul l'a dit, Python et C ++ jouent des rôles importants)


3

En plus du noyau de Mac OS X, Finder n'avait pas été écrit en Objective-C avant Snow Leopard. Dans Snow Leopard, il a été écrit en Cocoa, Objective-C



1

Windows n'est évidemment pas écrit en C # (!)

Il suffit de voir le code source de Windows et vous verrez ...


36
"Il suffit de voir le code source de Windows" si vous êtes l'un des rares qui est autorisé / capable de le faire ...
Joachim Sauer

1
Il y a beaucoup de parties de code source Windows dans Torrents, aussi quelques critiques
abatishchev

4
Des parties du code Windows ont fui, il y a des années. Voir par exemple ce vieux fil: < kuro5hin.org/story/2004/2/15/71552/7795 >. :)
détendez-vous le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.