На каких языках написаны Windows, Mac OS X и Linux?

273

Мне было просто интересно, кто знает, из чего состоят языки программирования Windows, Mac OS X и Linux и какие языки используются для каждой части ОС (то есть: ядро, архитектура подключаемых модулей, компоненты GUI и т. Д.).

Я предполагаю, что есть несколько языков для каждого, и, очевидно, я знаю, что ядро ​​Linux написано на C.

Я полностью предполагаю, что Mac OS X содержит много кода Objective-C, поскольку это язык Apple, полученный из NeXT.

Я слышал, что Windows содержит C, C ++ и Intel Assembly. Linux или Mac OS содержат какой-либо ассемблерный код?

Кроме того, существуют ли языки сценариев, такие как Ruby, Python и т. Д., Используемые разработчиками ОС для сценариев частей ОС? Какие части ОС будут написаны на каждом языке?

Брок Вульф
источник
Этот обмен SO может помочь ответить на самую последнюю часть вашего вопроса.
Бикрамджит Сингх

Ответы:

269
  • Windows: C ++, ядро ​​в C
  • Mac: Цель C, ядро ​​в C (подсистема IO PnP - Embedded C ++)
  • Linux: большинство вещей на C, многие пользовательские приложения на Python, KDE - это C ++

Все ядра также будут использовать некоторый ассемблерный код.

Ана Беттс
источник
13
Я должен добавить, что Gnome тоже в значительной степени C.
Натан Осман
17
Гном также заигрывал с C # (моно).
Христо Илиев
6
Я считаю, что в ядре Linux есть ассемблер.
GL2014
9
Правда, у каждого ядра будет хотя бы какой-нибудь ассемблер
Ана Беттс
4
Для ясности - подсистема IOKit ядра Apple (для драйверов) использует (ограниченное подмножество) C ++. И на всех трех, то есть Windows, Mac и Linux, многие из наиболее важных пользовательских приложений написаны на C или C ++. Предположительно, например, MS пыталась переделать Office в .NET, но вернулась к C ++. И ядро ​​Linux использует много идиом, подобных C ++, но готовится вручную в C, например, наследование в коде драйвера.
Эрик Алапяя,
94

Linux: C. Некоторые детали в сборке.

[...] Это в основном на C, но большинство людей не стали бы называть то, что я пишу C. Он использует все мыслимые возможности 386, которые я смог найти, так как это был также проект, чтобы рассказать мне о 386. Как уже упоминалось он использует MMU как для подкачки (пока не на диск), так и для сегментации. Это сегментация, которая делает его ДЕЙСТВИТЕЛЬНО 386 зависимым (каждая задача имеет 64-мегабайтный сегмент для кода и данных - максимум 64 задачи в 4 ГБ. Любой, кому нужно более 64 МБ / задача - жесткие файлы cookie). [...] Некоторые из моих "C" -файлов (в частности, mm.c) являются почти таким же ассемблером, что и C. [...] В отличие от minix, я также сталкиваюсь с LIKE-прерываниями, поэтому прерывания обрабатываются без попыток скрыть причина, стоящая за ними. (Источник)

Mac OS X: какао в основном в Objective-C. Ядро написано на C, некоторые части в сборке.

Mac OS X на уровне ядра - это, в основном, старая, бесплатная операционная система, называемая BSD (в частности, это Darwin, своего рода гибрид BSD, Mach и некоторых других) ... почти полностью C, с небольшим ассемблер брошен в. (Источник)

Большая часть Cocoa реализована в Objective-C, объектно-ориентированном языке, который скомпилирован для работы с невероятной скоростью, но использует действительно динамическое время выполнения, что делает его уникально гибким. Поскольку Objective-C является надмножеством C, легко смешивать C и даже C ++ в ваших приложениях Cocoa. (Источник)

Windows: C, C ++, C #. Некоторые детали на ассемблере.

Мы используем почти полностью C, C ++ и C # для Windows. Некоторые области кода настроены вручную или написаны вручную. (Источник)

