Какой язык использовался для написания операционной системы windows

Несколько дней назад в сеть просочился образ ранней версии Windows 11. Различные издательства провели тесты по производительности и пришли к неутешительному вы...

Время прочтения
11 мин

Просмотры 59K

Несколько дней назад в сеть просочился образ ранней версии Windows 11. Различные издательства провели тесты по производительности и пришли к неутешительному выводу: Windows 11 в среднем работает хуже, чем Windows 10. Но расстраиваться рано! Проблемы производительности могут быть связаны с «сыростью» слитого образа и нюансами совместимости с текущими программами. Так или иначе, 24 июня состоится официальная презентация нового поколения операционных систем Windows, которая, возможно, даст ответы на многие вопросы. Если сегодня у вас есть настроение для ностальгии, предлагаем вам окунуться в мир Windows: познакомиться с историей, как менялась ось и что у нее внутри.

История Windows

В начале 80 годов прошлого века компания IBM работала над персональным компьютером на базе процессора Intel 8088. С середины 70 годов компания Microsoft была основным поставщиком Basic для восьмибитных микрокомпьютеров. Когда IBM обратилась к Microsoft для лицензирования Basic для их нового компьютера IBM PC, Microsoft согласилась, а также посоветовала обратиться к компании Digital Research для лицензирования операционной системы CP/M. Но, получилось так, что глава Digital Research не нашел в своем графике времени для встречи для IBM, и IBM снова обратилась к Microsoft, теперь уже с просьбой решить вопрос операционной системы для IBM PC. Microsoft купила клон ОС CP/M у компании Seattle Computer Products и перенесла её на IBM PC. Итоговым названием получившейся ОС стало MS-DOS 1.0.

IBM PC

Первые продукты с названием «Windows» от Microsoft не были операционными системами. Это были графические среды для MS-DOS. На фоне успеха, в том числе и коммерческого, пользовательского интерфейса на Apple Lisa, компания решила реализовать графический интерфейс на IBM PC с MS-DOS. В отличии от относительно дешевых IBM PC, Apple Lisa стоили дорого (почти 10 тысяч долларов), и немногие покупатели могли позволить купить их. Microsoft решила занять нишу дешевых компьютеров с графическим интерфейсом. При этом низкая стоимость достигалась экономией на комплектующих и более низкая производительность, по сравнению с Lisa, избежать не получилось. Так, в 1985, 1987 и в 1990 выходят первые три версии Windows — 1.0, 2.0 и 3.0. Причем за первые шесть месяцев после релиза Windows 3.0 было продано более 1 миллиона экземпляров. Дальнейшее развитие Windows можно разделить на два направления — Windows на базе MS-DOS и Windows на базе NT.

Windows 1.01

Windows 9x

Windows на базе MS-DOS или Windows 9x не были первыми ОС от Microsoft, но они продолжали «старые традиции» и были построены на основе 16-битного кода MS-DOS. В августе 1995 года была выпущена Windows 95 — первая система семейства Windows 9x. Она уже была полноценной операционной системой с соответствующими возможностями.  Однако у системы были проблемы с безопасностью (например, не было «администратора») и с изоляцией приложений. Зависание 16-битного приложения приводило к блокировке всей системы. Проблемы со стабильностью достались и Windows 98 и Windows ME, которые отличались от выпуска 95 года рядом небольших обновлений.

Windows 95

Windows NT

В целом, к концу 80-х годов в Microsoft появилось понимание о необходимости разработки операционной системы не на базе MS-DOS. Параллельно с разработкой софта, связанного с MS-DOS, Microsoft наняла команду инженеров из компании DEC для разработки новой 32-битной операционной системы. Главой группы стал Дэйв Катлер — один из главных разработчиков ОС VMS. Новая система была названа NT — от сокращения New Technology. Основной упор при разработке NT делался на безопасность и надежность системы, а также на совместимость с Windows на MS-DOS. Так получилось, что опыт при разработке VMS повлиял на NT и сходство между ними стало причиной спора между DEC и Microsoft. По итогу спор был решен во внесудебном порядке. 

Дэйв Катлер

Первая система Windows называлась Windows NT 3.1 и была выпущена в 1993 году. Это была первая ОС от Microsoft. Индекс 3.1 был выбран для соответствия Windows 3.1 на MS-DOS. Эта версия не имела особого успеха. Для NT требовалось больше памяти, 32-разрядных приложений на рынке было мало, возникали проблемы с совместимостью драйвером. Достичь поставленных целей смогли в NT 3.5. А первым серьезным обновлением для NT стала версия 4.0 в 96 году. Теперь эта система была мощна, надежна и безопасна, а также обеспечивала тот же интерфейс, что и Windows 95 (которая к тому моменту была чрезвычайно популярной). 

Windows NT 3.1

В 2000 году вышла новая версия Windows — Windows 2000. Она развивала идеи, заложенные в системы NT. Был добавлена технология Plug-and-Play, управление электропитанием и улучшен интерфейс пользователя. 

Windows 2000

Успех Windows 2000 задал вектор развития для следующего поколения — Windows XP. В «хрюшке» Microsoft улучшила совместимость, интерфейс стал более дружелюбным. Стратегия Microsoft завоевывать аудиторию уже знакомыми системами дала плоды — за несколько лет Windows XP была установлена на сотнях миллионах ПК. Эпоха MS-DOS подошла к концу.

Windows XP

Следующий проект Microsoft пал жертвой собственных амбиций. Через пять лет после Windows XP, в 2006 году на свет вышла Windows Vista. В ней был переделан графический интерфейс, переработаны и добавлены функциональные возможности в плане безопасности. Была улучшена производительность, надежность.

Первоначальные планы Microsoft по поводу Vista были настолько обширны, что через несколько лет после начала разработки проект пришлось сильно ограничить. Vista включала в себе 70 миллионов строк кода, часть которого составлял «причесанный» код XP. Неудача Vista отчасти с тем, что она вышла не в то время. На 2006 год пришелся бум недорогих компьютеров, которые не могли обеспечить достаточную для Vista производительность. 

Windows Vista

Проблемы Vista были учтены при разработке Windows 7. Microsoft уделила большее внимание тестированию и производительности новой системы. Windows 7 быстро вытеснила Vista, а затем и XP, став самой популярной версией Windows до появления Windows 10 (сейчас Windows 7 на втором месте по популярности).

Windows 7

Бум смартфонов в начале 2010-х подтолкнул Microsoft к созданию операционной системы, которую можно было бы развернуть на разных устройствах: на телефонах, планшетах, приставках и т. д. В результате этой работы мир узрел Windows 8. «Восьмерка» построена на модульном подходе MinWin для получения небольшого ядра ОС, которое можно было бы расширить на линейку других типов устройств. Но аудитория встретила холодно такой подход. Многие люди критиковали «смартфоноподобный» интерфейс на ПК, отсутствие кнопки пуск. Для решения многих проблем Microsoft выпустила обновление под названием Windows 8.1, которая, помимо исправления имеющихся ошибок, добавила новые функции. 

Windows 8.1

И вот, к 2015 году Microsoft выпускает Windows 10. При разработке Microsoft продолжала развитие идеи единой системы для разных устройств. В «десятке» появилась голосовая помощница Кортана, вернули меню «Пуск», улучшена системная безопасность. 

Технические аспекты

Чтобы осветить все технические аспекты и тонкости операционной системы Windows понадобится не менее 1000 страниц. Для особо любопытных советуем 7-е издание «Внутреннего устройства Windows« Марка Руссиновича, специалиста по внутреннему устройству Windows. Также можно почитать «Современные операционные системы« Эндрю Таненбаума и «Operating System Concepts«: в обеих книгах есть главы, посвященные Windows. Здесь же ограничимся рассмотрением инструментов взаимодействия приложений пользователя с операционной системой (Windows API) и архитектуры «оси». 

