¿En qué idiomas están escritos Windows, Mac OS X y Linux?

273

Me preguntaba quién sabe de qué lenguajes de programación se componen Windows, Mac OS X y Linux y qué lenguajes se utilizan para cada parte del sistema operativo (es decir: Kernel, arquitectura de plug-in, componentes GUI, etc.).

Supongo que hay varios idiomas para cada uno y, obviamente, sé que el kernel de Linux está escrito en C.

Supongo totalmente aquí que Mac OS X contiene una gran cantidad de código Objective-C, ya que es el lenguaje de Apple derivado de NeXT.

Windows, he oído que contiene C, C ++ e Intel Assembly. ¿Linux o Mac OS contienen algún código de ensamblaje?

Además, ¿existen lenguajes de scripting como Ruby, Python, etc. utilizados por los desarrolladores del sistema operativo para las partes de scripting del sistema operativo? ¿Qué partes del sistema operativo se escribirían en cada idioma?

Brock Woolf
fuente
Este intercambio SO puede ayudar a responder la última parte de su pregunta.
Bikramjeet Singh

Respuestas:

269
  • Windows: C ++, el núcleo está en C
  • Mac: Objetivo C, el núcleo está en C (el subsistema IO PnP es Embedded C ++)
  • Linux: la mayoría de las cosas están en C, muchas aplicaciones de usuario están en Python, KDE es todo C ++

Todos los núcleos utilizarán también un código de ensamblaje.

Ana Betts
fuente
13
Debo agregar que Gnome es prácticamente C también.
Nathan Osman
17
Gnome también coqueteó con C # (Mono).
Hristo Iliev
66
El kernel de Linux también tiene ensamblador, creo.
GL2014
9
Es cierto, cada núcleo tendrá al menos un ensamblador
Ana Betts
44
Para aclarar las cosas: el subsistema IOKit del kernel de Apple (para controladores) utiliza (un subconjunto restringido de) C ++. Y en los 3, es decir, Windows, Mac y Linux, muchas de las aplicaciones de usuario más importantes están escritas en C o C ++. Supuestamente, por ejemplo, MS intentó rehacer Office en .NET pero regresó a C ++. Y el kernel de Linux usa muchos modismos similares a C ++ pero cocinados a mano en C, por ejemplo, herencia en el código del controlador.
Erik Alapää
94

Linux: C. Algunas partes en ensamblaje.

[...] Está principalmente en C, pero la mayoría de la gente no llama lo que yo escribo C. Utiliza todas las características imaginables del 386 que pude encontrar, ya que también fue un proyecto para enseñarme sobre el 386. Como ya se mencionó. , utiliza una MMU, tanto para la paginación (aún no en el disco) como para la segmentación. Es la segmentación lo que lo hace REALMENTE dependiente 386 (cada tarea tiene un segmento de 64Mb para código y datos - máximo 64 tareas en 4Gb. Cualquiera que necesite más de 64Mb / tarea - cookies difíciles). [...] Algunos de mis archivos "C" (específicamente mm.c) son casi tan ensambladores como C. [...] A diferencia de minix, también me gustan las interrupciones, así que las interrupciones se manejan sin tratar de esconderse La razón detrás de ellos. (Fuente)

Mac OS X: Cocoa principalmente en Objective-C. Kernel escrito en C, algunas partes en ensamblaje.

Mac OS X, en la capa del kernel, es en su mayoría un sistema operativo libre y antiguo llamado BSD (específicamente, es Darwin, una especie de híbrido de BSD, Mach y algunas otras cosas) ... casi completamente C, con un poco de ensamblador lanzado. (Fuente)

Gran parte de Cocoa se implementa en Objective-C, un lenguaje orientado a objetos que se compila para ejecutarse a una velocidad increíble, pero que emplea un tiempo de ejecución verdaderamente dinámico que lo hace excepcionalmente flexible. Debido a que Objective-C es un superconjunto de C, es fácil mezclar C e incluso C ++ en sus aplicaciones de Cocoa. (Fuente)

Windows: C, C ++, C #. Algunas partes en ensamblador.

Usamos casi por completo C, C ++ y C # para Windows. Algunas áreas de código son sintonizado a mano / ensamblaje escrito a mano. (Fuente)

