В лабораториях подразделения Microsoft Research, где рождаются самые смелые и инновационные идеи, в период с 2008 по 2015 годы велась работа над экспериментальной операционной системой Midori. Этот амбициозный и малоизвестный проект ставил под сомнение устоявшиеся принципы построения ОС.
На этой неделе в сеть утекла внутренняя презентация проекта Midori, раскрывающая некоторые подробности о целях и преимуществах новой операционной системы. Мы посмотрели опубликованный ролик и готовы рассказать вам о ключевых особенностях Midori. А при желании вы можете сами изучить презентацию, посмотрев видео ниже.
Основные сведения
Итак, Midori представляет собой безопасную операционную систему, ориентированную на параллельные вычисления и сохраняющую совместимость с приложениями для Windows. Система могла работать как в виртуальной среде (Hyper-V), так и на «голом железе». Была заявлена поддержка нескольких архитектур, включая x86, x64 и ARM.
В основу Midori легло микроядро, написанное на языке C++, которое отвечает за базовые функции, такие как управление памятью, ресурсами и ввод/вывод. Вся остальная часть системы, включая драйверы устройств, реализована на языке программирования Midori C#. Этот язык является расширенной версией C# с фокусом на безопасность и параллелизм.
Ключевые особенности:
- Безопасность. Язык и компилятор Midori C# обеспечивают типобезопасность, безопасность памяти и параллелизм, устраняя целые классы ошибок, которые часто встречаются в C++ коде. Например, переполнение буфера, висячие указатели и «состояния гонки» становятся практически невозможными.
- Параллелизм. Midori предлагает разнообразные модели параллелизма, включая параллелизм процессов, задач и данных. Все они построены на единой архитектуре планирования и управления ресурсами, обеспечивающей эффективное использование многоядерных процессоров. Разработчики могут выбрать наиболее подходящую модель для своей задачи, чтобы получить максимальную производительность.
- Отзывчивость. Midori использует кооперативное планирование, при котором процессы добровольно освобождают ресурсы. Это обеспечивает высокую отзывчивость и предсказуемое поведение приложений. Пользователи могут быть уверены, что система останется отзывчивой, даже при выполнении ресурсоемких задач.
- Упрощение разработки драйверов устройств. Драйверы устройств в Midori — это обычные процессы, написанные на Midori C#, что обеспечивает их безопасность и изоляцию. Это упрощает разработку драйверов, повышает стабильность системы и снижает риск возникновения критических ошибок из-за некорректной работы драйверов.
В презентации упоминается, что драйвер SATA для Midori на 60% меньше по размеру кода, чем аналогичный драйвер для Windows, при этом его функциональность не изменилась.
- Сетевой стек. Midori поддерживает TCP, HTTP, UDP, HTTPS и TLS. При этом используется zero-copy подход, позволяющий избежать лишнего копирования данных в памяти. Это значительно повышает производительность сетевых операций, что особенно важно для серверных приложений и облачных сервисов.
Концепция доменов
Для обеспечения безопасности и изоляции Midori использует концепцию доменов. Домен представляет собой изолированное адресное пространство, в котором выполняются процессы. Это обеспечивает дополнительный уровень безопасности и изоляции, защищая систему от сбоев. Даже если один процесс вышел из строя, другие процессы и сама система продолжат работать стабильно.
Для запуска небезопасных приложений, например, написанных на C++, используются отдельные домены с аппаратной изоляцией. Например, для запуска Excel в Midori используется технология Drawbridge, которая позволяет изолировать небезопасный код Excel от остальной части системы.
Модель безопасности
Модель безопасности Midori построена на принципе возможностей (capabilities), а не на традиционных списках контроля доступа (ACL). Это ключевое отличие, которое обеспечивает более гранулярный контроль доступа и повышает общую безопасность системы.
Возможности — это специальные неподделываемые объекты, которые предоставляют доступ к определенным ресурсам или действиям в системе. Они могут быть переданы между процессами, но не могут быть подделаны или изменены. Каждый процесс имеет ограниченный набор возможностей, которые определяют, что он может делать.
-
Изоляция процессов. Каждый процесс выполняется в своем изолированном адресном пространстве и имеет доступ только к тем ресурсам, на которые у него есть возможности.
-
Типобезопасность. Язык Midori C# обеспечивает типобезопасность, что предотвращает некорректный доступ к памяти и другим ресурсам.
-
Проверка возможностей. При каждом попытке доступа к ресурсу система проверяет, имеет ли процесс соответствующую возможность.
-
Передача возможностей. Процессы могут передавать возможности друг другу, но только в том случае, если у них есть на это право.
Модель ошибок
Midori использует контракты для обеспечения корректности кода на этапе компиляции. Контракты позволяют задавать предусловия и постусловия для методов, что помогает выявлять ошибки на ранних этапах разработки. Это упрощает отладку и повышает надежность кода.
- Статическая проверка. Компилятор Midori C# проверяет контракты на этапе компиляции и выдает ошибки, если они нарушены.
- Динамическая проверка. В режиме отладки контракты также проверяются во время выполнения кода. Если контракт нарушен, генерируется исключение.
- Обработка исключений. Midori предоставляет механизмы для обработки исключений, что позволяет программам корректно реагировать на ошибки.
Функциональное реактивное программирование (FRP)
Midori использует функциональное реактивное программирование (FRP) для построения пользовательского интерфейса, что обеспечивает более декларативный и предсказуемый подход к разработке UI. FRP упрощает создание сложных интерфейсов и повышает их отзывчивость.
Интеграция jаvascript из IE10
В Midori интегрирован движок jаvascript из IE10, что позволяет запускать современные веб-приложения. Это обеспечивает совместимость с веб-стандартами и открывает возможности для разработки гибридных приложений.
Также команда Midori создала собственную версию WinJS, адаптированную для своей операционной системы. WinJS — это набор jаvascript-компонентов и API, разработанных Microsoft для создания приложений в стиле Modern UI (также известен как Metro UI), характерном для Windows 8.
WinJS основан на веб-стандартах, таких как HTML5, CSS и jаvascript, что обеспечивает переносимость приложений и упрощает их разработку.
Впечатляющие показатели
Midori продемонстрировала значительное улучшение производительности по сравнению с Windows в различных тестах. Например, в реальных задачах, таких как распознавание речи, Midori обеспечила 40% улучшение задержки и 3-4-кратное увеличение плотности в дата-центре, обрабатывая 20% трафика Windows Phone.
Планы команды
На презентации было озвучено, что команда Midori планировала продолжить работу над улучшением платформы, расширением поддержки устройств и привлечением новых партнеров. Также разработчики хотели уделить больше внимания клиентским нагрузкам и развитию экосистемы приложений для Midori.
Закрытие проекта
К сожалению, в 2015 году Microsoft отказалась от дальнейшей разработки операционной системы Midori, но пообещала использовать наработки в своих будущих проектах.