Журнал LinuxFormat - перейти на главную

LXF89:Спецрепортаж

Материал из Linuxformat
Перейти к: навигация, поиск

Содержание

MONO уже с нами

Самая крутая вещь в Windows ныне стала самой крутой и в Linux. И пользователь, и разработчик, и администратор что-нибудь да найдет в Mono. Рассказывает Пол Хадсон.


Вначале был .NET – кросс-платформенная система для разработки высокоскоростных программ, и было это хорошо. На беду, он был проприетарным ПО от Microsoft, так что Святой Столлмен считал его дурным, и в мире свободного ПО его избегали. Затем Бог прислал спасителя в форме Mono: тот, кто программирует на Mono, не привязан к одной платформе, но имеет неизменную производительность и неизменный почет среди пользователей открытых программ.

Будь вы пользователем настольной системы или программистом, Mono призван изменить работу с вашим компьютером. Он уже применяется в четырех самых интересных приложениях Linux, и еще больше их на подходе. Если вы разработчик, вы обнаружите, что Mono проводит вас от прототипа до законченного продукта гораздо быстрее, чем более устоявшиеся языки программирования, вроде C, C++, Java или Python.

Но что есть Mono, и почему люди так влюблены в него? Читайте дальше – узнаете...

И это все о .NET

Если вы не слышали раньше имени Мигеля де Икасы [Miguel de Icaza], самое время с ним познакомиться. Это супер-хакер из Мексики, прославившийся как основатель проекта Gnome, создатель Gnumeric, со-основатель фирмы, со временем ставшей Ximian и выпустившей Evolution. Он также основал проект Mono: движение по переносу Microsoft .NET в мир свободного ПО.

Конечно, это подводит к вопросу: а что же такое .NET? По-простому, это система программирования, позволяющая создавать программы очень быстро и легко. Например, она включает библиотеки для работы с XML, графическими пользовательскими интерфейсами, безопасностью и с другими стандартными задачами. Более того, она автоматически управляет выделением памяти, так что разработчикам не нужно следить за каждым используемым байтом, как в былые времена.

Но важнее всего в .NET ее кросс-платформенность: вы можете взять исполняемую .NET-программу и запустить ее на Windows, как хотелось Microsoft, или использовать Mono, чтобы заставить ее работать на Linux, BSD, Mac OS X и многих других платформах. Вы также можете запускать программу на 32- или 64-разрядном оборудовании, и она будет динамически оптимизирована для максимально быстрой работы на данных машинах. Как пользователю Linux, вам следует уже понять, почему Mono пробуждает интерес такого количества людей: она исключает многие, столь распространенные проблемы зависимостей. Вам не нужно беспокоиться об установке libfoo.so.1.2.3.4-5, не нужно волноваться, будет ли программа работать на вашем Athlon64, и даже не нужно ничего компилировать самому – просто скачайте уже кем-то скомпилированную версию, и она заработает на вашей машине.

На сегодняшний день Microsoft выпустила четыре версии .NET, под номерами 1.0, 1.1, 2.0 и 3.0. Каждая из них имеет обратную и прямую совместимость с другими, означающую, что программа, написанная для .NET 1.0, будет работать и на .NET 2.0, а если не использовать код, специфический для .NET 2.0 – программа, написанная для .NET 2.0, будет работать на .NET 1.1. На практике, это отличный подарок пользователям: если у вас последняя версия Mono, вы можете запускать почти все без оглядки на номера версий.

Сейчас Mono полностью поддерживает .NET 1.0 и 1.1 и многое из 2.0. Сюда включена поддержка для Windows Forms 1.1, графического инструментария .NET. Это значит, что вы можете взять сотни Windows-программ, даже не подозревающих о существовании Mono, и запустить их в Linux. Если вы думаете, что это выглядит как Wine, вы почти правы. Но Mono добавляет гарантированную совместимость, родную поддержку для многих других архитектур (Wine поддерживает только 32-разрядные процессоры семейства x86) и увеличенную скорость благодаря оптимизации именно на вашем оборудовании.

Mono в вашем дистрибутиве