Unix: C. Некоторые детали в сборке. (Источник)

Pacerier
источник
3
Подсистема драйверов в Дарвине (IOKit) в значительной степени опирается на COM-подобную объектную модель, написанную в подмножестве C ++.
Христо Илиев
@ Тахлор да. Как вы можете написать низкоуровневую вещь, такую ​​как ядро ​​в VB, когда у него нет даже оператора для сдвига битов? Это то, что сказал Раймонд Чен . Приложения для Windows отличаются
phuclv
15

Mac OS X использует большое количество C ++ в некоторых библиотеках, но это не раскрывается, так как они боятся взлома ABI.

Алекс странно
источник
13
Какой? В любом случае половина программ перестает работать на каждом новом выпуске.
киноюф
7
Не могли бы вы привести какую-то цитату для выражения «Mac OS X использует большое количество C ++ внутри некоторых библиотек» ? Мне просто сложно поверить на слово! Прошу прощения за скептическое отношение.
Аниш Рамасвами
5
@AnishRamaswamy Посмотри IOKit, WebKitи GLKit. Также взглянуть на dyld. Это очень тяжелый C ++.
Maxthon Chan
1
Я уверен, что OSX Kernal - это C, а не C ++, на самом деле все операционные системы, с которыми я сталкивался, имеют C kernal
twigg
10

Я понимаю, что это старый пост, но Windows определенно не написана на C ++. В нем много C ++, но то, что мы технически определяем как операционную систему, отсутствует в C ++. Windows API, ядро ​​Windows (оба они, по сути, являются операционной системой) написаны на языке C. Несколько лет назад мне дали утечку кода для Windows 2000 и Windows XP. Код был недостаточно полным, чтобы скомпилировать ядро ​​или API, но мы смогли скомпилировать отдельные программы и сервисы. Например, мы смогли успешно скомпилировать Notepad.exe, mspaint.exe и службу spoolsv.exe (диспетчер очереди печати). Все написанное на C. Я не посмотрел снова, но я уверен, что утечка кода все еще сохраняется в виде торрент-файлов, которые все еще могут быть доступны.

Герцог епископ
источник
9

Windows: в основном C и C ++, некоторые C #

Восстановить Моника Ларри Остерман
источник
1
.NET поставляется с Windows. Много .NET находится в C #.
Джонатан Паркер
Ходят слухи, что в будущих версиях Windows (возможно, Windows 8) код C ++ будет заменен на C # / .NET.
Джонатан Паркер
Они уже почти полностью управляют работающей ОС на C #. Это называется Сингулярность. research.microsoft.com/en-us/projects/singularity
Randolpho
Люк М: Да, в Windows есть код C #. Посмотри вокруг, и ты найдешь это. .Net поставляется с ОС, но это не значит, что ОС написана с использованием .Net. И Windows не Сингулярность. Существует огромная разница между исследовательским прототипом и реальной операционной системой.
Восстановить Монику Ларри Остермана
2
@ 1800Information - C # компилируется в машинный код оттуда JIT компилируется в машинный код при запуске? Я думаю, что вы в замешательстве. Байт-код IS и виртуальная машина IS: en.wikipedia.org/wiki/Common_Intermediate_Language
Брок Вульф,
9
  • Windows: C ++
  • Linux: C
  • Mac: цель C
  • Android: JAVA, C, C ++
  • Солярис: C, C ++
  • iOS 7: Objective-C, Swift, C, C ++
sonsha
источник
Android написан на Java? В самом деле?
нирванасвап
3
Android: Java (пользовательский интерфейс). Источник: en.wikipedia.org/wiki/Android_(operating_system)
Нитеш Борад
3
Обсуждение об операционной системе. Операционная система не может быть построена без языка системного программирования. Системное программирование на Java невозможно.
Джем Рисер
Ях. Некоторые части системы могут быть встроены в Java, а некоторые примеры уже присутствуют, например, в JavaOS, хотя это не было успешным. Я не говорю, что вы можете собрать ОС со 100% Java.
Шукант Пал
2
@JamRisser Android использует ядро ​​Linux, которое находится на C. Система, почти до самых глубоких слоев, написана на Java. Виртуальная машина Dalvik, которая является виртуальной машиной Java, написанной Google, находится на C или C ++.
Петер - Восстановить Монику
7

