Mono – это бесплатная среда разработки с открытым исходным кодом, совместимая с .NET Framework. Первоначально она была разработана компанией Ximian, затем ее приобрела Novell, а в настоящее время ею руководит Xamarin, дочерняя компания Microsoft и .NET Foundation. Mono может быть запущена на многих программных системах.
История
Когда в июне 2000 года компания Microsoft впервые анонсировала .NET Framework, он был описан как «новая платформа, основанная на интернет-стандартах», а в декабре того же года инфраструктура общего языка была опубликована как открытый стандарт «ECMA-335», открывая тем самым потенциал для независимых реализаций. Мигель де Икаса из Ximian считал, что .NET может повысить производительность труда программистов, и начал исследовать возможность создания версии для Linux. Понимая, что их небольшая команда не может рассчитывать на создание и поддержку полноценного продукта, они запустили проект Mono с открытым исходным кодом 19 июля 2001 года на конференции O'Reilly.
После трех лет разработки запуск Mono 1.0 был определен на 30 июня 2004 года. К тому времени Mono эволюционировал от своей первоначальной ориентированности только для разработки приложений на Linux до поддержки широкого спектра архитектур и операционных систем – включая встроенные системы.
Novell приобрела Ximian в 2003 году. После приобретения Novell компанией Attachmate в апреле 2011 года, Attachmate объявила о сотнях увольнений сотрудников Novell, поставив под вопрос будущее Mono.
16 мая Мигель де Икаса объявил в своем блоге, что Mono будет продолжать поддерживаться компанией Xamarin, которую он основал после увольнения из Novell. Первоначальная команда Mono также перешла в новую компанию. Xamarin намеревалась продолжить работу над Mono и планировала переписать с нуля собственные стеки .NET для iOS и Android, поскольку Novell в то время все еще владела MonoTouch и Mono for Android. После этого заявления будущее проекта было поставлено под сомнение, поскольку MonoTouch и Mono for Android находились в прямой конкуренции с существующими коммерческими предложениями, которые теперь принадлежат Attachmate, и учитывая, что команде Xamarin будет трудно доказать, что они не используют технологии, которые они ранее разработали, когда работали в Novell для той же работы. Однако в июле 2011 года Novell, которая теперь является дочерней компанией Attachmate, и Xamarin объявили о предоставлении бессрочной лицензии на Mono, MonoTouch и Mono for Android компании Xamarin, которая официально взяла на себя руководство проектом.
Текущая версия
Текущая версия Mono – 6.0.0 (по состоянию на август 2019 года). Эта версия предоставляет основной API .NET Framework и поддержку Visual Basic.NET и C# 7.0. LINQ to Objects, XML и SQL являются частью дистрибутива. Windows Forms 2.0 также поддерживается, но активно не разрабатывается, и поэтому его поддержка в Mono неполная. Версия 4.0 стала первой версией, включающей оригинальный исходный код Microsoft, который был выпущен Microsoft в рамках проекта .NET Core.
По состоянию на 14 января 2021 года, Mono имеет полную поддержку всех функций в .NET 4.7, за исключением Windows Presentation Foundation (WPF) (которую команда Mono не планирует поддерживать из-за объема работы, которая для этого потребуется) и Windows Workflow Foundation (WF), и лишь ограниченную поддержку Windows Communication Foundation (WCF) и стека ASP.NET async. Однако System.Web и WCF являются кандидатами на "почти немедленный" перенос из эталонного источника .NET обратно в Mono. Некоторые недостающие части .NET Framework разрабатываются в экспериментальном подпроекте Mono под названием Olive.
Проект Mono также создал компилятор Visual Basic .NET и среду выполнения, предназначенную для запуска приложений VB.NET. В настоящее время его разработкой занимается Рольф Бьярне Квинге.
Компоненты Mono
Mono состоит из трех групп компонентов:
- Основные компоненты
- Стек разработки Mono/Linux/GNOME
- Стек совместимости с Microsoft
Основные компоненты включают компилятор 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 отслеживает разработку компонентов баз данных на своем сайте.
Стек совместимости Microsoft предоставляет путь для переноса приложений Windows .NET в Linux. В эту группу компонентов входят ADO.NET, ASP.NET, Windows Forms и другие. Поскольку эти компоненты не охвачены стандартами Ecma, некоторые из них остаются предметом патентных страхов и опасений.
MonoDevelop
MonoDevelop - это бесплатная GNOME интегрированная среда разработки, предназначенная в основном для C# и других языков .NET, таких как Nemerle, Boo и Java (через IKVM.NET), хотя она также поддерживает такие языки, как C, C++, Python и Vala. MonoDevelop изначально был портом SharpDevelop на Gtk#, но с тех пор он развивался, чтобы удовлетворить потребности разработчиков Mono. IDE включает в себя управление классами, встроенную справку, завершение кода, Stetic (дизайнер GUI), поддержку проектов и интегрированный отладчик.
Браузер MonoDoc обеспечивает доступ к документации API и примерам кода. Браузер документации использует управление контентом в стиле wiki-технологий, позволяя разработчикам редактировать и улучшать документацию.
Xamarin.iOS и Xamarin.Android
Xamarin.iOS и Xamarin.Android, разработанные компанией Xamarin, являются реализацией Mono для смартфонов на базе iPhone и Android. Ранее доступная только для коммерческого лицензирования, после приобретения Xamarin компанией Microsoft в 2016 году сама среда исполнения Mono была перелицензирована под лицензией MIT, а Xamarin.iOS и Xamarin.Android стали бесплатными с открытым исходным кодом.
Xamarin.iOS
Xamarin.iOS (прежнее название MonoTouch) – это библиотека, позволяющая разработчикам создавать приложения на базе C# и .NET, работающие на устройствах iPhone, iPod и iPad. Она основана на фреймворке Mono и разработана совместно с Novell. В отличие от приложений Mono, «приложения» Xamarin.iOS компилируются в машинный код, предназначенный специально для Apple iPhone и iPad. Это необходимо потому, что ядро iOS не позволяет компиляторам just-in-time работать на устройстве.
Стек Xamarin.iOS состоит из:
- Компиляторы
C# из проекта Mono
Компиляторы сторонних разработчиков, такие как Oxygene от RemObject, также могут работать с Xamarin.iOS
- Библиотеки ядра .NET
- SDK для разработки:
Linker - используется для компоновки только кода, используемого в конечном приложении
mtouch - нативный компилятор и инструмент, используемый для развертывания на целевом устройстве
Инструменты интеграции Interface Builder
- Библиотеки, связывающие нативные API CocoaTouch
- Xamarin Studio IDE
В качестве основной IDE используется Xamarin Studio, однако были написаны дополнительные ссылки на Xcode и симулятор iOS.
С апреля по начало сентября 2010 года будущее MonoTouch оказалось под вопросом, поскольку Apple ввела новые условия для разработчиков iPhone, которые, очевидно, запрещают им разрабатывать на языках, отличных от C, C++ и Objective-C, а также использовать промежуточный слой между платформой iOS и приложениями iPhone. Это сделало будущее MonoTouch и других технологий, таких как Unity, неопределенным. Затем, в сентябре 2010 года, Apple отменила это ограничение, заявив, что они ослабляют языковые ограничения, которые они ввели ранее в том же году.
Xamarin.Android
Xamarin.Android (ранее известный как Mono for Android), первоначально разработанный Novell и продолженный Xamarin, является проприетарной реализацией Mono для смартфонов на базе Android. Впервые он был выпущен 6 апреля 2011 года. Mono для Android был разработан для того, чтобы разработчикам было легче писать кроссплатформенные приложения, которые будут работать на всех мобильных платформах. В интервью H-Online Мигель де Икаса заявил: «Наше видение заключается в том, чтобы позволить разработчикам повторно использовать код движка и бизнес-логики на всех мобильных платформах и заменить код пользовательского интерфейса на API, специфичный для конкретной платформы.»
В августе 2010 года представитель Microsoft, Том Ханрахан из Центра технологий открытого кода Microsoft, заявил, ссылаясь на иск, поданный Oracle против Google в связи с использованием Java в Android: «Такого рода действия, которые Oracle предпринимает против Google в связи с Java, не произойдет. Если перенос .NET на Android будет осуществляться через Mono, то это подпадает под соглашение Microsoft Community Promise Agreement».
Стек Xamarin.Android состоит из следующих компонентов:
- Среда выполнения Mono
- Конструктор пользовательского интерфейса для Android
- Библиотеки:
Библиотеки классов Core .NET
Библиотеки, связывающие родные API Android/Java
- Инструменты SDK для упаковки, развертывания и отладки
- Интеграция Xamarin Studio и Visual Studio 2010 для разработки пользовательского интерфейса, удаленной отладки и развертывания.
Mono для macOS
CocoaSharp
Cocoa# (также известный как CocoaSharp) был фреймворком посредником для Mac OS X, который позволял приложениям, разработанным с использованием среды исполнения Mono, получать доступ к API Cocoa. Первоначально он был выпущен 12 августа 2004 года, и был включен в дистрибутив Mono, начиная с версии 1.0.6, выпущенной 18 февраля 2005 года. С 2008 года он не развивался и в настоящее время является устаревшим.
Monobjc
Monobjc был заменой CocoaSharp. Он позволяет разработчикам .NET использовать большинство API Mac OS X, включая Cocoa, без нативного кода, при этом сохраняя нативный пользовательский интерфейс.
Xamarin.Mac
Xamarin.Mac – это библиотека, которая позволяет разработчикам запускать приложения .NET и C# на Mac.
Лицензия
Mono имеет двойную лицензию Xamarin, как и другие продукты, такие как Qt и Mozilla Application Suite. Компилятор C# и инструменты Mono выпускаются по лицензии GNU General Public License (только GPLv2) (начиная с версии 2.0 Mono, исходный код компилятора Mono C# также доступен по лицензии MIT X11 License), библиотеки времени выполнения – по лицензии GNU Lesser General Public License (только LGPLv2), а библиотеки классов – по лицензии MIT License. Все это лицензии свободного программного обеспечения и открытого исходного кода, и, следовательно, Mono является свободным программным обеспечением с открытым исходным кодом.
Лицензия компилятора C# была изменена с GPL на лицензию MIT X11[116], чтобы позволить повторное использование кода компилятора в нескольких случаях, когда GPL препятствовала бы этому:
- Компилятор Mono как сервис
Интерактивная оболочка Mono
Встраиваемый в Mono компилятор C#
- Реализация в Mono динамической связки C# 4.0.
- Встроенный парсер и граф AST в MonoDevelop.
18 марта 2016 года приобретение компанией Microsoft компании Xamarin было официально закрыто. 31 марта 2016 года компания Microsoft объявила на Microsoft Build, что она полностью перелицензирует Mono по лицензии MIT License даже в тех случаях, когда ранее требовалась коммерческая лицензия, и Microsoft заявила, что она не будет оспаривать «применимые патент» против сторон, которые «используют, продают, предлагают для продажи, импортируют или распространяют Mono». Также было объявлено, что Xamarin передала проект Mono в .NET Foundation.