Поскольку Mono основан на технологии Microsoft, при его представлении сообществу многие вслух опасались, что судебный иск к Mono – это лишь вопрос времени. Действительно, Microsoft в 2003 г. получила патент США 20030028685, фактически охватывающий весь каркас .NET Framework.

Но к тому времени разработка Mono была уже в процессе (сначала в Ximian, а затем в Novell, которая купила эту фирму в августе), и в 2003-м Mono уже был способен запускать Eclipse, используя специальный слой совместимости с Java, известный как IKVM. Позиция команды Mono по этим патентам всегда была простой: пока можно обходить патент, сохраняя совместимость, так и следует поступать. Если этого сделать нельзя, код помечается как «не реализовано», и начинается поиск prior art (кода, который был опубликован раньше запатентованного), лишающего этот патент законной силы.

«Из всех приложений, работающих на Linux, Mono доставляет меньше всего проблем – нам просто довелось принять на себя львиную долю критики, – говорит де Икаса. – Проекты типа Mozilla и OpenOffice.org годами копировали инфраструктуры (в форме XPCOM в Mozilla или UNO в OpenOffice.org), но там никогда не вставал этот вопрос».

Немалая часть .NET стандартизирована ISO – она и формирует основу Mono. Даже сейчас, когда Novell и Microsoft пришли к особому пониманию по использованию патентов (см. Новости в LXF86), разработчики Mono по-прежнему придерживаются своего плана избегать использования запатентованных технологий.

Поскольку Mono – проект от Novell, SUSE был первым крупным дистрибутивом, поставляемым с поддержкой Mono прямо «из коробки», но с тех пор Fedora Core и Ubuntu тоже включили ее в свой состав. Хотя .NET первоначально создавался для использования только в Windows, Mono расширил ее поддержкой десятков популярных в Linux библиотек и программ, включая GStreamer, Avahi, Evolution, GTK и Cairo.

По существу, в Mono взяли проверенную временем стратегию Microsoft «Заимствуй и расширяй», и для разнообразия приложили ее в наших интересах. Так что .NET больше не ориентирована только на запуск Windows-приложений на других платформах – Mono дает программистам возможность писать оригинальные приложения для Linux, при этом сполна используя преимущества .NET.

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


Настольная одиссея

Первые плоды Mono все хорошеют. Попробуйте их прямо сейчас!

Beagle

Мгновенный поиск файлов – задача непростая, но выгода для пользователей огромная...

Что, если бы ваш компьютер определял, над чем вы работаете, и динамически показывал бы вам всю информацию, связанную с текущим заданием? Эта мечта легла в основу проекта Dashboard Ната Фридмана, и чтобы ее достичь, разработчикам нужно было создать систему, умеющую читать файлы в самых различных форматах и преобразовывать их в базу данных, допускающую поиск. Так и появился Beagle: он принимает запрос на поиск, а затем ищет все файлы, ему соответствующие. Документы, сообщения электронной почты, рисунки, журналы чатов, история web-браузера, новости RSS и прочее – Beagle все может прочитать, а значит, вы можете увидеть результаты из всех этих источников за один проход. Это произошло в 2004 г., и с тех пор Beagle стал одним из популярнейших проектов Mono.

Но дорога от Beagle 2004 года к сегодняшнему не была гладкой. «Я думаю, мы просто не представляли всех трудностей, когда начали разработку Beagle», говорит Джо Шоу [Joe Shaw], ведущий разработчик Beagle. «Поиск в настольной системе – невероятно сложная проблема, куда сложнее web-поиска, и труднее всего держаться на уровне новшеств по мере их появления, при этом не влияя на привычную работу пользователей с настольными системами».

Сейчас Beagle – уже не Gnome-ориентированный проект, каким был раньше: он читает файлы OpenOffice.org, журналы Kopete IRC, адресные книги Thunderbird, фильмы QuickTime, RPM-файлы, исходные тексты Python и многое, многое другое. И команда постоянно работает над расширением поддержки других типов файлов: это одна из областей, где Beagle кладет на обе лопатки Spotlight от Apple, во многом решающий ту же задачу. Как говорит Шоу, «Например, новая программа mind mapping под названием Labyrinth, появилась несколько месяцев назад, и спустя неделю после ее первого релиза Beagle уже распаковывал и индексировал ее файлы. В том-то и сила Open Source».

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

