Mono linux что это
Как установить Mono в Ubuntu 20.04
В этом руководстве описаны шаги, необходимые для установки Mono в Ubuntu 20.04.
Подготовка
Установка Mono в Ubuntu
Mono недоступен в стандартных репозиториях Ubuntu 20.04. Мы установим пакеты Mono из официальных репозиториев Mono:
Установите зависимости, необходимые для добавления нового репозитория через HTTPS:
Импортируйте GPG-ключ репозитория:
Результат должен выглядеть примерно так:
Добавьте репозиторий Mono в список источников вашей системы:
mono-complete — это мета-пакет, который устанавливает среду выполнения Mono, инструменты разработки и все библиотеки.
Установка может занять несколько минут. После завершения проверьте его, введя следующую команду, которая распечатает версию Mono:
На момент написания этой статьи последней стабильной версией Mono была 6.8.0.123.
Вот и все, Mono установлен на вашем компьютере с Ubuntu, и вы можете начать его использовать.
Начало работы с Mono
Чтобы убедиться, что все настроено правильно, мы собираемся создать программу Hello World, которая печатает классическое сообщение «hello world».
Откройте текстовый редактор и создайте файл hello.cs со следующим содержимым:
Используйте компилятор csc для сборки программы:
Запускаем исполняемый файл:
Результат должен выглядеть примерно так:
Чтобы выполнить программу только путем ввода ее имени, установите флаг исполняемого файла :
Выводы
Установка Mono на Ubuntu 20.04 — относительно простой процесс, и он займет у вас всего несколько минут.
Если вы столкнулись с проблемой или хотите оставить отзыв, оставьте комментарий ниже.
Alexandr’s Blog
Работаем с Mono. Часть 1: Основные принципы Mono, инструменты, создание простейшего приложения
В базовом варианте Mono состоит из нескольких компонентов:
Описание основных компонентов и возможностей Mono
Компилятор Mono C# поддерживает версии языков C# 1.0, 2.0 и 3.0. Для создания кода можно использовать один из нескольких вариантов компилятора, в зависимости от потребностей:
Начиная с версии Mono 2.2 реализована поддержка классов компилятора Mono.CSharp.Evaluator (сборка Mono.Sharp.dll) для создания собственных сервисов компиляции.
Среда исполнения Mono поддерживает инфраструктуру промежуточного языка CLI (Common Language Infrastructure), соответствующую стандарту ECMA-335. Виртуальная машина среды исполнения допускает возможность запуска приложений и сборок, скомпилированных в других системах (например, возможно запускать в Linux без перекомпиляции приложения, созданные при помощи Microsoft Visual Studio для исполнения в Microsoft Windows).
Также, вместо использования виртуальной машины, среда исполнения может быть интегрирована в приложение с целью создания встраиваемой системы, не требующей установки Mono для запуска и обладающей высоким быстродействием. При этом, в приложение включаются только необходимые компоненты среды исполнения.
В качестве сборщика мусора в данный момент используется Boehm’s GC, однако в текущей разрабатываемой ветке SVN присутствует совершенно новый сборщик мусора, разработанный специально для Mono.
Установка Mono
Mono входит в репозитории огромного количества дистрибутивов, поэтому проблем с установкой из репозитория возникнуть не должно. Другой вопрос, какие версии располагаются в репозиториях. На данный момент на сайте проекта Mono предлагается скачать бинарные файлы версии 2.4.x. Эти же версии лежат в репозиториях современных дистрибутивов. Последней стабильной версией Mono считается 2.6.3, которая имеется только в виде исходных текстов.
Если есть желание установить Mono 2.6.3, то придется заняться самостоятельной сборкой версии из исходных текстов.
В качестве подопытной системы выберем недавно вышедшую Ubuntu 10.04. Тем не менее пользователям других версий и дистрибутивов это не должно особенно огорчать, потому что разница будет только в менеджерах пакетов и именах пакетов.
Для чистоты эксперимента, чтобы определить все пакеты, которые нужны, возьмем систему Ubuntu 10.04 установленную с нуля и обновленную (при помощи Synaptic или aptitude) до текущего состояния.
Первым делом создадим каталог для исходных текстов и сборки проектов:
Для работы с пространством имен System.Windows.Forms (на классах которого построен графический интерфейс операционных систем семейства Microsoft Windows) необходимо установить библиотеку libgdiplus, которая реализует функции Microsoft GDI+ для Mono. Взять исходные тексты этой библиотеки можно с сайта проекта Mono:
Распакуем исходные тексты и перейдем в каталог проекта:
При базовой установке Ubuntu устанавливается минимальный набор инструментов для разработчика, поэтому необходимо проследить, чтобы нужные инструменты присутствовали в системе. Для установки и работы потребуются компилятор g++, парсер Bison, интерпретатор макроязыка M4, библиотека Glib 2.0, GetText для поддержки интернационализации. Для работы с Mono требуется также Pkg-config. При отсутствии в системе эти пакеты (и их зависимости) нужно будет установить. Для Ubuntu это делается командой:
Для работы библиотеки libgdiplus нужна библиотека libcairo2 версии не ниже 1.6.4. Эта библиотека входит в состав исходных текстов libgdiplus и может быть скомпилирована совместно с ней, однако при наличии более свежей версии рекомендуется пользоваться именно ей. В репозиториях Ubuntu 10.04 лежит libcairo2 версии 1.8.10. Установим ее из репозитория:
Остается только сконфигурировать и собрать libgdiplus. По умолчанию установка производится в каталог /usr/local/bin для библиотеки и /usr/local/include для заголовочных файлов, что не всегда удобно, так как в будущем понадобится настройка переменных окружения LD_LIBRARY_PATH и LD_RUN_PATH. Удобнее, если библиотеки и заголовочные файлы будут расположены в /usr/bin и /usr/include соответственно.
Скачиваем mono runtime:
Рассмотрим наиболее интересные параметры конфигурации исходных текстов:
Этот параметр установлен в yes по умолчанию. При этом mono оптимизмруется для работы под средствами виртуализации Xen. В реальной среде производительность несколько ниже. Мы в нашем случае будем использовать no.
Возможность выделения приложением больших объемов памяти (свыше 3 Гб). По умолчанию no.
Включение поддержки Moonlight — свободного аналога Microsoft Silverlight.
Местоположение библиотеки libgdiplus для поддержки классов System.Windows.Forms. Значение installed означает, что библиотека установлена в системе (как в нашем случае), sibling — исходные тексты библиотеки лежат в каталоге с текстами mono,
— библиотека установлена по указанному пути (используется, если библиотека установлена в нестандартный каталог или установлено несколько разных версий в разных каталогах).
Включение поддержки больших массивов, у которых индекс выходит за пределы Int32.MaxValue. По умолчанию такие массивы не поддерживаются даже в 64-битных системах (в том числе и в Microsoft Windows для архитектуры x64).
Включение многопоточного сборщика мусора при наличии нескольких процессоров. По умолчанию сборщик мусора однопоточный. Следует заметить, что разработчики Mono предупреждают, что возможность является экспериментальной и не протестирована тщательно.
Конфигурируем и устанавливаем Mono:
В моем случае изначально сборка закончилась неудачно в связи с тем, что make почему-то не хватило прав, хотя собиралось все в домашнем каталоге пользователя. Если вдруг такое произошло, помогает sudo make вместо make.
Mono Runtime готов к работе.
Создание первого приложения
С целью протестировать работоспособность Mono создадим традиционное приложение Hello World с выводом в терминал и вариант с созданием окна.
Для вывода в терминал воспользуемся методом WriteLine класса Console.
Компиляция должна пройти без ошибок и запуск:
приводит к выводу в консоль сообщения “Hello World! This is our first Mono program”
Сделаем ознакомительное приложение с использованием графического интерфейса. В среде Linux уместнее всего было бы использовать библиотеки Gtk#, однако в данный момент эта библиотека не установлена и это будет темой одной из будущих статей. Воспользуемся библиотекой Winforms, которая входит в состав Mono по умолчанию. Работа с этой библиотекой также будет описана в будущих статьях, поэтому код дается без комментариев.
на экране появится пустое окно с заголовком “Hello World! This is our first Mono program” и кнопками сворачивания, разворачивания и закрытия.
MoMA — анализатор “чужих” сборок
В этом поможет инструмент Mono Migration Analyzer (MoMA), который можно скачать с сайта проекта Mono.
Для запуска MoMA его нужно распаковать в отдельный каталог и запустить сборку MoMA.exe:
Тестирование сборок на совместимость состоит из пяти шагов и интуитивно понятно, более того реальный шаг всего один — выбор сборок для тестирования, остальные шаги содержат справочную информацию, итоги тестирования и форму для сбора информации о том, как улучшить данный инструмент.
Следует отметить, что MoMA — инструмен достаточно простой, поэтому возможны варианты, что какие-то проблемы в коде найдены не будут, а также возможно нахождение проблемы, которая, тем не менее, не помешает исполнению кода.
Все проблемы, которые находит MoMA можно свести к четырем видам.
Бороться с этой проблемой можно двумя способами. Первый состоит в том, чтобы заменить отсутствующий метод другими методами, реализующими ту же задачу. Второй состоит в том, чтобы реализовать отсутствующий метод и, по возможности, предложить его для включения в новую версию Mono.
Если же вызов происходит из COM-объектов, написанных самостоятельно, то должна быть обеспечена их кроссплатформенность, тогда ошибок при исполнении кода не будет. В противном случае лучше изменить реализацию так, чтобы вызовы из COM-объектов не использовались.
Работа с MoMA из командной строки
В случае, если использование графического интерфейса не нужно или невозможно, можно использовать MoMA из командной строки.
Заключение
Mono и ОС МСВС
Знакомство с ОС МСВС
Итак, википедия говорит, что ОС МСВС — это Мобильная Система Вооруженных Сил. А именно, защищенная операционная система общего назначения. Разработала ее организация ВНИИНС. Система создана на базе Linux в соответствии с требованиями Министерства Обороны РФ.
В постановке задачи не была указана конкретная версия системы, поэтому, посоветовавшись с техподдержкой ВНИИНС, была выбрана наиболее актуальная на сегодняшний день ОС МСВС 5.0 ЦАВМ.11004-01 изм. №7.
Примерно месяц ушел на покупку официальной версии и еще несколько дней на подбор “железа” и установку системы. Однозначно можно сказать что ОС МСВС 5.0 не ставится на процессоры х86 и ноутбуки с 2-мя видеокартами.
Так выглядит графическая оболочка МС ОСВС:
Можно предположить, что такое состояние дел вызвано трудностями с сертификацией составных частей системы.
Установка Mono
Реализации Mono существуют для следующих операционных систем: Windows, Linux, BSD (FreeBSD, OpenBSD, NetBSD), Solaris, Mac OS X, Apple iOS, Wii. Поддерживаются платформы: s390, SPARC, PowerPC, x86/x86-64, IA64, ARM, Alpha, MIPS, HPPA.
Идем на сайт проекта и видим там, что для установки нужно выполнить всего лишь 3 команды:
Первая команда добавляет ключ подписи для доступа в репозиторий, вторая настраивает репозиторй, третья инсталлирует Mono.
Программное обеспечение устанавливается в ОС МСВС (как в наследнике RHEL) в виде RPM пакетов. Для удобства этого процесса часто используется менеджер пакетов YUM. В состав ОС МСВС входит графическая оболочка менеджера пакетов, но я пользовался консольной версией. Пакеты находятся в репозиториях, которые могут находиться как на локальной машине, так и где-то в сети. Добавив ссылки на репозитории в менеджер пакетов YUM, можно довольно удобно обновлять систему. Как правило, в RHEL и его наследниках репозитории уже добавлены и настроены, однако в ОС МСВС имеется только один репозиторий, расположенный на установочном компакт-диске.
Проблемы начались уже на второй команде. Оказалось, что yum-config-manager отсутствует в системе:
[mono_repository]
name=mono repository
baseurl=http://download.mono-project.com/repo/centos/
enabled=1
gpgcheck=0
Однако и теперь ничего не получилось:
После этого репозитории заработали, как нужно:
Но выполнить инсталляцию Mono все равно не получается.:
При установке проверяются зависимости пакетов. Оказалось, что инсталляция Mono из данного репозитория требует, чтобы в системе были версии библиотек не ниже:
Можно было бы попробовать обновить все эти библиотеки, однако это может привести к проблемам в работе другого ПО, использующего их.
StackOverFlow подсказал мне другое решение: нужно попробовать поставить более раннюю версию Mono. Оказывается, существует архив версий. Опытным путем удалось определить, что самой свежей версией Mono, которая нормально ставится на ОС МСВС 5.0 ЦАВМ.11004-01 изм. №7 является версия 2.10.2. Репозиторий находится тут.
В итоге, чтобы все установить, нужно сделать следующее:
2. Выполнить команду yum install monotools-addon-server для установки основных библиотек.
3. Выполнить команду yum install mono-addon-winforms-2.10.2-5.1.x86_64 для установки библиотек winforms.
4. Выполнить команду yum install mono-addon-libgdiplus0.x86_64 0:2.10-6.2 для установки реализации GDI+.
В результате должно получиться так:
Кроме того, можно проверить работоспособность, запустив пару программ.
Проблемы портирования
Чтобы работать в привычной среде, я установил ту же версию Mono для Windows.
В каждой из них я добавил опцию компилятора /define MONO
Теперь можно использовать такую вот конструкцию:
С первого раза, конечно же, ничего не заработало. В первую очередь — получение имени процессов:
Этот код возвращает количество таких же запущенных в системе процессов. Проблема решилась, путем игнорирования исключений от не нужных нам процессов.
При этом код продолжил выполнять свою функцию.
Затем на форме “уехали” кнопки. Должно быть так:
А получилось так:
Это решилось небольшим изменением расположения элементов на форме:
В итоге пришлось переписывать весьма внушительную часть кода, заменяя автоматическую сериалиацию на “ручную” сборку класса из массива.
Результат
В результате задача была решена. Непосредственно на портирование ушло около 2-х недель. Еще где-то неделю заняли исследования процесса установки Mono. И месяц заняла покупка операционной системы.
Что дальше?
А дальше нужно формировать собственный репозиторий, который автоматически будет устанавливать Mono и само ПО. После этого должна быть сертификация…
Но, как обычно, все поменялось на самом интересном месте. В самом разгаре работы оказалось, что ОС МСВС уже не актуальна. Нужно все делать на AstraLinux… А это уже немного другая история.
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Mono Project
Разработчики: | Xamarin, ранее Novell |
---|---|
Выпущена: | 30 June 2004 года ; 17 years ago ( 2004-06-30 ) |
Постоянный выпуск: | 5.0.1 / 23 May 2017 года ; 4 years ago ( 2017-05-23 ) [1] |
Написана на: | C, C#, XML |
Операционная система: | Windows, macOS, Linux |
Платформа: | x86-64, x86, ARM, MIPS, PowerPC, SPARC, S390, IA-64 |
Тип ПО: | Платформенное ПО |
Лицензия: | GPL, LGPL, MIT |
Веб-сайт | http://www.mono-project.com/ |
Основной разработчик проекта Mono — корпорация Xamarin, ранее Novell. Проект возглавляет Мигель де Икаса, известный разработчик, основатель проекта GNOME. Реализации Mono существуют для следующих операционных систем: Windows, Linux, BSD (FreeBSD, OpenBSD, NetBSD), Solaris, Mac OS X, Apple iOS, Wii. Поддерживаются платформы: s390, SPARC, PowerPC, x86/x86-64, IA-64, ARM, Alpha, MIPS, HP PA. [Источник 2]
Содержание
История
После трех лет работы, 30 июня 2004 года был выпущен Mono 1.0. Моно развился из платформы для настольных приложений Linux в приложение, способное осуществлять поддержку широкого спектра архитектур и операционных систем, включая встроенные системы.
Novell приобрела Ximian в 2003 году. После того, как Novell была приобретена Attachmate в апреле 2011 года, Attachmate объявила о сотнях увольнений работников Novell, ставя под сомнение будущее Mono.
Текущее состояние и функциональность
Moonlight
Внедрение Microsoft Silverlight с открытым исходным кодом, называемое Moonlight, было включено после Mono 1.9. Moonlight 1.0, поддерживающий API Silverlight 1.0, был выпущен 20 января 2009 года. Moonlight 2.0 поддерживает Silverlight 2.0 и некоторые особенности Silverlight 3.0. Предварительный выпуск Moonlight 3.0 был анонсирован в феврале 2010 года и содержит обновления для поддержки Silverlight 3.
Компоненты Mono
Моно состоит из трех групп компонентов:
К основным компонентам относятся компилятор C #, виртуальная машина для Common Language Infrastructure и библиотеки основных классов. Эти компоненты основаны на стандартах Ecma-334 и Ecma-335, что позволяет Mono предоставлять стандартную совместимую бесплатную виртуальную машину CLI с открытым исходным кодом. Microsoft выпустила документ, который охватывает оба стандарта в соответствии с их лицензией Community Promise.
Стек разработки Mono / Linux / GNOME обеспечивает пользователей инструментами для разработки приложений при использовании существующих в GNOME и бесплатных библиотек с открытым исходным кодом. К ним относятся: Gtk # для разработки графического интерфейса пользователя (GUI), библиотеки Mozilla для работы с механизмом рендеринга Gecko, библиотеки интеграции Unix (Mono.Posix), библиотеки подключений к базам данных, стек безопасности и язык XML-схемы RelaxNG. Gtk # позволяет приложениям Mono интегрироваться в рабочий стол Gnome в качестве родных приложений. Библиотеки баз данных обеспечивают возможность подключения к объектно-реляционной базе данных Db4o, Firebird, Microsoft SQL Server (MSSQL), MySQL, [[Open Database Connectivity (ODBC)], Oracle, PostgreSQL, SQLite и многим другим. Проект Mono отслеживает разработку компонентов базы данных на своем веб-сайте.
Архитектура Framework
Основные компоненты Mono включают:
Механизм выполнения кода
Генератор кода отображается в трех режимах:
Начиная с Mono 2.6, стало возможным настроить Mono на использование LLVM в качестве механизма генерации кода вместо собственного механизма генерации кода Mono. Это полезно для высокопроизводительных вычислительных нагрузок и других ситуаций, когда производительность исполнения важнее производительности запуска.
Сборщик мусора
Начиная с Mono 2.8, Mono время выполнения осуществляется двумя сборщиками мусора: generational collector (коллектором поколений) и Boehm conservative collector (консервативным коллектором Бемом).
В настоящее время SGen рассматривает стек и регистрирует консервативным способом и связывает любые объекты, на которые может ссылаться любой из этих корней. Будущая версия Mono точно проверяет управляемый стек, уменьшая количество закрепленных объектов.
Библиотека классов
Пространства имен и сборки
Общая языковая инфраструктура и общая языковая спецификация
Спецификация общего языка (CLS) описана в главе 6 ECMA-335 и определяет интерфейс для CLI, например соглашения, подобные базовым типам для Enum. Компилятор Mono генерирует изображение, соответствующее CLS. Это общий промежуточный язык. Время выполнения Mono берет это изображение и запускает его. Стандарт ECMA формально определяет библиотеку, которая соответствует CLS в качестве основы.
Управляемый и неуправляемый код
В некоторых областях Mono имеет нововвведения с новыми расширениями основных спецификаций C # и CLI:
Кроме того, Mono доступен в различных операционных системах и архитектурах.
Системные требования
Связанные проекты
Несколько проектов расширяют Mono и позволяют разработчикам использовать его в своей среде разработки. Эти проекты включают:
Другие реализации
Portable.NET от компании Free Software Foundation был выведен из эксплуатации.
MonoDevelop
Браузер MonoDoc обеспечивает доступ к документации API и образцам кода. В браузере документации используется управление контентом в стиле wiki, что позволяет разработчикам редактировать и улучшать документацию.
Xamarin.iOS and Xamarin.Android
Xamarin.iOS и Xamarin.Android, разработанные Xamarin, являются реализациями Mono для iPhone и смартфонов на базе Android. Ранее доступный только для коммерческого лицензирования, после приобретения Microsoft Xamarin в 2016 году, сама среда исполнения Mono была переведена в соответствии с лицензией MIT, и Xamarin.iOS и Xamarin.Android стали бесплатными и открытыми.
Xamarin.iOS
Стек Xamarin.iOS состоит из:
Xamarin Studio используется в качестве основной IDE, однако были добавлены дополнительные ссылки на Xcode и iOS-симулятор.
С апреля по начало сентября 2010 года будущее MonoTouch было поставлено под сомнение, поскольку Apple представила новые условия для разработчиков iPhone, которые, по-видимому, запрещают им развиваться на языках, отличных от C, C ++ и Objective-C, и использование среднего уровня между iOS и приложениями для iPhone. Из-за этого будущее MonoTouch и других технологий, таких как Unity, было неопределенным. Затем, в сентябре 2010 года, Apple отменила это ограничение, заявив, что они ослабляют языковые ограничения, которые они установили в начале этого года.
Xamarin.Android
Xamarin.Android (ранее известный как Mono для Android), первоначально разработанный Novell и продолжаемый Xamarin, является частной версией Mono для смартфонов на базе Android. Он был впервые выпущен 6 апреля 2011 года. Mono для Android был разработан, чтобы позволить разработчикам легко писать кросс-платформенные приложения, которые будут работать на всех мобильных платформах. В интервью H-Online Мигель де Иказа заявил: «Наше видение заключается в том, чтобы позволить разработчикам повторно использовать свой код движка и бизнес-логики на всех мобильных платформах и заменять код пользовательского интерфейса для API-интерфейса, специфичного для платформы».
Стек Xamarin.Android состоит из следующих компонентов:
Лицензии
Патенты Mono и Microsoft
Если патентные вопросы когда-либо возникнут, стратегия проекта Mono для решения этих проблем выглядит следующим образом:
Кроме того, Mono также входит в список программного обеспечения, которое Open Invention Network обязуется защищать.
Руководитель проекта Fedora Пол Фриелдс заявил: «У нас есть серьезные опасения по поводу Mono, и мы продолжим рассматривать его с нашим юрисконсультом, чтобы узнать, нужны ли с нашей стороны какие-либо шаги», но «Мы не пришли к юридическому заключению, которое достаточно для того, чтобы мы решили принять Mono».
В ноябре 2011 года на саммите разработчиков Ubuntu разработчики проголосовали за удаление медиа-проигрывателя Banshee на основе Mono из установки по умолчанию Ubuntu, начиная с Ubuntu 12.04; хотя сообщаемые рассуждения включали проблемы производительности в архитектуре ARM, блокирующие проблемы в ее версии GTK + 3, и, по их мнению, «не поддерживаемая». На решение также повлияло желание удалить Mono из базы распределение, так как остальные программы, зависящие от Mono, gbrainy и Tomboy, также должны были быть удалены. Mono-разработчик Джозеф Майкл Шилдс защищал работу Banshee на ARM, а также утверждения о том, что Banshee не поддерживался в качестве «целенаправленное личное оскорбление» одному из его основных участников.
Программное обеспечение, разработанное с помощью Mono
Многие программы, охватывающие целый ряд приложений, были разработаны с использованием интерфейса программирования приложений Mono (API) и C #. Некоторые программы, написанные для Linux Desktop, включают Banshee, Beagle, Docky, F-Spot, Gbrainy, GNOME Do, MonoTorrent, Pinta и Tomboy.
Ряд видеоигр, таких как The Sims 3 и Second Life для своих языков сценариев, сервер виртуального мира OpenSimulator или игры, созданные с помощью движков Unity или MonoGame, также используют Mono.