Unix: C. Algunas partes en ensamblaje. (Fuente)

Pacerier
fuente
3
El subsistema del controlador en Darwin (IOKit) se basa en gran medida en un modelo de objetos tipo COM que está escrito en un subconjunto de C ++.
Hristo Iliev
@Tahlor sí. ¿Cómo puedes escribir una cosa de bajo nivel como un núcleo en VB cuando ni siquiera tiene un operador para el cambio de bits? Esto es lo que dijo Raymond Chen . Las aplicaciones de Windows son diferentes
phuclv
15

Mac OS X usa grandes cantidades de C ++ dentro de algunas bibliotecas, pero no está expuesto ya que temen que se rompa ABI.

alex extraño
fuente
13
¿Qué? La mitad de los programas dejan de funcionar en cada nueva versión de todos modos.
kinokijuf
77
¿Podría proporcionar algún tipo de cita para la declaración "Mac OS X utiliza grandes cantidades de C ++ dentro de algunas bibliotecas" ? ¡Me resulta difícil tomar tu palabra! Lamento ser escéptico.
Anish Ramaswamy
55
@AnishRamaswamy Mire en el interior IOKit, WebKity GLKit. También echar un vistazo a dyld. Esos son muy pesados ​​en C ++.
Maxthon Chan
1
Estoy seguro de que el OSX Kernal es C y no C ++, de hecho, todos los sistemas operativos con los que me he encontrado tienen un
kernel
10

Entiendo que esta es una publicación anterior, pero Windows definitivamente no está escrito en C ++. Hay un montón de C ++, pero lo que definimos técnicamente como un sistema operativo no está en C ++. La API de Windows, el kernel de Windows (ambos son, en esencia, lo que es un sistema operativo) están escritos en C. Hace años recibí un código filtrado para Windows 2000 y Windows XP. El código no era lo suficientemente completo como para compilar el kernel o la API, pero pudimos compilar programas y servicios individuales. Por ejemplo, pudimos compilar con éxito Notepad.exe, mspaint.exe y el servicio spoolsv.exe (cola de impresión). Todo escrito en C. No he vuelto a mirar, pero estoy seguro de que el código filtrado aún sobrevive como archivos de torrent que aún pueden estar disponibles.

Duque obispo
fuente
9

Windows: principalmente C y C ++, algunos C #

RestablecerMonica Larry Osterman
fuente
1
.NET se envía con Windows. Una gran cantidad de .NET está en C #.
Jonathan Parker
Hay rumores de que las futuras versiones (tal vez Windows 8) tendrán algún código C ++ reemplazado por C # /. NET.
Jonathan Parker
Ya han administrado un sistema operativo que funciona (casi) completamente en C #. Se llama Singularidad. research.microsoft.com/en-us/projects/singularity
Randolpho
Luc M: Sí, hay código C # en Windows. Mire y lo encontrará. .Net se envía con el sistema operativo, pero no significa que el sistema operativo esté escrito usando .Net. Y Windows no es Singularidad. Hay una gran diferencia entre un prototipo de investigación y un sistema operativo real.
RestablecerMonica Larry Osterman
2
@ 1800Information - ¿C # compila al código de la máquina desde allí compila JIT al código de la máquina cuando se ejecuta? Creo que eres el confundido. Hay un código de bytes y una máquina virtual: en.wikipedia.org/wiki/Common_Intermediate_Language
Brock Woolf el
9
  • ventanas: C ++
  • linux: C
  • mac: Objetivo C
  • Android: JAVA, C, C ++
  • Solaris: C, C ++
  • iOS 7: Objective-C, Swift, C, C ++
Sonsha
fuente
¿Android está escrito en Java? De Verdad?
nirvanaswap
3
Android: Java (UI). Fuente: en.wikipedia.org/wiki/Android_(operating_system)
Nitesh Borad
3
La discusión es sobre el sistema operativo. Un sistema operativo no se puede construir sin un lenguaje de programación del sistema. No es posible hacer la programación del sistema con Java.
Jam Risser
Yah Algunas partes de un sistema se pueden construir en Java y algunos ejemplos ya están presentes como JavaOS, aunque no fue exitoso. No estoy diciendo que puedas construir un sistema operativo con un 100% de Java.
Shukant Pal
2
@JamRisser Android usa el kernel de Linux, que está en C. El sistema, casi hasta las capas más profundas, está escrito en Java. Dalvik VM, que es una máquina virtual Java escrita por Google, está en C o C ++.
peterh - Restablece a Mónica el
7