F-Spot

Фотоальбомы – это хорошо. Мы спросили, что привносит в них Mono.

В последние годы любительская фотография снова активизировалась, благодаря появлению цифровых камер. Сегодня даже мобильные телефоны комплектуются камерами приличного качества, а значит, возникает серьезная потребность в организации, редактировании и печати фотографий, наряду со способностью нарезать их на CD-диски или выгружать в Интернет. Именно эту потребность и стремится удовлетворить F-Spot, уже являющийся de facto инструментом управления фотоальбомами в Linux.

Ларри Юинг [Larry Ewing], больше известный как создатель Тукса и участник проекта Gimp, отвечает за F-Spot, и он не колеблясь поддерживает платформу Mono. «Mono предлагает простые способы приблизиться к оборудованию, так что значительная часть кода обработки изображений, требовательная к производительности, сосредоточена в библиотеках C, а логика приложений сохраняется полностью управляемой. Если бы мне пришлось начать ту же задачу с нуля, я снова выбрал бы Mono.»

F-Spot – одно из немногих Linux-приложений, предлагающих «родную» поддержку фотографам, получающим свои фотографии в RAW-формате. Это необработанный несжатый вывод с матрицы камеры, обеспечивающий наибольшую детализацию. F-Spot уже читает RAW-формат всех популярных моделей камер, и Юинг предсказывает, что к середине следующего года он будет расширен, так что фотографы смогут еще и редактировать свои RAW-изображения. Редактирование образов в других форматах (большинство камер используют JPEG или TIFF), уже реализовано – можно вращать изображения, менять их размер, обрезать, корректировать цвета и четкость; многие функции (включая мягкий фокус и коррекцию перспективы) уже запланированы в следующий основной релиз.

Разовьется ли F-Spot в долгосрочной перспективе в приложение, подобное iPhoto? Юинг принимает это близко к сердцу: «Долгосрочная цель – сделать больше и сделать лучше. Когда это будет, и будет ли, зависит от того, насколько большое сообщество сможет работать над F-Spot и как хорошо я работал до сих пор... Не люблю говорить о планировании номеров версий, так что вместо этого скажу, что FSpot в SUSE Linux Enterprise Desktop 11 будет знаменовать собой конец большого цикла разработки.»

Banshee

Медиа-плейер «все в одном», открывший Linux для MP3.

Одни программы извлекают аудио-данные с CD, другие – воспроизводят MP3, а третьи – подключаются к iPod. Но Banshee уникальна тем, что выполняет все три эти вещи. По словам Аарона Боковера [Aaron Bockover], ведущего разработчика Banshee в Novell, Banshee преуспевает, потому что «здесь есть ряд основных функций, которых просто нет у других медиа-плейеров. Например, полностью интегрированные копирование и прожиг CD – мы не зависим ни от какой внешней программы выполнения этой работы, что здорово улучшает пользовательские характеристики продукта».

Успех Banshee обеспечили два главных компонента: возможность написания сторонних расширений и превосходная поддержка iPod и других цифровых аудио-плейеров. Возможность писать расширения для ПО – вещь не новая, но Banshee специально разработан под либеральной лицензией MIT/X11, чтобы Novell могла встроить в SUSE Linux Enterprise Desktop 10 поддержку проприетарного кодека (т.е. MP3). «Раньше этого не мог сделать ни один поставщик из-за проблем с патентами и лицензиями», говорит Боковер. «Другие медиа-плейеры нельзя собирать с поддержкой закрытых кодеков, их лицензии чересчур ограничивающие».

