Операционка-Кооперационка
Cooperative Linux, или просто coLinux - это ядро Линукса, работающее совместно (кооперативно) с другой ОС на одной машине. Это позволяет запускать Линукс поверх Windows 2000/XP - не через ЭВМ (эмулятор или виртуальную машину), а как родное Windows-приложение. Достоинства этого метода очевидны: отсутствие необходимости в дорогих программных ЭВМ наподобие VMWare, гораздо меньший расход системных ресурсов, но главное - он работает уже сейчас. На сегодняшний день протестирован KNOPPIX (японская версия).
А началось всё с того, что в конце 2000 года студент-первокурсник Дэн Алони впервые обратился к Linux-разработке.
Имея некоторый опыт Windows-программирования, новоявленный OpenSurce-энтузиаст попытался портировать User Mode Linux на Cygwin. Руководителем этого проекта, названного UMLWin32, в настоящее время является Чандан Кудиге. Первоначальный автор, поднабравшись опыта в системном Linux-программировании и осознав свои возросшие возможности, решил реализовать виртуализацию Линукса на другом уровне. В ноябре 2003 года Дэн Алони начал работу над Кооперативным Линуксом, который базируется на тех же идеях, но написан с чистого листа, без использования исходников UML. В команду входят ещё два человека - Юн Окаджима (программист, администратор, владелец собственной фирмы) и Куниясу Сузаки (младший научный сотрудник - надеюсь, я правильно перевёл его должность - одного из японских
ИТ-институтов).
Разумеется, coLinux - это не единственный способ запустить одну ОС поверх другой без дополнительных ЭВМ. Могу вспомнить PC/GEOS, Win1.x/2.x и Minix, которые работают в DOS-сессии Windows и OS/2. Не знаю, умеют ли это другие DOS-оболочки, такие как DesqView и DesqView/X. Minix, разумеется, вовсе не нуждается в ДОСе для поддержания своей жизнедеятельности, но Minix/i8086, в отличие от Minix/386, работает в реальном режиме процессора, а потому имеет такую "экспериментальную" способность. Кстати, пользуясь случаем, хочу порекомендовать PC/GEOS 4.х - очень качественную многозадачную графическую надстройку над ДОСом, не хуже Win95, но с минимальными требованиями как у Win3.0. К сожалению, она коммерческая, но есть бесплатная демо-версия Breadbox Ensemble Lite. Впрочем, об этом как-нибудь в другой раз. Не так уж важно, являются ли DesqView и PC/GEOS (и, если уж на то пошло, Win3.x/4.x) всего лишь расширителями возможностей DOS, или же полноценными операционными системами. Да и что такое "полноценная ОС"? Честно говоря, не знаю, хоть и очень люблю употреблять это словосочетание. Эти слова-паразиты - просто дурная привычка, появившаяся у меня очень давно, ещё в 95-98 годах...
Принцип действия Кооперативного Линукса не имеет ничего общего ни с виртуальными машинами, ни с эмуляторами Linux-API наподобие Cygwin и U/WIN. Специальный драйвер выполняет coLinux-kernel в привилегированном режиме (на нулевом кольце процессора). Постоянно переключая машину между Host-OS (в данном случае NT5.x) и ядром линукса, coLinux захватывает полный контроль над MMU (Memory Management Unit - Блок Управления Памятью) в отведенном ему адресном пространстве.
Итоговая производительность и функциональность сравнимы с обычным Линуксом, единолично установленным на тот же самый компьютер. Пингвин-Кооператор использует тот же формат исполнимых файлов, что и обычный Линукс, так что теоретически он должен работать с любым линукс-дистрибутивом без каких-либо модификаций.
coLinux не обращается напрямую к устройствам компьютера, вместо этого он абстрагируется от них с помощью специальных драйверов. Все аппаратные прерывания транслируются ими в обычные системные вызовы Хост-ОС, не нарушая её нормальной работы. Таким образом, coLinux контролирует операции ввода-вывода в эмулируемом Линуксе, а Windows их выполняет. Это означает не только надёжность, но и гибкость. Например, файл на Windows-разделе может служить в качестве блочного Linux-устройства (обычно это жёсткий диск).
В отличие от UML, coLinux выполняет все Линукс-процессы как один процесс хост-системы, самостоятельно распределяя их ресурсы и обрабатывая ошибки. Это делает его абсолютно независимым от конкретной реализации Хост-ОС, потому что ему необходим лишь небольшой набор обычных примитивов, присутствующих в любом ядре. Поэтому coLinux может быть легко портирован на другую ОС, например Solaris или тот же самый Linux. Пока что обещают поддержку только ReactOS (открытый Windows-клон). Я спросил у главы проекта, каковы их планы насчёт не-Win платформ, таких как OS/2. Он заверил меня, что "как только Windows-версия станет достаточно стабильной и зрелой, а может быть даже раньше..." Несмотря на то, что такой ответ можно расценить как очень расплывчатый, я полон нетерпения, надежды и предвкушения.
Прямоугольное постоянство
В одной из предыдущих статей (ЮнОпСиР
0x09, рассказ об ОС Эрос) я упомянул термин Orthogonal Persistence, но не объяснил его смысл. Это очень интересная концепция, достойная отдельного обсуждения. Давать сжатое определение не имело особого смысла - объяснить и коротко, и понятно вряд ли получилось бы. Не мог же я сказать, что ортогональная персистенция - это нечто вроде объектно-ориентированности, но более высокого порядка. С таким же успехом можно было бы назвать UNIX многозадачным DOS'ом. Даже перевести этот термин на русский язык - непростая задача. Persistence - это "постоянство" на английском. Слово "ортогональность" - латинского
происхождения (orthogonois - прямоугольный), в математике это нечто вроде перпендикулярности, но в более широком смысле. Перпендикулярными могут быть прямые и плоскости, а ортогональными - векторы, матрицы, функции. Получается что-то совсем невразумительное: перпендикулярное/прямоугольное постоянство. В
конце концов остановились на варианте "ортогональная персистенция/персистентность". Так же непонятно, зато выговорить труднее. Компьютерщики, как и математики, очень уж любят
трудно выговариваемые... выреваемые... вымяваре... тьфу!
Ортогональность в данном случае означает независимость частей системы (модулей операционной системы, конструкций языка программирования, объектов в базе данных) с точки зрения внешнего наблюдателя. Другими словами, пользователь не обязан знать все свойства и характеристики системы - ему достаточно освоить только те части, возможности которых необходимы для решения его задач. Персистентность - это такая особенность объекта, которую условно можно назвать "вечной жизнью". Персистентные данные существуют, пока мы их сами не сотрём. Персистентные программы продолжают работать, работать и работать, даже когда жёсткий диск
осыпется, память перегреется, а процессор треснет пополам. Если бомжи снимут все кабели и сдадут в металлолом, персистентная компьютерная сеть будет передавать данные телепатически. Ну и так далее.
Итак, ортогональная персистенция (ОП) - это такое свойство системы, которое подразумевает, что все её части обособлены друг от друга и существуют вечно. Но это просто сумма двух определений, полное значение этого термина гораздо шире. В ОП-системе персистентно всё, в том числе сама ортогональность и ортогонально всё, в том числе сама персистентность.
Иначе говоря: объекты ОП-системы не просто независимы, а все, всегда и полностью независимы. Механизмы, обеспечивающие постоянство существования ОП-системы, выглядят единообразно и функционируют скрытно от пользователя, потому что тоже ортогональны.
Наибольшего развития парадигма ОП достигла в системах управления базами данных (СУБД). Важно не только собрать данные, но и сохранить их, обеспечив целостность, удобный доступ и так далее. Технологии складирования и учёта данных прошли большой и сложный путь: недостатки и ограничения СУБД предыдущих поколений порождали новые модели баз данных. Каждый раз структура данных и методы работы с ними становились всё более обобщёнными, абстрактными, оторванными от специфики самих данных. Почему я рассказываю обо всём этом? ОП - это новая идеология, в сочетании с ООП (объектно-ориентированным программированием) способная перевернуть все современные представления об операционных системах. Вполне возможно, что в будущем границы между ОС, СУБД и языками программирования будут полностью стёрты. Данные, программы, а также средства и методы работы с теми и другими сольются в единую ОООП (объектно-ориентированную ортогонально-персистентную) систему.
To Be Continued...