Архитектура 

Во многих многопользовательских операционных системах сама ОС отделяется от приложений. Код ядра ОС выполняется в привилегированном режиме процессора (режим ядра). Для него доступны системные данные и оборудование. В непривилегированном режиме (пользовательский режим) выполняется код приложений. Ему предоставляется ограниченный набор интерфейсов и ограниченный доступ к системным данным. Прямой доступ к оборудованию заблокирован. При вызове программой пользовательского режима системной функции процессор выполняет специальную команду, переключающую вызывающий поток (последовательность команд внутри процесса, планируемая Windows для исполнения) в режим ядра. Когда системная функция завершается, операционная система переключает контекст потока обратно в пользовательский режим и дает возможность вызывающей стороне продолжить работу. 

Windows считается операционной системой с гибридным ядром. С одной стороны компоненты ядра Windows располагаются в вытесняемой памяти и взаимодействуют друг с другом путем передачи сообщений, как в микроядерных системах. С другой стороны ядро слишком велико (более 1 Мбайт), а большая часть кода ОС и кода драйверов устройств использует одно защищенное пространство памяти защищенного режима, что свойственно монолитным ОС. Это означает, что в теории любой компонент ОС или драйвер устройства может повредить данные, используемые другими системными компонентами. В Windows эта проблема решается за счет повышения качества и контроля происхождения сторонних драйверов через такие программы, как WHQL или KMCS. Одновременно применяются дополнительные технологии защиты ядра, такие как безопасность на базе виртуализации, функции Device Guard.

Рассмотрим ключевые системные компоненты, формирующие архитектуру системы. На рисунке ниже представлена упрощенная схема, на которой опущены некоторые элементы, например, сетевые компоненты и различные уровни драйверов. Первое, на что стоит обратить внимание — это линия, разделяющая части пользовательского режима и режима ядра. Как упоминалось выше, потоки пользовательского режима выполняются в закрытом адресном пространстве процессов. На время выполнения в режиме ядра они получают доступ к системному пространству. Таким образом, системные процессы, пользовательские процессы, процессы служб и подсистемы среды обладают собственным закрытыми адресными пространствами. 

Упрощенная схема архитектуры Windows

Вторая линия разделяет компоненты режима ядра и гипервизор (Hyper-V). Гипервизор перехватывает многие привилегированные операции, выполняемые ядром, и эмулирует их таким образом, чтобы позволить на одной и той же машине одновременно работать нескольким операционными системам. Гипервизор работает на том же уровне привилегий процессора (0), что и ядро. Но из-за использования специализированных команд процессора (VT-x у процессоров Intel, SVM у АMD) он может изолироваться от ядра с сохранением контроля над ним и приложениями. Поэтому некоторые иногда применяют термин «кольцо -1».

Четыре базовых типа процессов пользовательского режима:

  • Пользовательские процессы. Эти процессы относятся к одному из следующих типов: 32- или 64-разрядные приложения Windows (приложения Windows Apps, работающие на базе среды Windows Runtime в Windows 8 и выше, включаются в эту категорию), 16-разрядные приложения Windows 3.1, 16-разрядные приложения MS-DOS, 32- и 64-разрядные приложения POSIX. Заметим, что 16-разрядные приложения могут выполняться только в 32-разрядных версиях Windows, а приложения POSIX в Windows 8 уже не поддерживаются. 
  • Процессы служб. В эту категорию входят процессы, являющиеся хостами для служб Windows (например, службы планировщика задач и диспетчер печати). Обычно к службам предъявляется требование независимости выполнения от входа пользователя. Многие серверные приложения Windows (например, Microsoft SQL Server и Microsoft Exchange Server) также включают компоненты, выполняемые как службы.
  • Системные процессы. Фиксированные процессы, такие как процесс входа или диспетчер сеансов, не являются службами Windows. Другими словами, они не запускаются диспетчером служб.
  • Серверные процессы подсистем среды. Такие процессы реализуют часть поддержки среды ОС, предоставляемой пользователю и программисту. Изначально в Windows NT было три подсистемы среды: Windows, POSIX и OS/2. Подсистема OS/2 включалась только до Windows 2000, подсистема POSIX в последний раз была включена в Windows XP.Ultimate- и Enterprise-выпуски клиента Windows 7. Все серверные версии Windows 2008 R2 включают поддержку расширенной подсистемы POSIX, называемой SUA (Subsystem for UNIX-based Applications). Сейчас подсистема SUA не поддерживается и уже не включается как необязательное часть в версии Windows (Windows 10 версии 1607 включает подсистему Windows для Linux — WSL, Windows Subsystem for Linux).

Обратим внимание на блок DLL подсистем под блоками Процессы служб и Пользовательские процессы. В Windows пользовательские приложения не вызывают низкоуровневые сервисные функции операционной системы напрямую. Вместо этого они проходят через одну или несколько динамических библиотек (DLL) подсистем. Их роль состоит в том, чтобы преобразовывать документированные функции в соответствующие внутренние (недокументированные) вызовы системных функций, реализованных в основном в Ntdll.dll. Преобразование может включать (а может не включать) отправку сообщения процессу, обслуживающему пользовательский процесс.

Компоненты режима ядра:

  • Исполнительная система. Она содержит базовые сервисные функции ОС: управление памятью, управление процессами и потоками, безопасность, ввод/вывод, сетевая поддержка и межпроцессные коммуникации.
  • Ядро Windows. Низкоуровневые функции ОС: планирование потоков, диспетчеризация прерываний и исключений и многопроцессорная синхронизация. Также ядро предоставляет набор функций и базовых объектов, которые используются исполнительной системой для реализации высокоуровневых конструкций.
  • Драйверы устройств. Сюда входят как драйверы физических устройств, преобразующие вызовы пользовательских функций ввода/вывода в конкретные запросы ввода/вывода к устройству, так и драйверы устройств, не относящихся к физическому оборудованию, например драйверы файловой системы или сетевые драйверы. 
  • Слой абстрагирования оборудования (HAL). Прослойка кода, изолирующее ядро, драйверы устройств и прочий исполняемый код Windows от платформенно-зависимых различий в работе оборудования, например различий между системными платами.
  • Оконная и графическая система. Реализация функций графического интерфейса (GUI), также известных как функции GDI: работа с окнами, элементы пользовательского интерфейса и графический вывод.
  • Уровень гипервизора. Включает всего-навсего один компонент: сам гипервизор. В этой среде нет ни драйверов, ни других модулей. При этом сам гипервизор состоит из нескольких внутренних уровней и служб: собственный диспетчер памяти, планировщик виртуальных процессов, управление прерываниями и таймером, функции синхронизации, разделы (экземпляры виртуальных машин) и внутрипроцессные коммуникации (IPC, Inter-Process Communication) и многие другие.

В таблице ниже представлены некоторые файлы некоторых базовых компонентов Windows:

Windows API

Windows API (Application Programming Interface) — это программный интерфейс пользовательского режима для Windows. До появления 64-разрядной версии операционной системы программный интерфейс 32-разрядных версий Windows назывался Win32 API в отличие от исходного 16-разрядного Windows API (программный интерфейс для исходных 16-разрядных версий Windows). На данный момент термин Windows API или Win32 API относят как к 32-разрядным, так и к 64-разрядным версиям.

В «доисторические времена» Windows API состоял только из функций в стиле C. Выбор языка C был обусловлен тем, что написанный на нем код также мог использоваться из других языков. Он являлся достаточно низкоуровневым для предоставления сервиса ОС. Но огромное количество функций в сочетании с недостаточной последовательностью выбора имен и отсутствием логических группировок (вроде пространств имен C++) привели к тому, что в некоторых новых API используется другой механизм — модель COM.