Поддержка различных MP3-плейеров также реализуется через расширения Banshee, но на этот раз основное преимущество – необычайная простота присоединения к разработке членов сообщества. В конечном счете продукт, который волнует большинство – это iPod, а значит, Banshee должна идти в ногу с огромным множеством различных моделей iPod. Такая прагматичная позиция доводить дело до конца означает, что Banshee уже популярен среди владельцев iPod, а это основная масса обладателей MP3-плейеров, как хорошо известно Боковеру. «Хотя это закрытый и проприетарный продукт, он владеет где-то около 80% рынка цифровых аудио-плейеров».

Через несколько месяцев появится новая трековая модель и виджет просмотра, спроектированный для повышения производительности и сокращения потребления памяти. Повышение производительности всегда приветствуется, но Боковер говорит, что оно еще и «открывает дверь действительно отличным украшениям и новым функциям, например, группировке альбомов». Что ж, поглядим...

Также на подходе...

Mono доказывает, что он – удивительный хит в индустрии игр, где по меньшей мере три крупных проекта пользуются открытой природой Mono.

Первая и, вероятно, наиболее известная – притягивающая аватары Second Life, находящаяся в процессе переноса своего скриптового движка на Mono. Ее создатели уже обнаружили, что созданные пользователями скрипты выполняются в 50–150 раз быстрее, чем на старом Linden Script Language (LSL), а также ухитряются потреблять вдвое меньше памяти. Для упрощения трансляции они написали собственный LSL-компилятор для Mono, позволяющий сохранить существующие скрипты, а Mono открывает возможность к использованию всех языков, доступных для .NET, например, C#.

Наряду с Second Life, есть также проект Tao, портировавший OpenGL, SDL и другие игровые библиотеки на .NET; и движок Unity 3D – это закрытый инструментарий разработки игр, использующий Mono для работы на Windows, Linux и Mac OS X.

Еще три приложения подают голос на рабочем столе: Tomboy, Blam и iFolder. Мы уже рассказывали о Tomboy, но он продолжает хорошеть: наша любимая новая функция – способность перетаскивать электронные письма из Evolution в ваши Tomboy-заметки, создавая специальную ссылку, по которой можно щелкнуть, чтобы открыть письмо в будущем. Blam – набирающий популярность RSS-клиент, недавно сменивший своего ответственного: новый разработчик, Карлос Мартин [Carlos Martin], уже работает над Blam 2.0 и собирается добавить поддержку web-сервисов, а также поддержку тэгов и фильтрацию новостей. Наконец, мы уже рассматривали iFolder в LXF80, но работа продолжается и здесь – в следующую версию, iFolder 3.6, планируется включить поддержку шифрования на лету, а также репликацию «masterslave» для обеспечения крупномасштабной синхронизации.


Счастье хакера

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

За любой хорошей программой стоит столь же хорошая команда разработчиков, и фактически, большинство проектов зарождаются потому, что разработчик нуждается в программе для решения определенной задачи, но не может найти существующее решение. Вы уже видели, как Mono используется для построения крутых приложений, но почему их разработчики выбрали в первую очередь Mono?

Основные преимущества Mono следующие:

  • Его основной язык – C#, новый язык, изобретенный Microsoft. Он во многом основывается на Java и C++, но не включает в себя некоторые сложнейшие части C++, например, макросы и множественное наследование.
  • Программы можно запускать в «управляемом» (managed) режиме, то есть Mono следит, помимо прочего, за выделением памяти. Это спасает программистов от необходимости выискивать утечки памяти: обо всем позаботится Mono.
  • Мощная интегрированная среда разработки, называемая MonoDevelop, способна создавать графический интерфейс простым перетаскиванием виджетов.
  • Тесная интеграция библиотек Linux, включая GTK# для создания «родных» пользовательских интерфейсов для Gnome.

Все это значит, что программисты могут тратить меньше времени на выполнение черной работы и больше времени посвящать решению реальных проблем.

C# против C и Python

Большая часть рабочего стола Gnome написана на C, но уже несколько лет идут разговоры о том, можно ли использовать более новый язык высокого уровня – то есть один из тех, на которых чуть проще программировать и которые снижают время разработки. Сейчас, когда GTK# является официальной привязкой Gnome, программы, написанные на C#, можно поставлять как модули в Gnome. Это изменение имеет место в Gnome 2.16, с Tomboy – первым приложением, получившим официальное благословение.

