Shared Source CLI – открытая версия .Net от Microsoft


Источник: "Технология Клиент-Сервер"

Версия текста: 1.0.1

В конце марта на сайте Microsoft появился архив под длинным названием Shared Source Common Language Infrastructure (CLI) Implementation Beta (кодовое название Rotor). В его описании (что не характерно для сайта Microsoft) часто мелькает название FreeBSD, а также навевающий ассоциации со свободно распространяемым ПО термин Shared Source. Этот архив – ни что иное, как усеченный вариант .Net CLR, который был изменен Microsoft в целях переносимости. Что же все это значит?

Shared Source – это новый подход Microsoft к распространению программного обеспечения. Очевидно, что эта программа появилась под натиском все усиливающихся сообществ разработчиков ПО с открытым кодом. В рамках Shared Source Microsoft позволяет скачать и использовать исходные коды некоторых своих разработок. К сожалению, документ The Microsoft Shared Source Philosophy, который должен объяснить суть программы, никаких конкретных слов не содержит. Он просто говорит, что Open Source – это плохо, а Shared Source – хорошо.

Но политика распространения кода – это одно, а сам код – другое. Код доступен кому угодно в виде 11-мегабайтного tgz-файла. Сейчас CLI работает под Windows XP и FreeBSD, но в будущем возможно появление версий и для других платформ. Главное достоинство CLI – он содержит большую часть исходных кодов библиотек .Net. В интернете уже появились сообщения, что CLI можно собрать под W2k и другими ОС Microsoft. Впрочем, было бы странно, если бы код, предназначеный для портирования на другие платформы, нельзя было перенести на родные платформы.

Shared Source Common Language Infrastructure (CLI) Implementation – это исходный код работающей реализации стандартов ECMA-334 (C#) и ECMA-335, описывающего инфраструктуру Common Language Infrastructure, аналогичную CLR, используемой в .NET Framework (www.ecma.org).

Архив CLI в форме исходного кода содержит:

Сам Microsoft заявляет, что Rotor не является переносом .Net на другую платформу, и что в реализациях CLI и CLR существуют значительные различия. Ключевым словом здесь является «различия». Кроме того, пока что CLI существует только в бета-версии. Сроки выхода следующих бета-версий и окончательной версии не называются. Несмотря на заверения разработчиков в стабильности работы кода, на данном этапе применение его в реальных проектах сомнительно. Но это и не важно. Главное, при затруднениях в .Net-разработке можно посмотреть, как что устроено и обойти подводные камни.

Чтобы перенести Windows-приложение на другую платформу, нужно перенести Win32 API, чтобы перенести COM – нужно перенести Win32 API и COM API, ну, а чтобы перенести .Net – нужно перенести Win32 API, COM API и .Net. Нам трудно судить, получилась ли эта шутка смешной, но MS, хотя и частично, воплотила ее в жизнь. Для переносимости был создан PAL (Platform Adaptation Layer), набор динамически подключаемых библиотек, реализующий основные функции Win32 и COM API (242 функции), используемые в CLI. PAL аналогичен Apache Portable Runtime (APR). Теоретически, перенос Rotor на другую ОС должен сводиться исключительно к переносу PAL. PAL позволяет реализовать:

Первая версия Rotor компилируется под Windows XP и FreeBSD 4.5. Кроме огромного количества памяти, для ее работы потребуется Perl. FreeBSD, как правило, содержит Perl, а под Windows дело обстоит хуже. Большинству желающих придется скачать Perl с сайта ActiveState. Пользователям Windows понадобится и Visual Studio .NET (или другой компилятор C/C++, а так же время на адаптацию кода под него), так как наличия .NET Framework SDK недостаточно для Rotor.

В развернутом виде Rotor занимает около 70 МБ. Однако после компиляции это добро займет полгигабайта под Windows, и около гигабайта – под FreeBSD. 24 МБ из них – это исходные коды библиотек, входящих в .Net, написанных на С#. Остальное – это в основном исходники на С++ и make-файлы. Это позволяет сказать, что основная часть .Net написана на С++.

Подробные инструкции по установке и начальным шагам использования Rotor можно найти в статьях Dave Stutz и Brian Jepson на www.oreillynet.com.

Практическая ценность CLI, то есть применимость в реальных приложениях, пока не очень понятна. Однако в Shared Source CLI много интересного для разработчика. Например, разработчики, которым интересно, что у .Net внутри, могут посмотреть на реализации сборки мусора, JIT-компиляции, протоколов безопасности, организацию среды и систем виртуальных объектов.

Но, если рассматривать CLI с точки зрения противостояния .Net-Java, это очень сильный ход Microsoft. Он если и не выбьет из рук оппонентов доводы о «непереносимости» и закрытости продуктов Microsoft, то значительно ослабит их.

MS заявляет, что Shared Source CLI может представить значительный интерес для академических и образовательных учреждений, так как на его основе легко организовать учебный курс по современным компиляторам или JIT-оптимизации. Но это лукавство. Дело в том, что многие университеты уже выбрали Яву для своих учебных программ. Главным их доводом было отсутствие исходного кода в .Net, не позволяющее студентам и преподавателям углубиться в изучаемую проблему на только ими определяемую глубину.

Еще одна категория разработчиков, которой может пригодиться CLI – энтузиасты переноса .Net на другие платформы. Лично я знаю только одного такого, но догадываюсь, что их может быть несколько. Для них CLI – это подарок судьбы, руководство к действию и эталонная реализация в одном флаконе.


Впервые статья была опубликована в журнале <Технология Клиент-Сервер>.
Эту и множество других статей по программированию, разработке БД, многоуровневым технологиям (COM, CORBA, .Net, J2EE) и CASE-средствам вы можете найти на сайте www.optim.su и на страницах журнала.