COM базируется на двух основных принципах. Во-первых, клиенты взаимодействуют с объектами (серверные объекты COM) через интерфейсы — четко определенные контракты с набором логически связанных методов, сгруппированных посредством механизма диспетчеризации по виртуальным таблицам. Такой же механизм, к слову, обычно применяется компиляторами C++ для реализации диспетчеризации виртуальных функций. Таким образом обеспечивается двоичная совместимость и снимаются проблемы с декорированием имен компилятором. Поэтому, такие методы могут вызываться из многих других языков и компиляторов, включая C, C++, VB, языки .NET, Delphi и т. д. Вторым принципом является динамическая загрузка компонентов (вместо статической компоновки с клиентом).

WinRT

В Windows 8 появился новый API и исполнительная среда поддержки Windows Runtime (WinRT). WinRT состоит из платформенных сервисов, предназначенных для разработчиков приложений Windows Apps (приложения Windows Apps подходят для устройств, начиная от миниатюрных IoT-устройств до телефонов, планшетов, десктопных систем, ноутбуков и даже Xbox One и Microsoft HoloLens).

С точки зрения API платформа WinRT строится на базе COM, добавляя в базовую инфраструктуру COM различные расширения. С архитектурной точки зрения она обладает намного большей целостностью: в ней реализованы иерархии пространств имен, последовательная схема назначения имен и паттерны программирования. На базовом двоичном уровне WinRT API все равно строится на основе унаследованных двоичных файлов и API Windows. Это не новый «машинный» API для системы: ситуация немного напоминает то, как .NET строится на основе традиционного Windows API. 

.NET Framework

.NET Framework является частью Windows. Он состоит из двух основных компонентов:

  • CLR (Common Language Runtime). Исполнительная среда .NET, включает JIT-компилятор для преобразования инструкций языка CIL в низкоуровневый язык машинных команд процессора, сборщик мусора, систему проверки типов, безопасность обращения к коду и т. д. Среда реализована в виде внутрипроцессного сервера COM (DLL) и использует различные средства, предоставляемые Windows API.
  • .NET Framework Class Library (FCL). Обширная подборка типов, реализующих функциональность, часто используемую в клиентских и серверных приложениях, — средства пользовательского интерфейса, поддержка сети, работа с базами данных и т. д.

На схеме представлены отношения между .NET Framework и ОС Windows:

Отношение между .NET и ОС Windows. Термин «сервер COM» обычно относится к DLL библиотеке или исполняемому файлу (EXE), в котором реализованы классы COM.

Ядро Microsoft Windows разработано в основном на языке C, с некоторыми частями на языке ассемблера. На протяжении десятилетий наиболее часто используемая операционная система в мире, занимающая около 90% рынка, была основана на ядре, написанном на C.

Windows написана на C или C ++?

Для тех, кто заботится о таких вещах: многие спрашивают, написана ли Windows на C или C ++. Ответ заключается в том, что, несмотря на объектно-ориентированный дизайн NT, как и большинство операционных систем, Windows почти полностью написана на языке C. Почему? C ++ требует затрат с точки зрения занимаемой памяти и накладных расходов на выполнение кода.

Windows / Написано на

Использует ли Microsoft C ++?

C ++ — это язык рабочей лошадки в Microsoft, который использует C ++ для создания многих своих основных приложений. … C ++ широко используется в индустрии программного обеспечения и остается одним из самых популярных языков, когда-либо созданных.

Какой язык кодирования использует Windows 10?

Windows 10

Версия операционной системы Windows NT
Снимок экрана Windows 10 версии 20H2, показывающий меню «Пуск» и Центр действий в светлой теме
разработчик Microsoft
Написано в С, С ++, С #
Статус поддержки

C ++ лучше Python?

Производительность C ++ и Python также заканчивается этим выводом: C ++ намного быстрее Python. В конце концов, Python — это интерпретируемый язык, и он не может совпадать с компилируемым языком, таким как C ++. Хорошая новость заключается в том, что вы можете получить лучшее из обоих миров, комбинируя код C ++ и Python.

C все еще используется в 2020 году?

Наконец, статистика GitHub показывает, что и C, и C ++ являются лучшими языками программирования для использования в 2020 году, поскольку они по-прежнему входят в первую десятку списка. Так что ответ — НЕТ. C ++ по-прежнему остается одним из самых популярных языков программирования.

Python написан на C или C ++?

Python написан на C (на самом деле реализация по умолчанию называется CPython). Python написан на английском языке. Но есть несколько реализаций: PyPy (написано на Python)

Написана ли Java на C?

Самый первый компилятор Java был разработан Sun Microsystems и был написан на C с использованием некоторых библиотек из C ++. Сегодня компилятор Java написан на Java, а JRE — на C.

Для чего используется Python?

Python — это язык программирования общего назначения, а это означает, что, в отличие от HTML, CSS и JavaScript, он может использоваться для других типов программирования и разработки программного обеспечения, помимо веб-разработки. Это, среди прочего, включает в себя внутреннюю разработку, разработку программного обеспечения, анализ данных и написание системных скриптов.

Используется ли Python в Microsoft?

Установка Python в Microsoft Store включает стандартный менеджер пакетов pip. Pip позволяет вам устанавливать и управлять дополнительными пакетами, которые не являются частью стандартной библиотеки Python. Чтобы подтвердить, что у вас также есть pip для установки пакетов и управления ими, введите pip –version.

Может ли Python заменить C ++?

В целом Python лучше, чем C ++, с точки зрения простоты и легкого синтаксиса. Но C ++ лучше с точки зрения производительности, скорости, обширных областей применения и т. Д. Q # 3) Может ли Python заменить C ++? Ответ: НЕТ.

Какие компании используют Python?

8 компаний-разработчиков программного обеспечения мирового уровня, использующих Python

  • Промышленный свет и магия.
  • Google.
  • Facebook.
  • Instagram.
  • Spotify.
  • Quora.
  • Netflix.
  • Dropbox.

Что мне следует изучать C или C ++?

Нет необходимости изучать C перед изучением C ++. Это разные языки. Распространено заблуждение, что C ++ каким-то образом зависит от C, а не является полностью определенным языком сам по себе. Тот факт, что C ++ имеет один и тот же синтаксис и много одинаковой семантики, не означает, что вам нужно сначала изучить C.

Linux написан на C или C ++?

Linux. Linux также написан в основном на C, с некоторыми частями сборки. Около 97 процентов из 500 самых мощных суперкомпьютеров в мире работают под управлением ядра Linux.

Почему C более популярен, чем C ++?

Самая большая практическая причина для предпочтения C заключается в том, что поддержка более распространена, чем C ++. Есть много платформ, особенно встроенных, на которых даже нет компиляторов C ++. Также существует вопрос совместимости для поставщиков.

We know that an operating system is considered the backbone of any system that you may use. The three most common and widely used operating systems share things in common just as well as they share differences. While there are cases where one might outperform another, those cases and such scenarios are very rare.

The most notable difference one can notice is how they store the files in their file structure, like in case of windows, it follows a directory structure to store the different kinds of files of the user, whereas the Mac OS file structure is known as MAC OS X and when it comes to Linux the file structure is entirely different from Windows and Mac as it stores the data in the form a tree.

Another major difference is the tech stack that these languages were built upon, and the programming languages that played a major key role in their development and deployment.

It should also be noted that a major part of any operating system is the kernel and the kernel is different for each of the operating systems, like we have a different kernel in Windows which is developed using a different programming language, as when compared to a kernel of Mac OS.

In order to take a look and understand what different languages these operating systems use and why they use those particular languages only, we need to visit the official comments of such operating system developers.

Linus Torvalds (Founder of Linux) has this to say about −