Вот это да!!! 9 лет вопроса, но я только что натолкнулся на серию внутренних статей по истории командной строки Windows, и я думаю, что какая-то ее часть может иметь отношение к проблеме Windows:

Для тех, кому небезразличны такие вещи: многие спрашивают, написана ли Windows на C или C ++. Ответ заключается в том, что, несмотря на объектно-ориентированный дизайн NT, как и большинство ОС, Windows почти полностью написана на «C». Зачем? C ++ вводит стоимость с точки зрения объема памяти и накладных расходов на выполнение кода. Даже сегодня скрытые затраты на код, написанный на C ++, могут быть удивительными, но в конце 1990-х годов, когда память стоила ~ 60 долларов США / МБ (да… 60 долларов США за MEGABYTE!), стоимость скрытой памяти vtables и т. д. была значительной. Кроме того, стоимость косвенного обращения к виртуальному методу и разыменования объекта может привести к очень значительным потерям производительности и масштаба для кода C ++ в то время. Несмотря на то, что все же нужно быть осторожным, накладные расходы на производительность современного C ++ на современных компьютерах представляют собой гораздо меньшую проблему и часто являются приемлемым компромиссом, учитывая его преимущества в плане безопасности, удобочитаемости и удобства обслуживания ... вот почему мы неуклонное обновление кода консоли до современного C ++.

ADEM
источник
6

Вы правы. MacOSX имеет Objective-C в ядре.

Windows C ++

Linux C

Насчет скриптовых языков, нет, они довольно высокого уровня.

OscarRyz
источник
7
Windows в C: ядро, драйверы, API. Наверное, только системные приложения и инструменты на C ++. Так что яснее сказать просто С
абатищев
5

Я читал или слышал, что Mac OS X написана в основном на Objective-C с некоторыми компонентами нижнего уровня, такими как ядро ​​и драйверы аппаратных устройств, написанными на C. Я считаю, что Apple "ест" свою собачью еду "Это означает, что они пишут Mac OS X, используя свои собственные инструменты разработчика Xcode . GCC (GNU Compiler Collection) компилятор-линкер инструмент командной строки Unix , которая Xcode используется для большинства его составления и / или ссылки на исполняемые файлы. Среди других возможных языков я знаю, что GCC компилирует исходный код из языков C, Objective-C, C ++ и Objective-C ++.

Патрик Касселл
источник
4

Ядро Linux в основном написано на C (и немного на ассемблере, я бы подумал), но некоторые из важных утилит (программ) пользовательского пространства - это сценарии оболочки, написанные на языке сценариев Bash. Кроме того, довольно сложно определить «Linux», поскольку вы в основном строите систему Linux, выбирая нужные кусочки и собирая их вместе, и в зависимости от того, что хочет отдельный пользователь Linux, вы можете использовать практически любой язык. (Как сказал Пол, Python и C ++ играют важную роль)

Дэвид З
источник
3

В дополнение к ядру Mac OS X, Finder не был написан на Objective-C до Snow Leopard. В Snow Leopard было написано в Какао, Objective-C

Чагатай Гюртюрк
источник
1

Windows явно не написана на C # (!)

Просто посмотрите исходный код Windows, и вы увидите ...


источник
36
«Просто посмотрите исходный код Windows», если вы один из немногих, кому разрешено / может это сделать ...
Йоахим Зауэр
1
В Torrents есть много частей с исходным кодом Windows, а также несколько обзоров
abatishchev
4
Части кода Windows просочились много лет назад. Смотрите, например, эту старую ветку : < kuro5hin.org/story/2004/2/15/71552/7795 >. :)
расслабиться