Mono завоевывает множество поклонников. Джо Шоу из Beagle много экспериментировал как с C, так и с Python, и обнаружил, что C# превосходит любой из них. «За годы жизни я написал кучу кода и C, и на Python, и ни один из них не годится для больших приложений. C# занимает прекрасную нишу между ними: он воистину объектно-ориентированный, четко типизирован, имеет проверку типов на этапе компиляции и способен работать в виртуальной машине с рефлексией и сборкой мусора», говорит он. «В языке C слишком много времени уходит на шаблонный код. Вы все время этим занимаетесь, и все время кажется, что есть способы и получше. Python – другая крайность. Он очень удобен для приложений-прототипов, и особенности этого функционального языка нельзя превзойти, но отсутствие статических типов и строгих интерфейсов очень усложняют создание повторно используемых компонентов с заданными свойствами. Большие программы на Python довольно быстро теряют сопровождаемость».

Шоу не единственный, кто так думает – Аарон Боковер считает C# выбором «без раздумий»: «Фактически здесь нет проблем совместимости, о которых нужно было бы беспокоиться. Никаких проблем с архитектурой, платформами, дистрибутивами, да и просто сборка исходных текстов на C# является намного более простой в управлении, чем в случае C. Язык C, конечно, имеет свою нишу, но в наши дни для пользовательских приложений разумнее использовать Mono».

Даже Майкл Микс – выдающийся хакер OpenOffice.org и программист со стажем на C/C++ – думает, что у Mono и C# есть преимущества. «В общем и целом, в долгосрочной перспективе я поставил бы на Mono, а не на C++ – по многим причинам: библиотеки «для всего» являются частью платформы, сборка мусора, увеличенная производительность и, конечно же, более чистый язык C#. Mono позволяет вам оставаться на знакомых языках: Python, C, C++, VB.NET и так далее, плюс вы можете повторно использовать множество стандартных библиотек и кросс-платформенных приложений в одной связке – лучшее из множества миров».

Спасибо за память

Хотя предпочтительнее всего писать в Mono управляемый код, где Mono полностью отслеживает использование памяти наиболее эффективным образом, C# позволяет также писать «неуправляемый» код, то есть делать эту работу самому. Конечно, при взаимодействии с «родными» библиотеками C другого выбора нет, а это означает проблемы, поскольку Mono не знает, как «родные» библиотеки используют память – за всем этим нужно следить вам. «Значит, что Mono временами будет менее расторопно прибирать за собой и это приведет к чрезмерному расходу памяти», говорит Ларри Юинг.

Джо Шоу из Beagle признается, что самой большой проблемой его команды было использование памяти. «Эти инструменты были слабы в Mono, но мы видим, что в сообществе и разработчики Mono, и разработчики приложений начинают обращать на это внимание. Кроме собственного профилировщика Mono, у нас есть профилировщики Heap-buddy и Heap-shot, позволяющие снизить потребление памяти. Мы поняли, что наделали глупостей в Beagle, нерационально обращаясь с памятью».

Heap-buddy и его новый компонент Heap-shot проектировались для предоставления точных отчетов об использовании памяти, помогающих разработчикам определять узкие места и утечку ресурсов. Они уже применяются и достигли значительного эффекта – сообщая о Heap-shot в своем блоге, де Икаса писал: «На прошлой неделе я снизил с его помощью потребление памяти в Tomboy на 340к», – разве плохо?

С MonoDevelop, Mono имеет собственную среду разработки, как любая серьезная программная платформа. MonoDevelop был портом Windows-приложения SharpDevelop, в котором хакеры заменили графический интерфейс Microsoft Windows Forms на GTK#. Сегодня MonoDevelop имеет функции управления проектами, подсветку синтаксиса, автодополнение кода и даже систему визуального проектирования графического интерфейса, известную как Stetic. Это намного быстрее, чем в прежние дни, когда вы набивали все элементы своего интерфейса как код.

Молниеносная разработка