“It’s mostly in C, but most people wouldn’t call what I write C. It uses every conceivable feature of the 386 I could find, as it was also a project to teach me about the 386. As already mentioned, it uses an MMU, for both paging  (not to disk yet) and segmentation.”

When it comes to Linux, most of the things that are there in the OS are written in C programming language, and assembly language also plays an important role in the Linux architecture. Also, many userland apps that we see in Linux are developed using Python.

Now, we know what Linux is made of, it’s time to explore more about Mac OS X and understand what technologies it uses and why.

Mac mainly makes use of Objective C, as much of the Cocoa is implemented in Objective-C, which is nothing but a superset of the legendary programming language C. At the kernel level, the Mac is developed mostly using the C programming language, and the PnP subsystem is Embedded in C++.

In the case of windows, there is a bit of a mix of three programming languages that they used to develop their OS. The mixture of languages involved C, C++ and C# where the first two were used to develop the most of the legendary code, while C# has been used in fairly recent upgrades, like .NET which is shipped with Windows. A lot of .NET is in C#.

So in conclusion, we can summarize all the languages that these operating systems use in a simple table.

Operating System Programming Language Used
Mac OS X Object C, C
Windows C, C++, C#
Linux C, Objective-C

We know that an operating system is considered the backbone of any system that you may use. The three most common and widely used operating systems share things in common just as well as they share differences. While there are cases where one might outperform another, those cases and such scenarios are very rare.

The most notable difference one can notice is how they store the files in their file structure, like in case of windows, it follows a directory structure to store the different kinds of files of the user, whereas the Mac OS file structure is known as MAC OS X and when it comes to Linux the file structure is entirely different from Windows and Mac as it stores the data in the form a tree.

Another major difference is the tech stack that these languages were built upon, and the programming languages that played a major key role in their development and deployment.

It should also be noted that a major part of any operating system is the kernel and the kernel is different for each of the operating systems, like we have a different kernel in Windows which is developed using a different programming language, as when compared to a kernel of Mac OS.

In order to take a look and understand what different languages these operating systems use and why they use those particular languages only, we need to visit the official comments of such operating system developers.

Linus Torvalds (Founder of Linux) has this to say about −

“It’s mostly in C, but most people wouldn’t call what I write C. It uses every conceivable feature of the 386 I could find, as it was also a project to teach me about the 386. As already mentioned, it uses an MMU, for both paging  (not to disk yet) and segmentation.”

When it comes to Linux, most of the things that are there in the OS are written in C programming language, and assembly language also plays an important role in the Linux architecture. Also, many userland apps that we see in Linux are developed using Python.

Now, we know what Linux is made of, it’s time to explore more about Mac OS X and understand what technologies it uses and why.

Mac mainly makes use of Objective C, as much of the Cocoa is implemented in Objective-C, which is nothing but a superset of the legendary programming language C. At the kernel level, the Mac is developed mostly using the C programming language, and the PnP subsystem is Embedded in C++.

In the case of windows, there is a bit of a mix of three programming languages that they used to develop their OS. The mixture of languages involved C, C++ and C# where the first two were used to develop the most of the legendary code, while C# has been used in fairly recent upgrades, like .NET which is shipped with Windows. A lot of .NET is in C#.

So in conclusion, we can summarize all the languages that these operating systems use in a simple table.

Operating System Programming Language Used
Mac OS X Object C, C
Windows C, C++, C#
Linux C, Objective-C
  • Remove From My Forums
  • Общие обсуждения

  • Всем привет!

       К сожалению, я не нашел другой группы, кроме как этой, где можно задать такой вопрос.

       Пожалуйста, дайте ссылочку или приведите цитаты из официальных данных о том, на каких языках программирования написан код операционной системы Windows  —  хотя бы для Windows XP, Windows 2000/2003 Server.

       Интересует самая общая, но официальная информация (что-то типа официальной справки компании Microsoft), в процентном соотношении, что-то навроде:  Windows XP — 80% на C/C++,  20% на asm  — в общем-то и все.

       Просто утомил тут один любитель Visual Basic своими безаппеляционными заявлениями, что «Windows написан на VB» — ну утомил он «песнями про VB», ну просто достал… :))

       Спасибо!

03 Декабря 2019 14:06
03 Дек 2019 14:06

|

Microsoft в рамках экспериментального проекта Verona развивает новый язык программирования, основанный на Rust. Не исключено, что некоторые низкоуровневые компоненты Windows 10 впоследствии будут переписаны на нем, что позволит сделать систему значительно более устойчивой к киберугрозам.

Проект Verona

Корпорация Microsoft разрабатывает новый язык программирования, который ориентирован на создание приложений, не подверженных наиболее распространенным проблемам безопасности, пишет Zdnet.

Новый язык базируется на набирающем популярность Rust, развитием которого занимается компания Mozilla, разработчик известного браузера Firefox. Проект получил название Verona и, по данным издания, ключевое его отличие от Rust заключается в применении модели владения на основе групп объектов, а не единичных объектов. Ожидается, что исходные тексты текущих наработок в его рамках будут открыты под свободной лицензией Apache 2.0. Репозиторий проекта уже появился на принадлежащей Microsoft c 2018 г. платформе Github, но пока пуст.

Как отмечает Zdnet, Microsoft также может переписать некоторые низкоуровневые компоненты Windows 10 с использованием модифицированного Rust, чтобы исключить потенциальные проблемы, возникающие при применении языков C и C++.

Как смена языка поможет повысить безопасность

Языки C и C++ в течение десятилетий повсеместно используются в качестве инструмента разработки системного ПО и возлагают на программиста задачу управления оперативной памятью, что неизбежно приводит к возникновению ошибок, таких как обращение к участку памяти после его освобождения или, например, выход за границы буфера. По словам Мэтта Миллера (Matt Miller), специалиста Microsoft по безопасности, около 70% всех уязвимостей, обнаруженных в программных продуктах корпорации за последние 12 лет, связанны с ошибками управления памятью.

Около 70% всех уязвимостей, обнаруженных в программных продуктах Microsoft за последние 12 лет, связанны с ошибками управления памятью

В языке Rust (как, видимо, и в Verona), в отличие от C и C++, реализован механизм автоматического управления памятью на основе принципа «владения», который избавляет программиста от необходимости вручную манипулировать памятью, тем самым снижая вероятность возникновения ошибок. Стоит также отметить, что в угоду производительности в Rust не используется так называемый сборщик мусора (Garbage Collector, GC), в задачи которого входит автоматическое удаление из памяти объектов, которые более не востребованы программой.

Эксперименты Microsoft с Rust

Zdnet пишет, что Microsoft начала экспериментировать с Rust летом 2019 г. Сообщалось, что компания собирается переписать некоторые из своих продуктов с использованием этого языка программирования.

В начале ноября 2019 г. Адам Берч (Adam Burch), программист из команды разработчиков Hyper-V (системы аппаратной виртуализации для x64-систем на основе гипервизора), написал в корпоративном блоге о том, что ему поручили переписать на Rust некий низкоуровневый компонент Windows, назвать который он пока не может. По его словам, несмотря на незавершенность проекта, опыт применения Rust оказался в целом позитивным. Он также отметил, что кодовую базу новых компонентов и уже существующих, но с «чистыми интерфейсами», перевести на Rust не составит большого труда. Кроме того, Берч посетовал на отсутствие некоторых возможностей в языке по сравнению с привычным ему C, но выразил уверенность в том, что Microsoft сможет посодействовать их добавлению.

Несколько слов о Rust

Rust появился в 2006 г. как личный проекта Грейдона Хоара (Graydon Hoare), сотрудника Mozilla. В 2009 г. Mozilla начала спонсировать разработку Rust для собственных нужд, а также расширила команду для дальнейшего развития языка.