¡¡¡Guau!!! 9 años de preguntas, pero acabo de encontrar una serie de artículos internos sobre el historial de la línea de comandos de Windows y creo que alguna parte podría ser relevante para Windows:

Para aquellos que se preocupan por tales cosas: muchos han preguntado si Windows está escrito en C o C ++. La respuesta es que, a pesar del diseño basado en objetos de NT, como la mayoría de los sistemas operativos, Windows está casi completamente escrito en 'C'. ¿Por qué? C ++ introduce un costo en términos de huella de memoria y sobrecarga de ejecución de código. Incluso hoy, los costos ocultos del código escrito en C ++ pueden ser sorprendentes, pero a fines de la década de 1990, cuando la memoria costaba ~ $ 60 / MB (sí ... ¡$ 60 por MEGABYTE!), el costo de memoria oculta de vtables, etc. fue significativo. Además, el costo de la indirección de llamadas de método virtual y la desreferenciación de objetos podría generar penalizaciones de escala y rendimiento muy significativas para el código C ++ en ese momento. Si bien uno aún debe tener cuidado, la sobrecarga de rendimiento de C ++ moderno en computadoras modernas es mucho menos preocupante, y a menudo es una compensación aceptable teniendo en cuenta sus beneficios de seguridad, legibilidad y mantenibilidad ... por eso estamos Actualizando constantemente el código de la consola a C ++ moderno.

ademas
fuente
6

Tienes razón MacOSX tiene Objective-C en el núcleo.

Windows C ++

Linux C

Sobre los lenguajes de secuencias de comandos, no, son bastante de alto nivel.

OscarRyz
fuente
77
Windows en C: kernel, controladores, API. Solo aplicaciones y herramientas del sistema en C ++, supongo. Así que es más claro decir solo C
abatishchev
5

He leído o escuchado que Mac OS X está escrito principalmente en Objective-C con algunas de las partes de nivel inferior, como el kernel y los controladores de dispositivos de hardware escritos en C. Creo que Apple "come (s) su propia comida para perros ", lo que significa que escriben Mac OS X utilizando sus propias herramientas de desarrollo de Xcode . El compilador-enlazador GCC (GNU Compiler Collection) es la herramienta de línea de comandos de Unix que xCode usó para la mayoría de sus compilaciones y / o enlaces de ejecutables. Entre otros lenguajes posibles, sé que GCC compila el código fuente de los lenguajes C, Objective-C, C ++ y Objective-C ++.

Patrick Cassell
fuente
4

El núcleo de Linux está escrito principalmente en C (y un poco de lenguaje ensamblador, me imagino), pero algunas de las utilidades (programas) importantes del espacio de usuario son scripts de shell escritos en el lenguaje de scripting Bash. Más allá de eso, es un poco difícil definir "Linux", ya que básicamente construyes un sistema Linux seleccionando partes y piezas que deseas y uniéndolos, y dependiendo de lo que quiera un usuario individual de Linux, puedes obtener casi cualquier idioma involucrado. (Como dijo Paul, Python y C ++ juegan papeles importantes)

David Z
fuente
3

Como una adición sobre el núcleo de Mac OS X, Finder no se había escrito en Objective-C antes de Snow Leopard. En Snow Leopard fue escrito en Cocoa, Objective-C

Çağatay Gürtürk
fuente
1

Windows obviamente no está escrito en C # (!)

Simplemente vea el código fuente de Windows y verá ...


fuente
36
"Basta con ver el código fuente de Windows" si usted es uno de los pocos que se permite / capaz de hacer eso ...
Joachim Sauer
1
Hay muchas partes del código fuente de Windows en Torrents, también algunas reseñas de él
Abatishchev
44
Partes del código de Windows se han filtrado, hace años. Ver por ejemplo este viejo hilo: < kuro5hin.org/story/2004/2/15/71552/7795 >. :)
relajarse