По своему назначению Stetic очень похож на Glade: он сохраняет графический интерфейс пользователя в XML, загружемый во время выполнения и транслируемый в виджеты GTK#. Однако Stetic более тесно интегрирован со средой времени выполнения Mono, а значит, способен реализовать функции, которые нельзя было бы сделать в не учитывающем особенности платформ дизайнере типа Glade. Луис Санчес [Luis Sanchez], ведущий разработчик MonoDevelop и ответственный за Stetic, рассказал нам: «Stetic имеет несколько преимуществ перед Glade: например, поддерживает произвольные виджеты и лучше интегрирован в Mono и MonoDevelop. С другой стороны, Glade – более зрелая технология, и дизайнер интерфейса Glade шире распространен. Так что это дело выбора. Stetic уже может читать файлы Glade, так что миграция с Glade на Stetic должна быть простой – Glade и Stetic вполне могут сосуществовать».

MonoDevelop приближается к релизу 1.0, и хотя основной набор функций считается завершенным, по ходу добавляется множество мелочей. Это включает поддержку автодополнения для параметров, импорт проектов Microsoft Visual Studio, CVS и Subversion, плюс улучшение интеграции с семейством утилит Autotools. Первый бета-выпуск MonoDevelop 1.0 должен был выйти к моменту прочтения этих строк, а финальный релиз пока нацелен на апрель. Как говорит Санчес, «основная цель этого первого стабильного релиза заключается в разработке приложений GTK#. MonoDevelop имеет почти всю требуемую для этого функциональность, и мы не собираемся добавлять много новых функций, нам просто нужно завершить отсутствующие части и исправить имеющиеся ошибки».

Теперь, когда Stetic является предпочтительным дизайнером графического интерфейса GTK# для Mono, некоторых интересует, будут ли ранние программы Mono – Beagle, F-Spot, Blam и другие – придерживаться Glade или мигрируют на Stetic, как только выйдет финальная версия MonoDevelop 1.0. Ларри Юинг пока не уверен: «Переход на Stetic сейчас означал бы массу работы, практически не видной пользователю, так что мы вряд ли будем спешить с изменениями», говорит он. «С другой стороны, новые функции в MonoDevelop и Stetic весьма заманчивы. Иногда, чтобы начать большие изменения, нужно только сильное искушение».

На плечах гигантов

Неважно, насколько мил язык программирования C# или сколько функций имеет MonoDevelop; успех Mono во многом определяется тем, насколько доступна из него обширная коллекция библиотек, уже имеющихся в Linux. К счастью, Mono упрощает сборку на основе библиотек C, так что можно разрабатывать полностью управляемые библиотеки Mono, которые затем легко разделяются между программами. Это означает, что нечто вроде Boo – популярного Python-подобного .NET-языка, который мы рассматривали в LXF77 – можно встроить внутрь множества приложений, чтобы обеспечить поддержку сценариев.

Наученная предыдущим горьким опытом ада DLL, Microsoft придумала для .NET так называемый глобальный кэш сборок (GAC – Global Assembly Cache). Библиотеки, разделяемые множеством приложений, устанавливаются в GAC с учетом номера версии, то есть одна библиотека может быть в нескольких версиях одновременно. Именно сюда устанавливается большая часть ПО Mono, хотя некоторые разработчики могут выбрать использование локальных копий библиотек.