От отдельных инструментов до суперприложений: как развивался российский рынок коммуникационных сервисов

Цифровизация

Интерес Mozilla к Rust был вызван наличием огромного числа критических уязвимостей в разрабатываемом компанией браузером Firefox, в реализации которого присутствовало свыше 4 млн строк на языке C++. Rust был создан с учетом требований безопасности и параллелизма, что сделало его подходящим выбором для переписывания многих компонентов Firefox в рамках проекта Quantum по полной переработке архитектуры браузера. Кроме того, Mozilla использовала Rust для разработки Servo, движка рендеринга HTML, который должен был заменить действующий движок рендеринга Firefox.

Помимо Mozilla и Microsoft в своих проектах Rust применяют Google, Facebook, Amazon, Dropbox, Fastly, Baidu.

В августе 2019 г. в рамках саммита по технологиям с открытым исходным кодом (Open Source Technology Summit) Джош Триплетт (Josh Triplett), ведущий инженер Intel, рассказал о том, что его компания заинтересована в том, чтобы в ближайшем будущем Rust достиг «паритета» с доминирующим в области системной и низкоуровневой разработки языком C.

В том же месяце Грег Кроа-Хартман (Greg Kroah-Hartman), один из ключевых разработчиков ядра Linux, заявил, что не станет препятствовать включению в ядро фреймворка для написания драйверов на языке Rust.

  • Как выполнять указ президента №250 «О дополнительных мерах информационной безопасности»

Русские Блоги

Сколько строк в исходном коде Win 10? Какой язык программирования использовался?

(дайте Те вещи о программистах Помечено )

Оригинальная отделка: те штучки о программистах (id: iProgrammer)

В октябре 2013 года мы разместили на Weibo картинку (@ programmer’s things) инфограмма » Сравнение кодовых баз известных программных систем.

В инфографике упоминается, что объем кода для операционных систем Windows XP и Windows 7 составляет около 40 миллионов строк.

640?wx_fmt=png

