Содержание статьи
Введение
Многие уже наслышаны о супер мега проекте от Microsoft - новой операционной системе Singularity. Microsoft решила с нуля попробовать написать ОСь используя "безопасное программирование", которое на корню будет пресекать баги различного рода. Для этого решили использовать "безопасные" языки программирования C#, Sing#, ну и кое-где си и ассемблер. Так вот, совсем недавно были открыты исходники первых наработок этой операционной системы и в этой статье я расскажу как можно скомпилировать эти самые исходники и запустить всё это дело на виртуальной машине.
Прежде чем присутпить к работе скажу несколько слов об Singularity. Главной особенностью операционки является модель SIP (Software-Isolated Process). Каждый процесс изолирован друг от друга, но сообщения между ними могут передаваться посредством двунаправленных, строго типизированных высокоуровневых каналов. Подробнее можно прочитать вот тут.
Что нужно?
Как утверждает сама Microsoft, необходима машина с 1,5 гектарами свободного места для исходников и будущих бинирников, плюс 512 Мб ОЗУ. Теперь что касается ПО. Сами исходники Singularity качаем вот отсюда. Забираем последний билд, на момент написания стати это 6709. Интересной особенностью является то, что есть возможность отладки ядра операционной системы, поэтому будет не лишне проинсталлировать комплект утилит для этого дела, всё это добро забираем отсюда. Т.к. ОСь завязана на
Framework'e, то и его необходимо будет поставить, если конечно же он у вас уже не стоит. Работать всё будет на виртуальной машине, поэтому ставим ещё систему виртуализации Microsoft Virtual PC 2007. Тем, кто уже сталкивался с виртуальными ОС, наверняка знаком такой продукт как VMware - это тоже самое, только от Microsoft. Если ещё будет желание попробовать написать первые программы или вири и тем самым прославиться, то ещё нужно поставить Microsoft Visual Studio 2005 или
Microsoft Visual Studio 2008. На этом всё, больше нам ничего не понадобится.
Компилируем
Итак, самое интересное. Распаковываем скачанные исходники и запускаем командный файл configure.cmd.
После этого на рабочем столе появится ярлычёк Singularity RDK 1.1. Это наша шел среда для конфигурирования и собственно компилирования всех составляющих новой операционной системы. Запускаем шел через ярлык или, если вы ярый ненавистник ярлыков на рабочем столе, то идём в папку base и запускаем setenv.cmd.
Помимо него в папке base существуют следующие подпапки:
- Applications - тут примеры исходничов под Singularity. Много интересного, различные примеры работы с сетью и прочее.
- Boot - Исходники загрузчика преимущественно на си плюх плюх и асме.\
- Build - Тут куча компиляторов, библиотек, тулз.
- Contracts - тут какие-то определения класов.
- Distro - Файлы проектов. Сюда упадут бинарники для запуска после компиляции операционки.
- Drivers - Исходники драйверов. Интересно то, что дрова написаны исключительно на C# и Sing#.
- Interfaces - Определения интерфейсов.
- Kernel - Эх, само ядро с CLR компонентами, а в папке Native с неуправляемым кодом.
- Libraries - Исходники библиотек.
- Options - Файлы конфигурации.
- Services - Исходники служб.
- Windows - Исходники утилит для старта на Windows.
Идём дальше - заходим в папку Distro. Тут нам предоставляется выбор какой билд мы хотим получить. В зависимости от взятого проекта мы получим соответствующие билды. Для выбора нам предоставляются: Tiny, Small, BVT, SPECweb99 или World. Разница между ними следующая:
- Проект Tiny предусматривает сборку только ядра, менеджера тома и самой командной строки - самый лёгенький проект;
- Проект Small - всё что включает в себя Tiny, плюс сетевой стек;
- Проект BVT - сделаю предположение, что это адбевиатера от build verification test т.е. приёмочное тестирование. Это одно из стадий тестирования программного обеспечения, которое призвано бегло пробежаться по продукту и дать оценку, готово ли оно для тестирования вообще. Если посмотреть во внутрь проекта, то можно увидеть, что здесь уже намного больше объявлено компонентов для сборки. Компоненты распределены по группам: Apps, Benchmarks, Tests, Drivers и Services. Изходя из списка уже можно представить, что попадёт в сборку;
- Проект SPECweb99 - SPECweb99 - это набор тестов для www серверов для оценки на сколько хорошо система будет показывать себя как сервер в сети. Как ни странно, в этом проекте добавлен компонент SpecWeb99 specific ну и добавилось парочка драйверов;
- Проект World - здесь всё просто, в сборку попадает всё, что написали.
Выбираем понравившийся нам проект и даём следующую команду нашему шелу (без скобочек) "msb Distro\имя_проекта.proj".
Пример:
msb Distro\World.proj
Ждём несколько минут пока сбилдится проект. Tiny.proj собирается за пару минут, а вот сборка проекта World.proj может занять около часа. По окончании выполняемой операции должна появится надпись "Build Succeeded.", говорящая о том, что всё прошло успешно и путь к лог файлику, просмотрев который можно увидеть все произведённые операции. А результатом операции стало появление в корне новой папки - base.obj.
Теперь по поводу необычной команды msb. Это просто командный файлик, который лежит в папке Build. Он запускает утилиту msbuild.exe, которая исталируется вместе со вторым Framework'ом, msbuild.exe - это компилятор для командной строки по типу make в unix системах. Подробнее о msbuild пожно почитать вот тут. В процессе сборки порадовала надпись "Found 2 processors.", говорящая о том, что уже эта достаточно сырая версия умеет работать с многопроцессорными системами.
Идём дальше, теперь удалим все ненужные сборочные файлы командой msb /t:Clean Distro\имя_проекта.proj.
Пример:
msb /t:Clean Distro\World.proj
Они могут достаточно много места занимать на диске (до гектара), так что лучше их убить.
Запускаем.
Singularity поддерживает несколько видов загруки - Network и с накопителей CD-Rom, FAT Hard Disk и USB. Для того, что бы можно было использовать Network загрузку, необходимо добавить новое сетевое соединение. Делается это следующим образом:
- Заходим в панель управления и жмем Add Hardware -> Next.
- В появившемся окне выбираем Yes, I have already connected the hardware -> Next.
- Далее в самом низу вибираем Add a new hardware device -> Next.
- Install the hardware that I manually select from a list (Advanced) -> Next.
- Из списка выбираем Network adapters -> Next.
- В качестве сетевого адаптера выбираем Microsoft Loopback Adapter -> Next -> Next ->Finish.
Теперь необходимо сконфигурировать наш новый сетевой адаптер.
- Вызываем свойство (Properties) "Сетевого окружения" (Network Connections), видим там Наш Microsoft Loopback Adapter. Переименовываем его в Loopback.
- Теперь заходим в свойства (Properties) сетевого адапетра Loopback.
- На вкладке General в самом низу выбираем Internet Protocol (TCP/IP), делее заходим во свойства (Properties).
- Выбираем "Использовать следующий IP адрес" (Use the following IP address) и вводим 10.99.99.1 для IP адреса и 255.255.255.0 для маски подсети (Subnet mask). Первичные и вторичные ДНС сервера оставляем пустыми. Нажимаем кнопку ок.
- Переходим на вкладку Advanced, в разделе Windows Firewall нажимаем кнопку Settings... и переходим на вкладку Exceptions.
- Нажимаем кнопку Add Port… , и добавляем 2 параметра с именем DHCP, номер UDP порта 67 и так же добавляем TFTP c UDP портом 69. Эти протоколы будут использоваться для загрузки Singularity.
Далее заходим в папку boot и копируем в корневую папку файл pxe.vmc с новым именем. Это файл виртуальной машины Microsoft Virtual PC 2007 в которой будет определён способ загрузки ОС. Или же просто выполняем следующую команду - copy boot\pxe.vmc singularity.vmc. Далее, выполняем команду - boottest.cmd mypc.vmc. Будет запущен ISO образ из папки base.obj\Distros, который был сгенерирован до этого. Для запуска в дебаг режиме выполняем команду - dbg.cmd /pipe & boottest.cmd mypc.vmc.
Можно попробовать запустить сетевую загрузку.
Делается это с помощью ключика /net. Используем следующим образом - boottest.cmd /net mypc.vmc. Такая загрузка будет происходить на порядок дольше по сравнению с загрузкой с ISO образа. После окончания загрузки ядра мы может увидеть командную строку. Да да, никаких окошечек 🙂 Иксов пока ещё не написали. Набираем help и видим список доступных команд.
Интересна команда bvt, которая тестирует множество компонентов.
Тестирование будет проходить достаточно долго, так что запасаемся терпением и бегло читаем лог. Вот в принципе и всё.
Удачной работы.
P.S.: Технологическая сингулярность в футурологии — гипотетический взрывоподобный рост скорости научно-технического прогресса, предположительно следующий из создания искусственного интеллекта и самовоспроизводящихся машин, интеграции человека с вычислительными машинами либо значительного увеличения возможностей человеческого мозга за счёт биотехнологий. По некоторым прогнозам, технологическая сингулярность может наступить уже около 2030 года. Сторонники теории технологической сингулярности считают, что если возникнет принципиально отличный от человеческого разум (постчеловек), дальнейшую судьбу цивилизации невозможно предсказать, опираясь на человеческое (социальное) поведение.