Локальная установка библиотек – это путь, выбранный Banshee, как поясняет Аарон Боковер: «В Banshee включены внешние исходные тексты и библиотеки (D-BUS, HAL, TagLib#, Mono.Zeroconf и Boo). Когда Banshee установлен, эти управляемые библиотеки инсталлируются как его приватные копии. Это помогает при работе с «нестабильными» библиотеками (их API может меняться в будущем, так что мы не хотим помещать их в глобальный кэш сборок), поскольку дает гарантию, что обновление какой-нибудь внешней библиотеки не испортит наше приложение. Это также обеспечивает очень гибкий контроль за разработкой».

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


Уже грядет: .NET 3.0

Мы раскрываем планы на Mono 2.0 и дальше.

Если эта статья сделала свое дело, перспективы дальнейшей разработки Mono уже встопорщили волосы у вас на загривке. Но не расстраивайтесь, что мы начнем экскурсию в увлекательное будущее с остановки в Редмонде. Да, после долгой разработки, начатой в мае 2001 г., Windows Vista вышла и уже используется первопроходцами. Кроме новой внешности, Aero, есть кое-что поинтереснее: .NET 3.0.

Это следующее поколение платформы .NET, и Microsoft намеревается распространить ее на Windows XP и Windows Server 2003, охватив широкую пользовательскую базу. Но, в отличие от .NET 2.0, .NET 3.0 не меняет радикально нижележащую среду исполнения .NET. Вместо этого добавляются новые библиотеки для обработки графики (Avalon), коммуникаций (Indigo) и других задач. Также вводится C# 3.0, обладающий новыми функциями, например, лямбда-выражениями и анонимными типами.

Важно, что все это по-прежнему работает со старыми библиотеками .NET, и Mono не потребует изменений для работы с программами .NET 3.0. Mono уже имеет собственную реализацию .NET 2.0, дающую людям все преимущества .NET без чувства вины. Эти новые API вообще не меняют значение Mono, и фактически можно счастливо проигнорировать дополнения .NET 3.0 и по-прежнему цвести.

Не забуду .NET 2.0...

Разработчики Windows обдумывают преимущества .NET 3.0, и Mono тоже не стоит на месте. Идет работа по следующему крупному релизу, Mono 2.0, который должен выйти во втором квартале 2007 г. Как мы уже сказали, сейчас Mono поддерживает все из .NET 1.0 и 1.1, но лишь некоторые вещи из .NET 2.0. Сюда и направлены основные усилия: Mono 2.0 будет первым выпуском с полной поддержкой .NET 2.0. Он также будет включать новую систему сборки мусора, предотвращающую фрагментацию памяти при длительной работе программ и новый компилятор Visual Basic.NET, плюс анонсируется предварительная поддержка Windows Forms 2.0.

В дальней перспективе проект Olive попытается перенести часть самых интересных библиотек .NET 3.0 в фонд Mono. Сейчас работа во многом сфокусирована на Workflow API, что позволит разработчикам производить легко автоматизируемые приложения, и поддержке XAML: это Glade-подобный XML-язык, упрощающий создание кода графических интерфейсов. В планах на сегодня – сделать первые «беты» Olive доступными с Mono 2.2, наряду с финальной поддержкой Windows Forms 2.0, в конце этого года.

Пока ядро Mono движется к Mono 2.0, другие исследуют способы помещения имеющегося кода Mono для работы в других местах. Три проекта особенно впечатляют: Grasshopper от Mainsoft, Mono в GCC и mkbundle.

Глубокая интеграция

Grasshopper – умная программа, выполняющая кросс-компиляцию кода .NET в код Java. Практически, это означает, что разработчик может писать на C# как обычно, а затем запустить эту программу на том сервере J2EE, на каком захочет. Mono занимает центральную место во внутренней работе Grasshopper, потому что Grasshopper должен конвертировать все библиотеки Mono в J2EE, чтобы основанные на нем программы могли работать в Java. Сейчас упор сделан на Windows-разработчиков, желающих освободиться от Windows, но Mainsoft – это также и крупнейший соавтор Mono после Novell, так что преимущества от этой работы получат все. Филипп Коэн [Philippe Cohen], вице-президент по разработке продукта в Mainsoft, сказал: «Впервые разработчики могут портировать все свои .NET-приложения в Linux, как клиентские, так и серверные, благодаря полной реализации Windows Forms, которая придет с этим релизом. Версия 1.2 – это также значительная веха на пути к поддержке .NET Framework 2.0. Мы надеемся на полный выпуск 2.0 в 2007 году».

Работа в GCC нацелена на производство работоспособного выходного интерфейса (back-end) к GCC для универсального промежуточного языка .NET. Сейчас GCC имеет множество входных и выходных интерфейсов. Код компилируется через определенный входной интерфейс. Например, GCC уже может читать C и C++, но также может читать Fortran, Java и другие. Затем код преобразуется в собственный промежуточный язык GCC, называемый Generic. Наконец, эта не зависящая от языка часть должна быть оптимизирована и пропущена через подходящий выходной интерфейс для текущей машины, где она конвертируется в машинный код.

Причина, почему выходной интерфейс GCC для Mono очень важен – это означает, что код будет прочитан, конвертирован в Generic, затем отправлен в интерфейс Mono, и сможет запускаться поверх .NET и Mono. Преимущество здесь в том, что Mono неожиданно открывается для любых языков, поддерживаемых GCC, исключая необходимость для команды Mono писать собственный компилятор для этих языков.

Наконец, mkbundle – это программа, спроектированная для того, чтобы позволить приложениям Mono работать в системах без установленного Mono. Сказанное выглядит невозможным, и сделать это – непростая задача, но mkbundle работает путем статической компиляции программ Mono, создавая, по сути, исполняемый файл Linux, который содержит встроенные версии Mono наряду со всеми используемыми библиотеками. Преимущества очевидны: программы больше не требуют сложной процедуры установки; вы можете просто щелкнуть по файлу, и он запустится. Недостатком метода, конечно, является создание на редкость громоздких программ, не разделяющих библиотеки с другим ПО.

Mono в Linux

Мы уже видели, как несколько проектов Mono нашли свой путь в большинство популярных дистрибутивов (Tomboy, F-Spot и Beagle доступны как стандарт в трех самых популярных), и над какими будущими функциями работают их авторы. Но на горизонте есть и другие замечательные вещи, например, проект Mono.Fuse. Fuse – это модуль ядра, позволяющий файловым системам работать в пространстве пользователя, то есть непривилегированные пользователи могут создавать собственные файловые системы без необходимости пересобирать ядро или иначе обходить ограничения системы.

Mono.Fuse расширяет модуль Fuse на Mono, позволяя программистам собирать «обертки» (wrappers) к файловым системам, используя управляемый код на C# или другом .NET-языке на выбор. Чтобы вы поняли его потенциал, Fuse уже используется многими файловыми системами, включая EncFS (она шифрует данные на лету!), Wayback (контролирует версии файлов!), TagFs (позволяет просматривать свою коллекцию музыки по ID3-тегам!), и Flickrfs и Wikipediafs (угадайте сами, что они делают!).

Вся соль в том, что Fuse уже чрезвычайно популярен – несмотря на то, что вынуждает людей использовать библиотеки и API языка С. Связка с Mono откроет поле для работы гораздо большего числа программистов, потому что C# легче в использовании, и кроме того, поставляется с весомой коллекцией библиотек .NET.

Еще одно отражение идеи взять крутую технологию и сделать ее более доступной – проект, выполненный в рамках акции Google Summer of Code, Mono/Xgl, за который студент Альп Токер (Alp Toker) взялся под наставничеством ответственного за Mono Массимилиано Мантионе [Massimiliano Mantione]. Цель здесь заключается в такой модификации вундеркинда графики Compiz, чтобы программисты могли писать к нему расширения, используя Mono и C#. Когда вы прибавите сюда мощь каркаса Tao, описанного на стр. 25, делать крутейшие трехмерные эффекты всего несколькими строками кода окажется неожиданно легко.

Ваш следующий шаг...

Теперь, когда Gnome распахнул двери, чтобы принять больше программ Mono, появилась надежда, что мы увидим шквал новых разработок, когда люди поймут преимущества новых возможностей. Мы прошли точку тревоги за проблемы с патентами, и впереди Mono ждет прекрасное будущее. Что будет в следующем Beagle или F-Spot? Как использовать все разнообразие библиотек для приближения Linux к принятию на рабочем столе?

Платформы, поддерживаемые Mono

s390 Linux
SPARC Linux, Solaris
PowerPC

x86

Linux, OS X

FreeBSD, Linux, NetBSD, OpenBSD, OS X, Solaris, Windows

x86-64

IA64 Itanium2

ARM*:

Linux

Linux

Linux

Alpha Linux
MIPS Linux
Персональные инструменты
купить
подписаться
Яндекс.Метрика