( инфограмма Несколько скриншотов, полная версия здесь: http: //t.cn/EXMs07e )

Windows Объем исходного кода Vista составляет около 50 миллионов строк.

640?wx_fmt=png

Следовательно, объем исходного кода Windows 10 составляет не менее 50 миллионов строк.

Какой язык программирования использовался при разработке операционной системы Windows?

Windows операционная система Кому-то должно быть интересно, какой язык программирования используется для такой масштабной кодовой базы.

Это правда? Кто-то написал на Quora с вопросом: «Разработка W ind ows 10 Какой язык программирования используется? 》

В марте 2019 года инженер ядра Microsoft Аксель Ритчин ответил на этот пост на Quora.

640?wx_fmt=png

«Вот что о программистах»:

Axel Говорят, что Windows 10 и Windows 8.x, 7, Vista, XP, 2000 и NT имеют одинаковую кодовую базу. Каждое поколение операционных систем претерпело серьезный рефакторинг, добавив большое количество новых функций, улучшив производительность и поддержку оборудования. И безопасность при сохранении очень высокой обратной совместимости.

Ядро (ntoskrnl.exe) Большинство из них написано на языке Си . Вы можете найти просочившуюся версию Windows Research Kernel на Github.

640?wx_fmt=png

Детскую обувь, кому интересно, могут посмотреть: github.com/markjandrews/wrk-v1.2

Axel Сказал, что, хотя код WRK устарел и в основном неполный, он должен дать вам некоторое представление.

Например: каталог wrk-v1.2 / base / ntos / config — это исходный код известного реестра (Registry) .Этот компонент ядра является диспетчером конфигурации (CM).

Большинство программ, работающих в режиме ядра, также написаны на языке C. (Большинство файловых систем, сетей, большинство драйверов . ) и немного C ++.

Что касается языка программирования, на котором написано Window 10, Аксель считает, что это C и C ++, причем C составляет большинство.

.NET BCL И другие управляемые библиотеки и фреймворки обычно используют C # Написано, Из разных отделов ( Отдел разработчиков) И не принадлежит Windows Исходное дерево 。 По сравнению с океаном кода C, разбросанным по островам C ++, код, написанный на C #, — просто капля в море. 。

Windows действительно правда В самом деле В самом деле В самом деле Очень большой

Axel Я напоминаю всем, что большинство людей не осознают огромных размеров системы Windows, огромного проекта с эпическим масштабом.

Размер полного дерева исходного кода Windows (включая все коды, тестовые коды и т. Д.) Превышает 0,5 ТБ, что включает Более 56 миллионов папок, 400 Более десяти тысяч файлов 。

640?wx_fmt=png

Вы можете потратить год, копаясь в дереве исходных текстов и копаясь в этих файлах. Они включают в себя все компоненты рабочей станции и серверных продуктов ОС, а также все их версии, инструменты и соответствующие комплекты разработки.

Затем вы снова читаете имя файла, чтобы увидеть, что в нем и для чего они используются. Хочу закончить эти дела , Персона (Или два человека ) Боюсь закончить жизнь 。

один раз Axel Покинув ветку Git на несколько недель, он вернулся и обнаружил, что за ним почти 60 000 коммитов. Axel Я думаю, кто-то сказал бы, что никто не может читать весь код, добавленный в Windows каждый день, не говоря уже о том, чтобы читать код, написанный за последние 30 лет!

Рекомендуемая литература

(Щелкните заголовок, чтобы перейти к прочтению)

Обратите внимание на звезду «вещи программиста» и не пропустите кружок.

Короткие байты: Многие крупнейшие технологии работают на программном обеспечении, которое создано с использованием языков программирования. Иллюстрация показывает, сколько строк кода было написано для создания программного обеспечения и сервисов. Google возглавляет список с ошеломляющим 2 000 000 000 строк кода.

Приложения и сервисы, которые являются важной частью нашей цифровой жизни, написаны на разных языках программирования. Например, приложения для iOS написаны с использованием Swift, а для Android разработчики могут использовать Java или более простой Lua с использованием Corona. Microsoft Windows разработана с использованием C и C ++. Ядро Linux, которое является сердцем всех дистрибутивов Linux, написано на C. Интернет-сайты созданы с использованием JavaScript, HTML, CSS для внешнего интерфейса и Python, Go, C ++, ASP.NET и т. Д. Для внутреннего интерфейса.

Помимо многих функций, одна вещь, которая отличает эти языки, — это количество строк кода. Например, люди, которые используют Python, имеют преимущество ввода меньшего числа строк, чем те, которые используют Java или C.

Вот иллюстрация, которая показывает количество строк кода, использованных для создания некоторых из самых больших творений в истории технологии. Он включает в себя программное обеспечение, которое запускает первый в мире космический челнок, марсоход Curiosity НАСА, живущий в одиночестве на Марсе, ОС Android от Google и т. Д.

Идея этой иллюстрации возникла в нашем мозгу, когда мы натолкнулись на инфографику «Миллион строк кода», разработанную компанией Information Is Beautiful. Наша гистограмма — это уменьшенная версия более крупной картинки, изображенной на миллионах строк кода.

Сравнивая строки кода для двух наиболее часто используемых веб-сайтов в Интернете, Google (включая все интернет-сервисы Google) явно выделяется своими 2 миллиардами строк, оставляя позади Facebook с 61 000 000 строк кода. Хотя Facebook является всего лишь социальной сетью по сравнению с Google, чьи продукты охватывают множество услуг.

Интересный факт: Первоначальному космическому шаттлу требовалось в 5000 раз меньше строк кода, чем Google.

Данные были собраны Information Is Beautiful. Вы можете увидеть оригинальную инфографику здесь.

Система STEPS: двадцать тысяч строк кода, которые изменят программирование, операционные системы и интернет

У программистов есть заветная мечта: взять и переделать заново всё — операционную систему, языки программирования, библиотеки и приложения. Упразднить ненужное дублирование функций и написать всё красиво и по-новому — словом, сделать всё как надо, а не как получилось в результате многих лет нагромождения разных стилей и технологий. При этом все обычно понимают, что мечтам никогда не сбыться и что никому не под силу заново проделать такой объём работы. Над смельчаками принято посмеиваться, а их попытки — обзывать переизобретением колеса. Но когда за работу берётся человек, который уже однажды изобрёл немалую часть технологий, которые мы ассоциируем с персональными компьютерами, все шутки становятся неуместными.

Алан Кей — живая легенда компьютерной индустрии. В середине шестидесятых он работал с Айвеном Сазерлендом, создавшим первый графический редактор и систему автоматизированного проектирования, а в 1970 году присоединился к исследовательской лаборатории Xerox PARC, где придумал объектно-ориентированное программирование, создав язык Smalltalk, и первый компьютер с оконным графическим интерфейсом. Позднее его работа вдохновит Стива Джобса и команду, сделавшую Macintosh, а прототип Macintosh убедит Билла Гейтса в том, что MS-DOS срочно нуждается в графической оболочке с оконным интерфейсом, известной нам как Windows.

После PARC Кей работал в самых разных исследовательских центрах: Atari, Apple, Disney и HP, а также в Калифорнийском университете в Лос-Анджелесе и Киотском университете. Видимым результатом его исследований стали Squeak — более современная и дружественная версия Smalltalk, а также Etoys — вариант Squeak для детей (на его основе был создан более известный сегодня Scratch). В 2005 году Кей основал исследовательский институт Viewpoints, финансируемый Национальным научным фондом США, а также рядом крупных компаний: Intel, Motorola, HP и Nokia. То, чем Кей и десяток сотрудников Viewpoints заняты сейчас, может ещё перевернуть наш взгляд на программирование.

Двадцати тысяч строк хватит на всё

Изначальное предложение Кея, представленное Национальному научному фонду США, звучало не просто смело, а почти фантастически. Кей пообещал создать среду (мы не будем называть её операционной системой, так как Кей настаивает на том, что это не ОС в привычном понимании), которая позволит функционировать современному компьютеру и будет включать в себя графический пользовательский интерфейс и набор прикладных программ. Главное отличие этой среды от всех уже существующих решений: длина кода этой системы не будет превышать двадцати тысяч строк.

Сказать, что двадцать тысяч строк — это немного, значит не сказать ничего. Если верить «Википедии», то исходные коды Windows NT 3.1 занимали 4-5 миллионов строк кода, ядро Linux 2.6.0 − 5,2 миллиона, а современные ОС с набором стандартных приложений могут содержать сотни миллионов строк кода.

Объём сопоставим с Эмпайр стейт билдинг и равен примерно 17,5 тысячам книг. «Кто из вас прочёл семнадцать тысяч книг? — вопрошает Кей собравшихся на лекции. — А кто из вас прочёл хотя бы одну?» Объёма одной книги, то есть примерно двадцати тысяч строк, по его мнению достаточно для того, чтобы создать систему, напоминающую по функциям те ОС и приложения, с которыми мы сейчас работаем. Просто строить нужно умело.

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

Сейчас программист при всём желании не способен свободно ориентироваться в миллионах строк кода. Зато если уместить всю систему в объём книги и разделить на логические части по 100-1000 строк, это даст возможность легко понимать логику её строения и вносить изменения. Проблемы вроде багов, которые на протяжении многих лет преследуют крупные проекты, просто уйдут в прошлое.

You may say I’m a dreamer

Главный вопрос: возможно ли такое в принципе? За пять лет работы команда Кея доказала, что ответ на этот вопрос может быть положительным. Систему методов, которые позволят это сделать, авторы называют STEPS. Это рекурсивный акроним, расшифровывающийся как STEPS Toward Expressive Programming Systems — «Шаги к выразительным системам программирования».

Руководствуясь принципами STEPS, в институте Кея создали прототип системы. Он называется Frank, а если полностью — «Франкенштейн». Такое имя выбрано не зря: система составлена из кусочков, каждый из которых ещё может быть заменён или переписан заново.

Что может делать пользователь Frank? Всё то же, что мы обычно делаем за компьютером: создаём и редактируем текстовые документы, графику, видео, презентации и электронные таблицы, а также обмениваемся ими через сеть. Вся разница в том, что исследователи попытались полностью избавились от дублирования функций разными программами и максимально сократить исходный код.

Frank — это не операционная система, в которой работают приложения, а скорее, подобие Smalltalk или Squeak — большое приложение, которое можно расширять и дополнять, пока оно не станет делать всё, что нам нужно. Вместо приложений, в которых реализованы собственный интерфейс и функции, здесь присутствуют компоненты, имеющие сложные взаимосвязи.

Во Frank есть единое понятие «документ», в который могут быть включены и на месте изменены любые объекты, будь то изображения, таблицы или созданные пользователем скрипты. Презентация, например, — это документ, включающий в себя сценарий перехода вперёд и назад по страницам (или, если угодно, кадрам), а не файл, для открытия которого требуется специальная программа. Такая программа просто не нужна, потому что интерфейс для работы с изображениями и текстом идентичен тому, что используется для подготовки других документов.

То же и с электронной почтой: письмом во Frank считается любой документ, который был передан по Сети. Список писем — это результат поиска документов, полученных от других пользователей.

Ещё одно ценное качество системы Кея — универсальная отмена. Здесь может быть отменено действительно любое действие, а не как в сегодняшних программах — лишь некоторые, да и то не всегда. Для этого используется механизм «миров»: каждый раз, когда мы что-то меняем, система может запомнить, чем нынешний «мир» отличается от предыдущего, и в случае надобности вернуть всё, как было.

Интереснее всего то, как Кей предлагает переделать веб. Во Frank нет браузера, зато есть поддержка протокола TCP/IP (его код занимает 160 строк, и это, по словам Кея, не предел краткости). Вместо веб-страниц предлагается использовать те же самые документы, добавив в них объект нового типа — гиперссылку.

Поскольку код, содержащийся в документах, по сути, работает в виртуальной машине, это делает их загрузку извне не менее безопасной, чем исполнение JavaScript браузером. Получается, что объекты-страницы просто подгружаются через Сеть по мере необходимости. Кстати, делать такие «сайты» намного проще, чем обычные: можно пользоваться уже имеющимися в системе средствами — теми же самыми, при помощи которых редактируются текстовые документы, презентации и всё остальное.

Сила мысли и никакого мошенничества

Внешняя сторона Frank интересна уже хотя бы в качестве примера унифицированной среды, в которой нет ни разделения на приложения, ни традиционной файловой системы. Но настоящая чёрная программисткая магия скрыта внутри.

Сколько занимают разные части STEPS?

TCP/IP 160 строк
Алгоритм сглаживания на Nile 45 строк
Весь код Gezira на Nile 457 строк
Парсер Nile на OMeta 130 строк
Транслятор Nile AST в Си на OMeta 1110 строк

Как Frank уместился в двадцать тысяч строк кода? Ответ кроется за двумя терминами: метапрограммирование и предметно-ориентированные языки (DSL). Главная идея заключается в том, чтобы создавать языки под конкретные задачи и, хитроумно комбинируя их, писать элегантные и короткие программы. Эта идея не нова: на ней основан язык Forth, и она используется в написании программ на языке Lisp, которым Кей в своё время вдохновлялся при создании Smalltalk. Более современный пример — фреймворк Ruby on Rails, применяемый в качестве DSL для разработки бэкэндов веб-приложений. Но STEPS — это нечто куда большее, чем один язык, — это набор методов и языков, при помощи которых можно создавать сложные системы, используя минимум кода.

Один из самых интересных компонентов STEPS — это объектно-ориентированный язык OMeta (pdf). Он предназначен для описания синтаксиса других языков. К примеру, на OMeta можно в несколько строк описать синтаксис калькулятора, а потом при помощи наследования расширить его и сделать научный калькулятор. Синтаксис OMeta при этом описан на самом OMeta.

Второй важный язык — это Nile (названный в честь реки Нил). Авторы STEPS называют его «языком исполняемой математики». Nile позволяет компактно описывать математические выражения и сделан таким образом, чтобы максимально облегчить параллельные вычисления. На нём написана графическая подсистема Frank, называемая Gezira. Gezira умещается в несколько сотен строк на Nile и умеет выводить растровую и векторную графику, поддерживает сглаживание и различные фильтры.

Самый низкий уровень во всей этой сложной системе — язык Nothing (переводится с английского как «Ничто»), «высокоуровневый язык с низкоуровневой семантикой». Nothing — это промежуточное звено между всеми языками в STEPS и машинными кодами. На Nothing не предполагается писать вручную, и нужен он лишь для возможности смотреть, что получается на выходе. Nothing, по словам исследователей, вдохновлён BCPL, использовавшимся в шестидесятые годы и вдохновившим авторов Си. На данный момент код на Nothing можно транслировать в Си для дальнейшего перевода в машинные коды или в JavaScript — чтобы система исполнялась в браузере. Предполагается, что в будущем из Nothing можно будет получать машинные коды напрямую.

В качестве промежуточного слоя, на котором написан пользовательский интерфейс, одно время использовался NotSqueak — упрощённый диалект Squeak. Но в последнем отчёте упоминаний о NotSqueak уже нет, зато появился новый объектно-ориентированный язык — Maru. Как и OMeta, он написан сам на себе и может использоваться как для описания высокоуровневого представления, так и для связи с низкоуровневыми функциями. На Maru может быть реализован парсер грамматики, и в 2011 году команда Кея была занята переносом Nile на Maru.

Бесконечный эксперимент

К сожалению, отчёты Кея и его команды (pdf) — это не пособие для программистов-суперменов и не справочник. Оно и понятно — STEPS пока что не готов, и каждый год во Viewpoints ставят разнообразные эксперименты, цель которых — не столько в создании законченной системы, сколько в том, чтобы отточить методы. «Франкенштейн» как цельная система здесь нужен лишь в качестве подопытного тела.

Если посмотреть отчёты Viewpoints за разные годы, то заметно, что здесь снова и снова изобретают языки программирования, делают их всё более самодостаточными (пока что кое-где ещё остаётся код на Си, но от него постепенно избавляются) и ставят смелые эксперименты.

Время от времени команда Кея пробует пробрасывать мостики в реальный мир, создавая, к примеру, виртуальную машину Squeak для Google Native Client или делая метаязык Tamacola на основе Tamarin VM, входящей во Flash. Эти методы могут позволить всей системе не просто работать в браузере, но исполняться быстрее, чем при трансляции в JavaScript.

Скорость, впрочем, не является целью Кея: по его оценке, в нынешнем виде Frank работает примерно на 30 процентов медленнее, чем если бы был написан традиционными методами. Оптимизацией исследователи занимаются лишь тогда, когда это не вредит компактности кода.

Понятно, что Frank не станет конкурентом современных ОС и вряд ли вообще будет доделан до необходимого для этого уровня. Тем не менее те методы, которые разрабатывает Алан Кей, могут повлиять на подход к программированию не меньше, чем в своё время повлиял Smalltalk.

Вообще, самый удобный язык для системного программирования — это C. Плюс к этому существуют довольно сильные opmimizing compilers, компиляторы с очень продуманной оптимизацией. В C есть ряд удобных вещей — таких как union, например. В паскале / delphi строгая типизация, которую можно обойти, конечно, довольно легко с использованием указателей, к примеру, но все это будет сложнее и менее удобно реализовываться. Есть примеры -и ОС на паскале-подобных языках, вроде ОС на FreePascal (StreamOS, DelphineOS).

А DOS’ы на C писались, тот же MSDOS, тот же замечательный FreeDOS. Компактные ядра, загрузчики на ASM, остальное на C.

Все это не значит, что Delphi, FPC и VPC — плохие паскале-подобные языки, здесь вопрос в самих компиляторах и принципе строгой типизации. Немного переработать тот же FreePascal и спокойно можно будет функциональные OC писать.

Хотя уже, к примеру, тот же FPC написан на FreePascal и уже давно компилирует сам себя, перспективы развития есть. Что очень важно, он реализует целый ряд диалектов языка, что значит, есть возможности и для расширения.

Есть множество ОС на чистом ассмеблере, тот же MenuetOS / Kolibri, просто уникальная и ультракомпактная мини ОС.

Раньше наши отечественные ОС, варианты ДОС, писались на ASM, причиной чему были жесткие ограничения по ОЗУ, дисковому пространству и быстродействию.

#статьи

  • 8 дек 2021

  • 0

Системный программист рассказывает, почему операционную систему нельзя написать на Python или Java, но можно на Rust.

Кадр: сериал «Мистер Робот»

Марина Демидова

Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.


об авторе

Системный программист с двадцатилетним стажем, сооснователь и технический директор Oxide Computer Company. С 1996 по 2006 год разрабатывал ядро ОС Solaris в Sun Microsystems, а с 2010 по 2019 год — SmartOS в компании Joyent.

В докладе на конференции QCon Брайан Кантрилл объясняет, почему многим системным программистам нравится Rust и почему на этом языке будут писать современные операционные системы.

В статье мы пересказали основные идеи доклада.


Если я спрошу, не пора ли переписать все операционные системы на Rust, по закону заголовков Беттериджа вы можете сказать «нет». Но я приведу много доводов, почему стоит ответить «да». Ещё я расскажу, зачем ставлю в названии статьи вопросительный, а не восклицательный знак.

На первый взгляд это простой вопрос, но начнём с определения программного обеспечения. Считается ли им, например, алгоритм Евклида? Нет, потому что он появился раньше компьютеров.

То же и с операционной системой. ОС — это то, что работает поверх железа. Но не только физического, ведь её можно запустить в облаке на виртуальном оборудовании. Получается, что и здесь всё сложно.

Если говорить проще, операционная система — программа, которая позволяет запускать на железе стороннее ПО. Если ОС перестаёт работать, все остальные процессы завершаются вместе с ней.

У операционной системы есть ядро — часть с полным доступом к ресурсам процессора, памяти и другого оборудования. Но кроме ядра в ОС ещё есть библиотеки, команды и демоны.

Подобия ОС писали на ассемблере уже после Второй мировой. Но полноценная операционная система появилась в 1961 году — это была MCP, написанная на языке ESPOL. Её создали для компьютера Burroughs B5000, который опередил своё время, но был коммерчески бесполезен.

В 1964 году в MIT попытались развить идею и начали разрабатывать CTSS — мультизадачную операционную систему, которая умела распределять аппаратные ресурсы между разными программами и пользователями. Её назвали Multics.

Создатели Multics хотели сделать всё правильно, но случилось то, что я называю синдромом второй системы. Они решили переписать с нуля почти все компоненты, поэтому проект получился огромный, а сроки сдачи переносились всё дальше.

ОС писали на языке PL/I, а его компилятор отдали разрабатывать аутсорсинговой компании, но у той ничего не вышло. Чтобы спасти положение, команда учёных создала язык EPL и продолжила работу на нём.

В 1969 году Bell Labs, одна из участниц программы, посчитала проект бесперспективным и вышла из него. А сотрудник Bell Labs Кен Томпсон сделал на его базе UNIX — операционную систему для мини-компьютера PDP-7.

Некоторые думают, что UNIX написали на С, но это не так — её полностью разработали на ассемблере. В отличие от авторов Multics, у разработчиков UNIX не было синдрома второй системы. Её создатели сначала делали работающий компонент, а потом писали к нему документацию.

В том же 1969 году в Bell Labs создали язык B. На нём написали некоторые утилиты UNIX, причём и тут не обошлось без ассемблера.

Но разработчиков UNIX не устраивала производительность языка B. Да, они считали, что операционную систему можно сделать на языке высокого уровня, но B для этого не годился — в нём не хватало байтовой адресации.

Тогда придумали язык С. В первой версии в нём не было структур — они появились только к 1973 году (понадобились для ядра UNIX). По той же причине добавили и битовые поля.

Язык дорабатывали постепенно — как раз в этом и его сила, и его слабость. Меня бесит, что в нём нет логического XOR — один из создателей языка объяснял это тем, что XOR не подходит для вычислений по короткой схеме.

Но С всё равно развивался. В нём появились макросы — а это одна из вещей, которые мне очень нравятся и в Rust. То же и с препроцессорами — многие не любят их использовать, но они важны для DTrace, ZFS и других систем.

В 1980-е годы С доминировал. На нём были написаны почти все операционные системы. Но в 1990-е стало популярным объектно-ориентированное программирование, и ОС на C объявили устаревшими. Считали, что скоро их заменят ОС на Java и C++. Но эти попытки провалились, и одна из причин — синдром второй системы.

Я помню 1990-е годы, когда гендиректором Apple был Джил Амелио. Компания громко рекламировала Mac OS Copland, но никак не могла её выпустить. Остальные же компании из Кремниевой долины ждали, пока Apple разорится, чтобы по дешёвке выкупить её имущество.

Так выглядел поиск файлов в Mac OS Copland. Источник: Apple Wiki

А Sun Microsystems разрабатывала операционную систему Spring — на C++. Ещё в студенчестве мне в руки попал CD-диск со Spring: я попробовал её установить, но компьютер не запустился. Оказалось, что у меня только 32 МБ оперативной памяти, а система требовала минимум 128 МБ. В наше время это всё равно что 2 ТБ RAM.

Не получилось сделать и ОС на Java. В этом языке нет беззнакового типа данных, без которого системе трудно взаимодействовать с железом.

Когда появился Linux, написание систем на языке C стало мейнстримом. Много кто пробовал создать ядро ОС на C++, но из этих попыток ничего не вышло. Хотя есть исключения — та же Haiku. С одной оговоркой — всё-таки это был любительский проект, ничего серьёзного.

В то же время, в начале 2000-х, главными языками были Java и C++. А потом заметными стали Ruby, Python и JavaScript. Но все они фокусируются на увеличении скорости разработки. Никто в здравом уме не пробовал создать ОС на Ruby или Python.

JavaScript сначала был не слишком популярным. Но им стали активно пользоваться в 2006 году, когда все поняли, что в браузерах появился полноценный язык, на котором можно создавать веб-приложения. Для меня JavaScript — это замаскированный Lisp в браузере, но без многочисленных скобок.

К 2010-м годам системные программисты хотели получить язык, который был бы таким же производительным, как C, но в то же время обладал бы преимуществами других языков — например, методом split () и регулярными выражениями.

Из этого вышло много интересного. Например, появились мощные среды выполнения JavaScript, в частности движок V8, который можно было запускать на сервере. Потом появился Node.js. Мне очень нравится JS, но в мире системного программного обеспечения с ним было бы чересчур много проблем.

Некоторые сотрудники Bell Labs перешли в Google и разработали там язык Go. Он лишён многих недостатков JavaScript, но у него есть некоторые особенности.

В своём выступлении разработчик из Google Адин Сканнелл рассказал, что на Go можно создать ядро операционной системы, но у Go и JavaScript есть общая проблема — сборщики мусора. Они только замедляют системные программы, а потому не подходят для создания операционных систем.

Я написал на C++ сто тысяч строк кода и больше никогда не хочу к нему возвращаться. Меня всё сильнее и сильнее интересует Rust, потому что мне нравятся его ценности — это быстрый и безопасный язык для системного ПО.

Одна из самых интересных особенностей Rust — понятие владения. Язык статически определяет, кому что принадлежит. Компилятор выделяет вам память, а затем освобождает её, когда вы закончите с ней работать. А если он не знает, кому принадлежит память, то он её одалживает. Это называется заимствованием. Такой процесс исключает утечку ресурсов и обеспечивает безопасность — одна программа не может перезаписать память другой. И это действительно важно.

В Rust есть и другие функции, которые мне нравятся:

Алгебраические типы. Позволяют превосходно обрабатывать ошибки, работают примерно как объединение в C.

Гигиенические макросы. У меня их не было в C, и я буквально не знал, как пишется слово «гигиенический». Но такой макрос, который можно получить в выводе абстрактного синтаксического дерева вместе с другим программным кодом, — это удивительно.

Продуманные внешние функции. Интерфейс внешней функции в Rust очень хорошо продуман — вы можете взять код C и вставить его в программу на Rust или наоборот.

Ключевое слово unsafe. Его используют, чтобы выключить безопасный доступ к памяти и выполнять операции, которые компилятор иначе бы не разрешил.

Я думаю, что на Rust можно смело писать операционные системы. Подобный язык мы ждали последние 30 лет.

Первая попытка, о которой я знаю, — система Weenix. Её создал студент Захари Эспириту для своей дипломной работы. Он подробно описывает проблемы, с которыми столкнулся в процессе.

С 2015 года небольшие операционные системы на Rust появлялись одна за другой: вышли Redox, Tock, IntermezzOS, BlogOS, QuiltOS, Rux и другие. IntermezzOS и BlogOS — учебные проекты, а Tock создана для интернета вещей.

К сожалению, у этих ОС нет бинарной совместимости с Linux, а значит, на них не запускается большая часть линуксовых программ. Поэтому я думаю, что гибридные подходы — самый правильный способ написать ОС на Rust:

Подход В чём его смысл
Добавлять в ядра на С новые компоненты на Rust Мне нравится, что С и Rust умеют взаимодействовать друг с другом. Можно сохранить ядро, написанное на C или ассемблере, а на Rust разрабатывать драйверы, файловые системы и прошивки
Писать на Rust компоненты операционной системы В ОС входит не только ядро, но и утилиты, демоны, диспетчер служб, диспетчер устройств, управление сбоями и отладчики. Их можно с успехом переписать на Rust
Переписать прошивку с DOS на Rust Много критически важного системного ПО работает под управлением DOS. Большинство проблем этой прошивки можно решить, если переписать её на Rust. Тот, кто это сделает, окажет человечеству огромную услугу

Я очень оптимистично отношусь к Rust. Думаю, мы можем использовать его в операционных системах: в прошивке, в расширениях для ядра, при создании компонентов ОС, хотя на практике наверняка будет много трудностей.

Rust совместим с системами на C, и в этом его красота. Такой язык открывает новые возможности.

* Решением суда запрещена «деятельность компании Meta Platforms Inc. по реализации продуктов — социальных сетей Facebook* и Instagram* на территории Российской Федерации по основаниям осуществления экстремистской деятельности».


Учись бесплатно:
вебинары по программированию, маркетингу и дизайну.

Участвовать

Школа дронов для всех
Учим программировать беспилотники и управлять ими.

Узнать больше

Понравилась статья? Поделить с друзьями:
  • Какой язык вы хотите использовать для второй раскладки клавиатуры windows 10
  • Какую почтовую программу выбрать для windows 10
  • Какой формат флешки нужен для установки windows 10 через биос
  • Какой эмулятор андроида для пк windows 7 лучше для игр
  • Какую последовательность действий надо выполнить для запуска калькулятора windows